test_generic_assets.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from datetime import timedelta
  2. from flexmeasures.data.models.generic_assets import GenericAsset
  3. from flexmeasures.data.models.time_series import Sensor
  4. from timely_beliefs.sensors.func_store.knowledge_horizons import x_days_ago_at_y_oclock
  5. class NewAssetWithSensors:
  6. def __init__(self, db, setup_generic_asset_types, setup_accounts, setup_data):
  7. self.db = db
  8. self.setup_generic_asset_types = setup_generic_asset_types
  9. self.setup_accounts = setup_accounts
  10. self.setup_data = setup_data
  11. self.test_battery = None
  12. self.price_sensor1 = None
  13. self.price_sensor2 = None
  14. self.relationships = list()
  15. def __enter__(self):
  16. self.test_battery = GenericAsset(
  17. name="test battery",
  18. generic_asset_type=self.setup_generic_asset_types["battery"],
  19. owner=None,
  20. attributes={"some-attribute": "some-value", "sensors_to_show": [1, 2]},
  21. )
  22. self.db.session.add(self.test_battery)
  23. self.db.session.flush()
  24. for attribute_name, sensor_name in zip(
  25. ("price_sensor1", "price_sensor2"), ("sensor1", "sensor2")
  26. ):
  27. sensor = Sensor(
  28. name=sensor_name,
  29. generic_asset=self.test_battery,
  30. event_resolution=timedelta(hours=1),
  31. unit="EUR/MWh",
  32. knowledge_horizon=(
  33. x_days_ago_at_y_oclock,
  34. {"x": 1, "y": 12, "z": "Europe/Paris"},
  35. ),
  36. attributes=dict(
  37. daily_seasonality=True,
  38. weekly_seasonality=True,
  39. yearly_seasonality=True,
  40. ),
  41. )
  42. setattr(self, attribute_name, sensor)
  43. self.db.session.add(sensor)
  44. self.db.session.flush()
  45. for attribute, sensor in zip(
  46. ("price_sensor1", "price_sensor2"), (self.price_sensor1, self.price_sensor2)
  47. ):
  48. if self.setup_data.get(attribute):
  49. if (
  50. self.test_battery.flex_context.get("inflexible-device-sensors")
  51. is None
  52. ):
  53. self.test_battery.flex_context["inflexible-device-sensors"] = list()
  54. self.test_battery.flex_context["inflexible-device-sensors"].append(
  55. sensor.id
  56. )
  57. self.db.session.add(self.test_battery)
  58. self.db.session.commit()
  59. return self
  60. def __exit__(self, exc_type, exc_val, exc_tb):
  61. # Delete sensors and test_battery
  62. for relationship in self.relationships:
  63. self.db.session.delete(relationship)
  64. self.db.session.commit()
  65. self.db.session.delete(self.price_sensor1)
  66. self.db.session.delete(self.price_sensor2)
  67. self.db.session.delete(self.test_battery)
  68. self.db.session.commit()