Skip to content
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

WIP: config parser #2

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

WIP: config parser #2

wants to merge 2 commits into from

Conversation

aguinot
Copy link
Owner

@aguinot aguinot commented Jan 22, 2023

First version of the config parser.
See issue #1 for details.

This PR will be updated as features are added to the library.

First version of the config parser
@aguinot aguinot mentioned this pull request Jan 22, 2023
17 tasks
return res
else:
return func, var_names
# Evaluate directly if no variables are found
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably better to have the following part in a separate function like _eval that only does the evaluation once everything is set.

There is also some update in the example config file for Lensfit
config_path=None,
):

if isinstance(config_path, type(None)):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if isinstance(config_path, type(None)):
if config_path is None:

if not os.path.exists(config_path):
raise ValueError(f"No file found at: {config_path}")

config_raw = self._read_yaml_file(config_path)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quand tu fais ça tu ne t'autorises pas à utiliser directement un dictionnaire de config en input, il faut absolument passer par un fichier YAML externe.

Une solution pour bypasser ça c'est d'utiliser une @classmethod from_yaml() qui comme son nom l'indique s'occupe de checker le path et de fournir la config en raw. La sortie de cette méthode est une instance de ta classe ConfigParser, qui prend donc en input une config_raw plutot qu'un path.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ou tu pourrais même filer un dictionnaire en entrée comme ce que tu retournes parse_config

Copy link

@aboucaud aboucaud left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense que tu t'es pas mal compliqué la vie et que tu pourrais simplifier, mais globalement

  • la plupart de tes fonctions de la classe ConfigParser ne font meme pas appel à self ce qui est un gros indice pour te dire que ces fonctions devraient sortir de la classe.
  • j'aurais tendance à séparer les fonctions qui parsent des fonctions qui checkent. Ce qui n'empeche pas d'avoir des checks dynamiques pendant le parsing, mais qui ne les mélangent pas à des checks "statiques" qui peuvent être faits dès le début sur l'ensemble du dictionnaire comme la présence de certaines keys. 1) ça te permet de faire une simple boucle sur une liste de keys nécessaires (quitte à faire le ValueError avec la bonne key) 2) Et ça rend le parsing ensuite bien plus lisible.
  • j'aurais tendance à séparer la classe de parser en sous-classes pour mieux gérer les subtilités, un peu comme ce que j'ai fait avec https://github.com/aboucaud/galcheat . Une pour les galaxy catalog, une pour les star catalogs, etc. Mais tu gardes un MainParser qui permet de les regrouper et d'y accéder facilement. Ce sera plus lisible et plus facilement testable.

Voilà pour un premier passage rapide.

if not os.path.exists(config_path):
raise ValueError(f"No file found at: {config_path}")

config_raw = self._read_yaml_file(config_path)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ou tu pourrais même filer un dictionnaire en entrée comme ce que tu retournes parse_config

@aboucaud
Copy link

Also put this file under the config submodule, not config_parser.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants