-
Notifications
You must be signed in to change notification settings - Fork 0
feat: add global environment variables to pixi.toml #11
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
Conversation
## Walkthrough
A new `[activation]` section was added to `pixi.toml` to define environment variables for key project directories. Additionally, an example Jupyter notebook and a Python script were introduced to demonstrate accessing these environment variables, logging their paths, and counting files within the referenced directories.
## Changes
| File(s) | Change Summary |
|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|
| pixi.toml | Added `[activation]` section defining environment variables for project subdirectories (CONFIG, METADATA, LOGS, RAWDATA, PROCDATA, RESULTS, SCRIPTS). Added `[tasks]` section with a task running `example_script.py`. |
| workflow/notebooks/example_notebook.ipynb | Added a Jupyter notebook demonstrating logging setup, environment variable usage for directory paths, and file counting. |
| workflow/scripts/example_script.py | Added a Python script with a `main()` function that logs the current working directory, iterates over environment variables, and counts files in each referenced directory. |
## Poem
> In the warren, new paths now appear,
> With scripts and notebooks hopping near.
> Each folder’s count, each log’s delight,
> Environment set, all things just right.
> From raw to results, the journey flows,
> A bunny’s code, and knowledge grows! 🐇✨ Note ⚡️ AI Code Reviews for VS Code, Cursor, WindsurfCodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback. Note ⚡️ Faster reviews with cachingCodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 2
🧹 Nitpick comments (1)
workflow/scripts/example_script.py (1)
1-27
: Consider using spaces for indentation instead of tabsThe script uses tabs for indentation. Check if this is consistent with your project's coding standards.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting
📒 Files selected for processing (3)
pixi.toml
(1 hunks)workflow/notebooks/example_notebook.ipynb
(1 hunks)workflow/scripts/example_script.py
(1 hunks)
🔇 Additional comments (2)
pixi.toml (1)
14-22
: Clean implementation of environment variables!The addition of the [activation] section with environment variables provides a centralized way to define important directory paths. This makes them easily accessible across the project in scripts and notebooks.
workflow/notebooks/example_notebook.ipynb (1)
1-94
: Great example notebook demonstrating environment variable usageThis notebook clearly demonstrates how to access and use the environment variables defined in pixi.toml. It nicely complements the example script.
for var in env_dir_variables: | ||
var_path = Path(os.environ.get(var)) | ||
logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files') |
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.
🛠️ Refactor suggestion
Add error handling for environment variables
The script currently assumes that all environment variables will be defined, but there's no error handling for the case where they might be missing.
for var in env_dir_variables:
- var_path = Path(os.environ.get(var))
- logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files')
+ var_value = os.environ.get(var)
+ if var_value is None:
+ logger.warning(f'{var} environment variable is not set')
+ continue
+ var_path = Path(var_value)
+ logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files')
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
for var in env_dir_variables: | |
var_path = Path(os.environ.get(var)) | |
logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files') | |
for var in env_dir_variables: | |
+ var_value = os.environ.get(var) | |
+ if var_value is None: | |
+ logger.warning(f'{var} environment variable is not set') | |
+ continue | |
var_path = Path(var_value) | |
logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files') |
🤖 Prompt for AI Agents
In workflow/scripts/example_script.py around lines 20 to 22, the code assumes
all environment variables in env_dir_variables are defined, but it lacks error
handling for missing variables. Add a check to verify if each environment
variable is set before using it; if a variable is missing, log an appropriate
error or warning message and skip processing for that variable to prevent
exceptions.
"for var in env_dir_variables:\n", | ||
" var_path = Path(os.environ.get(var))\n", | ||
" logger.info(f'{var}: {var_path} has {len(list(var_path.glob(\"*\")))} files')\n", |
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.
🛠️ Refactor suggestion
Add error handling for environment variables
Similar to the script, the notebook should handle the case where environment variables might not be set.
for var in env_dir_variables:
var_value = os.environ.get(var)
if var_value is None:
logger.warning(f'{var} environment variable is not set')
continue
var_path = Path(var_value)
logger.info(f'{var}: {var_path} has {len(list(var_path.glob("*")))} files')
🤖 Prompt for AI Agents
In workflow/notebooks/example_notebook.ipynb around lines 57 to 59, the code
assumes environment variables in env_dir_variables are always set, which can
cause errors if they are missing. Modify the loop to first check if the
environment variable is set by retrieving its value with os.environ.get(var). If
the value is None, log a warning indicating the variable is not set and skip to
the next iteration. Only convert the value to a Path and log the file count if
the variable is present.
From latest version of bhklab-project-template, add paths to data, config, metadata directories to use in scripts and notebooks.
Summary by CodeRabbit
New Features
Documentation