-
-
Notifications
You must be signed in to change notification settings - Fork 263
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature add support for env variables #286
Changes from 4 commits
32f99c5
27a0159
81581f6
8d177a2
aea9a24
dbf9297
c8d4005
270cc39
7dc9975
1ec134f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import os | ||
|
||
# Path to the root of the project | ||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) | ||
|
||
# Path to the environment variables | ||
CONFIG_PATH = os.path.join(ROOT_DIR, 'configuration.conf') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I convention for the configuration file that I had in my mind was something like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i think robyn.env is great i've changed it to that |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import os | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe name this file something like As a good practice is to keep the namespace or filename in accordance to what it does. And I assume the purpose of this file is to have helper functions for environment population. |
||
from definitions import CONFIG_PATH | ||
|
||
# parse the configuration file returning a list of tuples (key, value) containing the environment variables | ||
def parser(): | ||
"""Parse the configuration file""" | ||
with open(CONFIG_PATH, 'r') as f: | ||
for line in f: | ||
if line.startswith('#'): | ||
continue | ||
yield line.strip().split('=') | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would recommend writing the function as the following def parser(config_path=CONFIG_PATH):
... Declaring a function like this will allow it to be more testable and not have us mock the variables if we need to write any unit tests. This is called reducing coupling. You can have a look at this concept here: https://www.youtube.com/watch?v=eiDyK_ofPPM |
||
|
||
# check for the environment variables set in cli and if not set them | ||
|
||
def load_vars(variables = parser()): | ||
"""Main function""" | ||
for var in variables: | ||
if var[0] in os.environ: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you think we would want to override the existing environment variables or not? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I thought the priority is for environment variables that are set in the terminal or manually by the user not the ones that are in the config file so i made the code check for variables that already exist and not update those There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Okay, makes sense. ✨ |
||
continue | ||
else: | ||
os.environ[var[0]]=var[1] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Something similar for this function def load_variables(variables = None):
variables = parser() if variables is None
... |
||
|
||
|
||
|
||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can either move the contents of the file to
import_vars
only or if you like to keep the constants in a separate file, we can create a submodule.Let me know if you need any help with that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the idea was that this file defines where the root of the project is, because if i tried to define the root in a nested file it would be dependent on the path of the file I guess
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can use Pathlib(https://docs.python.org/3/library/pathlib.html) to resolve the path. And I feel that we can move these constants and env_populator to a module of their own as the constants are only being used in the
env_populator.py
.