io.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from marshmallow import fields, Schema, post_load, post_dump
  2. from flexmeasures.data.schemas.sensors import SensorIdField
  3. from flexmeasures.data.schemas import AwareDateTimeField, DurationField
  4. from flexmeasures.data.schemas.sources import DataSourceIdField
  5. from flask import current_app
  6. class RequiredInput(Schema):
  7. name = fields.Str(required=True)
  8. unit = fields.Str(required=False)
  9. class Input(Schema):
  10. """
  11. This schema implements the required fields to perform a TimedBeliefs search
  12. using the method flexmeasures.data.models.time_series:TimedBelief.search_beliefs.
  13. It includes the field `name`, which is not part of the search query, for later reference of the belief.
  14. """
  15. name = fields.Str(required=False)
  16. sensor = SensorIdField(required=True)
  17. source = DataSourceIdField()
  18. sources = fields.List(DataSourceIdField())
  19. event_starts_after = AwareDateTimeField()
  20. event_ends_before = AwareDateTimeField()
  21. belief_time = AwareDateTimeField()
  22. beliefs_after = AwareDateTimeField()
  23. horizons_at_least = DurationField()
  24. horizons_at_most = DurationField()
  25. user_source_ids = fields.List(DataSourceIdField())
  26. source_types = fields.List(fields.Str())
  27. exclude_source_types = fields.List(fields.Str())
  28. most_recent_beliefs_only = fields.Boolean()
  29. most_recent_events_only = fields.Boolean()
  30. use_latest_version_per_event = fields.Boolean()
  31. one_deterministic_belief_per_event = fields.Boolean()
  32. one_deterministic_belief_per_event_per_source = fields.Boolean()
  33. most_recent_only = fields.Boolean()
  34. resolution = DurationField()
  35. sum_multiple = fields.Boolean()
  36. def print_source_deprecation_warning(self, data):
  37. if "source" in data:
  38. current_app.logger.warning(
  39. "`source` field to be deprecated in v0.17.0. Please, use `sources` instead"
  40. )
  41. @post_load
  42. def post_load_deprecation_warning_source(self, data: dict, **kawrgs) -> dict:
  43. self.print_source_deprecation_warning(data)
  44. return data
  45. @post_dump
  46. def post_dump_deprecation_warning_source(self, data: dict, **kwargs) -> dict:
  47. self.print_source_deprecation_warning(data)
  48. return data
  49. class Output(Schema):
  50. name = fields.Str(required=False)
  51. column = fields.Str(required=False)
  52. sensor = SensorIdField(required=True)
  53. class RequiredOutput(Schema):
  54. name = fields.Str(required=True)
  55. column = fields.Str(required=False)
  56. unit = fields.Str(required=False)