LabelProvider.py 994 B

1234567891011121314151617181920212223242526272829303132333435
  1. import json
  2. from pathlib import Path
  3. from pycs import db
  4. from pycs.database.base import NamedBaseModel
  5. class LabelProvider(NamedBaseModel):
  6. """
  7. database class for label providers
  8. """
  9. description = db.Column(db.String)
  10. root_folder = db.Column(db.String, nullable=False, unique=True)
  11. # relationships to other models
  12. projects = db.relationship("Project", backref="label_provider", lazy="dynamic")
  13. serialize_rules = ('-projects',)
  14. @classmethod
  15. def discover(cls, root: Path, config_name: str = "configuration.json"):
  16. for folder in Path(root).glob("*"):
  17. with open(folder / config_name) as f:
  18. config = json.load(f)
  19. # extract data
  20. name = config['name']
  21. description = config.get('description', None)
  22. provider, _ = cls.get_or_create(root_folder=str(folder))
  23. provider.name = name
  24. provider.description = description
  25. db.session.commit()