This project brings (at least partially) the ability of providing properties files like Spring Framework but now in whatever Python context.
Project description
Application-Profiles
This project brings (at least partially) the ability of providing properties files like Spring Framework but now in whatever Python context.
How to use it
pip install application-profiles
Import
from application_profiles import ApplicationProfiles
...
profiles = ApplicationProfiles()
...
a_prop :ApplicationProfiles = profiles.properties['a_prop']
Select the desired profile(s) by using Environment Variable
One profile
export APP_PROFILES=dev
List of profile
export APP_PROFILES=dev,red,south
Select the desired profile(s) by constructor argument
One profile
profiles = ApplicationProfiles(profiles="dev")
List of profile
profiles = ApplicationProfiles(profiles="dev,red,south")
How it work?
'profiles' Python module
Before moving on, there are several requirements to accomplish, the first one is having in the root of your project a module called profiles
, where your properties files will be placed.
Like this
profiles/
__init__.py
application.yaml
application-dev.yaml
...
Properties Files
Inside the profiles
module, you must place all the properties files to be included in your project. There is a convention required to name them, like in Spring, the prefix of all the files must be application
followed by the name of the desired profile, like for example dev
, test
etc., joined by a hyphen -
, here you go a list of common examples
application-dev.yaml
application-prod.yaml
application-int.yaml
Important
The default profile is application.yaml
(without a profile name), this file is optional but it is consedered the "default" profile.
Load Precedence
This is something crucial for the library, there is a precedence in how the files are loaded. The profiles files are loaded in the following order:
1.- default
profile.
2.- All the profiles in the provided order by the profile
constructor argument.
3.- All the profiles in the provided order by the APP_PROFILES
environment variable.
Properties are merged in that order, then they are consumables through the ApplicationProfiles
object.
How the properties are merged?
This point is extremely important, because there are a couple of restrictions in how this library works
-
Lists : if there is a variable in more than one profile that contains a list, it is replaced entirely with the corresponding value.
-
Dictionaries: all dictionaries are scanned in deep replacing coincidences for native raw data types like numbers, strings, booleans. It includes nested dictionaries.
Run it in local
This project uses Poetry
, in case you don't have it just run make install-poetry
Create a local env & Install dependencies*
make install
Run the Tests Suite
make test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for application_profiles-0.1.11a0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb72859324f0c4b67643cfd5a1fa12a43aefc3af85086cdd9ad8e3e4e1ccce3d |
|
MD5 | e404ca550603e2f8020368ac8e5f47b1 |
|
BLAKE2b-256 | 04e8f5bd51ce0f8a4c169dc75ac8797758a7686eeaafea43e7f0396abf439175 |