-
Notifications
You must be signed in to change notification settings - Fork 66
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
safely convert ini parameters to bool, int, list and dict #104
Open
kgk
wants to merge
16
commits into
sontek:master
Choose a base branch
from
kgk:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 1 commit
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
3d49b8d
safely convert ini parameters to bool and int
kkvilekval 1855c90
added gitlab-ci
kkvilekval 2daf286
bump-version
kkvilekval 04482bb
uses stages
kkvilekval d69eb19
Update .gitlab-ci.yml file
kkvilekval 398b9d1
typo
kkvilekval 01f883a
bump version; user build
kkvilekval 16c4dd8
install build
kkvilekval 38ed887
added json5 decoding for structures
kkvilekval 8bcc9f0
bump version
kkvilekval 62110dc
use ast literal_eval
kkvilekval 80863e8
version bump
kkvilekval c33729e
remove redundant converstion
kkvilekval ee3042d
catch all ast errors
kkvilekval 37d6880
bump
kkvilekval 656744f
parens about exc
kkvilekval File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -91,6 +91,18 @@ def get_route_config(parser, section): | |
return config | ||
|
||
|
||
def safe_conversion(value): | ||
"""convert a string to a more specific type""" | ||
if value.lower() in ("true", "false"): | ||
return bool(value) | ||
try: | ||
if float(value).is_integer(): | ||
return int(value) | ||
return float(value) | ||
except ValueError: | ||
return value | ||
|
||
|
||
class INILoader(celery.loaders.base.BaseLoader): | ||
ConfigParser = configparser.SafeConfigParser | ||
|
||
|
@@ -106,7 +118,7 @@ def read_configuration(self, fail_silently=True): | |
config_dict = {} | ||
|
||
for key, value in self.parser.items('celery'): | ||
config_dict[key] = value | ||
config_dict[key] = safe_conversion(value) | ||
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. Might need to consider applying this to other structures below? |
||
|
||
if celery_version.major > 6: | ||
# TODO: Check for invalid settings | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
For this, I suggest using
pyramid.settings.asbool
to consider the full range of supported "bool-like" values.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.
I did consider this, however, this is trying to replicate what you might use in celeryconfig.py, but with values you would find in the ini file.
For example in celeryconfig.py you might write
task_acks_late = True
so in the ini you would need to write
task_acks_late = true
Pyramid asbool will also convert integer and other values to a boolean which may or may not work similarly to setting them celeryconfig.py
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.
Good point about the integer. Better to stay safe with the explicit bool-like strings. 👍