zepben.ewb 1.0.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zepben/ewb/__init__.py +601 -0
- zepben/ewb/auth/__init__.py +10 -0
- zepben/ewb/auth/client/__init__.py +5 -0
- zepben/ewb/auth/client/zepben_token_fetcher.py +273 -0
- zepben/ewb/auth/common/__init__.py +5 -0
- zepben/ewb/auth/common/auth_exception.py +16 -0
- zepben/ewb/auth/common/auth_method.py +28 -0
- zepben/ewb/auth/common/auth_provider_config.py +96 -0
- zepben/ewb/database/__init__.py +4 -0
- zepben/ewb/database/paths/__init__.py +4 -0
- zepben/ewb/database/paths/database_type.py +34 -0
- zepben/ewb/database/paths/ewb_data_file_paths.py +237 -0
- zepben/ewb/database/sqlite/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/base_cim_reader.py +212 -0
- zepben/ewb/database/sqlite/common/base_cim_writer.py +159 -0
- zepben/ewb/database/sqlite/common/base_collection_reader.py +96 -0
- zepben/ewb/database/sqlite/common/base_collection_writer.py +73 -0
- zepben/ewb/database/sqlite/common/base_database_reader.py +127 -0
- zepben/ewb/database/sqlite/common/base_database_tables.py +137 -0
- zepben/ewb/database/sqlite/common/base_database_writer.py +195 -0
- zepben/ewb/database/sqlite/common/base_entry_writer.py +34 -0
- zepben/ewb/database/sqlite/common/base_service_reader.py +50 -0
- zepben/ewb/database/sqlite/common/base_service_writer.py +104 -0
- zepben/ewb/database/sqlite/common/metadata_collection_reader.py +39 -0
- zepben/ewb/database/sqlite/common/metadata_collection_writer.py +38 -0
- zepben/ewb/database/sqlite/common/metadata_entry_reader.py +45 -0
- zepben/ewb/database/sqlite/common/metadata_entry_writer.py +41 -0
- zepben/ewb/database/sqlite/common/reader_exceptions.py +30 -0
- zepben/ewb/database/sqlite/customer/__init__.py +4 -0
- zepben/ewb/database/sqlite/customer/customer_cim_reader.py +169 -0
- zepben/ewb/database/sqlite/customer/customer_cim_writer.py +137 -0
- zepben/ewb/database/sqlite/customer/customer_database_reader.py +44 -0
- zepben/ewb/database/sqlite/customer/customer_database_tables.py +37 -0
- zepben/ewb/database/sqlite/customer/customer_database_writer.py +45 -0
- zepben/ewb/database/sqlite/customer/customer_service_reader.py +57 -0
- zepben/ewb/database/sqlite/customer/customer_service_writer.py +47 -0
- zepben/ewb/database/sqlite/diagram/__init__.py +4 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_reader.py +105 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_writer.py +81 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_reader.py +45 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_tables.py +29 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_writer.py +44 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_reader.py +49 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_writer.py +41 -0
- zepben/ewb/database/sqlite/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/extensions/prepared_statement.py +112 -0
- zepben/ewb/database/sqlite/extensions/result_set.py +153 -0
- zepben/ewb/database/sqlite/network/__init__.py +4 -0
- zepben/ewb/database/sqlite/network/network_cim_reader.py +3167 -0
- zepben/ewb/database/sqlite/network/network_cim_writer.py +2561 -0
- zepben/ewb/database/sqlite/network/network_database_reader.py +173 -0
- zepben/ewb/database/sqlite/network/network_database_tables.py +242 -0
- zepben/ewb/database/sqlite/network/network_database_writer.py +43 -0
- zepben/ewb/database/sqlite/network/network_service_reader.py +265 -0
- zepben/ewb/database/sqlite/network/network_service_writer.py +209 -0
- zepben/ewb/database/sqlite/tables/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/loop_substation_relationship.py +17 -0
- zepben/ewb/database/sqlite/tables/associations/table_asset_organisation_roles_assets.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_assets_power_system_resources.py +41 -0
- zepben/ewb/database/sqlite/tables/associations/table_battery_units_battery_controls.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_substations.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_terminals.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_customer_agreements_pricing_structures.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_end_devices_end_device_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_equipment_containers.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_operational_restrictions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_usage_points.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_loops_substations.py +43 -0
- zepben/ewb/database/sqlite/tables/associations/table_pricing_structures_tariffs.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_protected_switches.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_sensors.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_schemes_protection_relay_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_synchronous_machines_reactive_capability_curves.py +39 -0
- zepben/ewb/database/sqlite/tables/associations/table_usage_points_end_devices.py +40 -0
- zepben/ewb/database/sqlite/tables/column.py +37 -0
- zepben/ewb/database/sqlite/tables/exceptions.py +10 -0
- zepben/ewb/database/sqlite/tables/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_reclose_delays.py +38 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_relay_info.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/table_pan_demand_response_functions.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/table_sites.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_loops.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_lv_feeders.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/table_ev_charging_units.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_distance_relays.py +28 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_thresholds.py +36 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_time_limits.py +34 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_functions.py +24 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_schemes.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_systems.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_voltage_relays.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_battery_controls.py +23 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_power_transformer_end_ratings.py +34 -0
- zepben/ewb/database/sqlite/tables/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_cable_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_no_load_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_open_circuit_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_overhead_wire_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_power_transformer_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_short_circuit_tests.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_shunt_compensator_info.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_switch_info.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_end_info.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_tank_info.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_test.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_wire_info.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_functions.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_info.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_organisation_roles.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_owners.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_assets.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_streetlights.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_structures.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_agreements.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_documents.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_address_field.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_addresses.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_locations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisation_roles.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_position_points.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_street_addresses.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_town_details.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customer_agreements.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customers.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_pricing_structures.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_tariffs.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_current_transformer_info.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_potential_transformer_info.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/table_poles.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_device_functions.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_devices.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_meters.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_usage_points.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/table_operational_restrictions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_auxiliary_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_current_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_fault_indicators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_potential_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_sensors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_ac_dc_terminals.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_base_voltages.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_conducting_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_node_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_nodes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curve_data.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curves.py +17 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_feeders.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_geographical_regions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_identified_objects.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_name_types.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_names.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_power_system_resources.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_sub_geographical_regions.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_substations.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_terminals.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_object_points.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_objects.py +31 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagrams.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_branches.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_equipment.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_battery_units.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_photo_voltaic_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_units.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_wind_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_accumulators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_analogs.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_discretes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_io_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_measurements.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/table_current_relays.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_sources.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ac_line_segments.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_breakers.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_busbar_sections.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_clamps.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_conductors.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_connectors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_cuts.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_earth_fault_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_connections.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumer_phases.py +37 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumers.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_source_phases.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_sources.py +44 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_fuses.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ground_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounding_impedances.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounds.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_jumpers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_junctions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_linear_shunt_compensators.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_lines.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_load_break_switches.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_impedances.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_line_parameters.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_phase_impedances.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_sequence_impedances.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_petersen_coils.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_phase_impedance_data.py +52 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connection_phases.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connections.py +50 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformer_ends.py +43 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformers.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_protected_switches.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ratio_tap_changers.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reactive_capability_curves.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reclosers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_cond_eq.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_controls.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_rotating_machines.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_series_compensators.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_shunt_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_static_var_compensator.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_switches.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_synchronous_machines.py +95 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changer_controls.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changers.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_ends.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_star_impedances.py +32 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/table_circuits.py +27 -0
- zepben/ewb/database/sqlite/tables/sqlite_table.py +142 -0
- zepben/ewb/database/sqlite/tables/table_metadata_data_sources.py +21 -0
- zepben/ewb/database/sqlite/tables/table_version.py +38 -0
- zepben/ewb/dataclassy/__init__.py +15 -0
- zepben/ewb/dataclassy/dataclass.py +192 -0
- zepben/ewb/dataclassy/decorator.py +35 -0
- zepben/ewb/dataclassy/functions.py +80 -0
- zepben/ewb/examples/__init__.py +6 -0
- zepben/ewb/examples/simple_test_network.py +158 -0
- zepben/ewb/exceptions.py +52 -0
- zepben/ewb/model/__init__.py +4 -0
- zepben/ewb/model/busbranch/__init__.py +4 -0
- zepben/ewb/model/busbranch/bus_branch.py +1051 -0
- zepben/ewb/model/cim/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/relay_info.py +128 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/pan_demand_reponse_function.py +112 -0
- zepben/ewb/model/cim/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/site.py +37 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/loop.py +207 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/lv_feeder.py +258 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/ev_charging_unit.py +18 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/distance_relay.py +69 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/power_direction_kind.py +35 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_kind.py +113 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_function.py +448 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_scheme.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_system.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/relay_setting.py +35 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/voltage_relay.py +20 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control.py +36 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control_mode.py +82 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_cooling_type.py +56 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_end_rated_s.py +26 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/vector_group.py +292 -0
- zepben/ewb/model/cim/extensions/zbex.py +17 -0
- zepben/ewb/model/cim/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/cable_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/no_load_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/open_circuit_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/overhead_wire_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/power_transformer_info.py +103 -0
- zepben/ewb/model/cim/iec61968/assetinfo/short_circuit_test.py +67 -0
- zepben/ewb/model/cim/iec61968/assetinfo/shunt_compensator_info.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/switch_info.py +17 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_end_info.py +137 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_tank_info.py +108 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_test.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_info.py +24 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_material_kind.py +55 -0
- zepben/ewb/model/cim/iec61968/assets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assets/asset.py +154 -0
- zepben/ewb/model/cim/iec61968/assets/asset_container.py +16 -0
- zepben/ewb/model/cim/iec61968/assets/asset_function.py +15 -0
- zepben/ewb/model/cim/iec61968/assets/asset_info.py +19 -0
- zepben/ewb/model/cim/iec61968/assets/asset_organisation_role.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/asset_owner.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/streetlight.py +29 -0
- zepben/ewb/model/cim/iec61968/assets/structure.py +16 -0
- zepben/ewb/model/cim/iec61968/common/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/common/agreement.py +16 -0
- zepben/ewb/model/cim/iec61968/common/document.py +36 -0
- zepben/ewb/model/cim/iec61968/common/location.py +129 -0
- zepben/ewb/model/cim/iec61968/common/organisation.py +15 -0
- zepben/ewb/model/cim/iec61968/common/organisation_role.py +22 -0
- zepben/ewb/model/cim/iec61968/common/position_point.py +44 -0
- zepben/ewb/model/cim/iec61968/common/street_address.py +28 -0
- zepben/ewb/model/cim/iec61968/common/street_detail.py +45 -0
- zepben/ewb/model/cim/iec61968/common/town_detail.py +25 -0
- zepben/ewb/model/cim/iec61968/customers/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/customers/customer.py +93 -0
- zepben/ewb/model/cim/iec61968/customers/customer_agreement.py +107 -0
- zepben/ewb/model/cim/iec61968/customers/customer_kind.py +67 -0
- zepben/ewb/model/cim/iec61968/customers/pricing_structure.py +88 -0
- zepben/ewb/model/cim/iec61968/customers/tariff.py +18 -0
- zepben/ewb/model/cim/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/current_transformer_info.py +51 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/potential_transformer_info.py +33 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_construction_kind.py +67 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_function_kind.py +43 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/pole.py +87 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/streetlight_lamp_kind.py +25 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/ratio.py +34 -0
- zepben/ewb/model/cim/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/metering/controlled_appliance.py +150 -0
- zepben/ewb/model/cim/iec61968/metering/end_device.py +165 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function.py +17 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function_kind.py +46 -0
- zepben/ewb/model/cim/iec61968/metering/meter.py +26 -0
- zepben/ewb/model/cim/iec61968/metering/usage_point.py +186 -0
- zepben/ewb/model/cim/iec61968/operations/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/operations/operational_restriction.py +92 -0
- zepben/ewb/model/cim/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/auxiliary_equipment.py +24 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/current_transformer.py +37 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/fault_indicator.py +18 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer.py +38 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer_kind.py +28 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/sensor.py +92 -0
- zepben/ewb/model/cim/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/core/ac_dc_terminal.py +16 -0
- zepben/ewb/model/cim/iec61970/base/core/base_voltage.py +17 -0
- zepben/ewb/model/cim/iec61970/base/core/conducting_equipment.py +198 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node.py +105 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node_container.py +15 -0
- zepben/ewb/model/cim/iec61970/base/core/curve.py +124 -0
- zepben/ewb/model/cim/iec61970/base/core/curve_data.py +29 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment.py +366 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment_container.py +199 -0
- zepben/ewb/model/cim/iec61970/base/core/feeder.py +260 -0
- zepben/ewb/model/cim/iec61970/base/core/geographical_region.py +82 -0
- zepben/ewb/model/cim/iec61970/base/core/identified_object.py +234 -0
- zepben/ewb/model/cim/iec61970/base/core/name.py +36 -0
- zepben/ewb/model/cim/iec61970/base/core/name_type.py +203 -0
- zepben/ewb/model/cim/iec61970/base/core/phase_code.py +201 -0
- zepben/ewb/model/cim/iec61970/base/core/power_system_resource.py +106 -0
- zepben/ewb/model/cim/iec61970/base/core/sub_geographical_region.py +93 -0
- zepben/ewb/model/cim/iec61970/base/core/substation.py +277 -0
- zepben/ewb/model/cim/iec61970/base/core/terminal.py +171 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram.py +109 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object.py +160 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object_point.py +25 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_style.py +26 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/orientation_kind.py +27 -0
- zepben/ewb/model/cim/iec61970/base/domain/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/domain/unit_symbol.py +492 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_branch.py +113 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_equipment.py +15 -0
- zepben/ewb/model/cim/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_state_kind.py +37 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_unit.py +108 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/photo_voltaic_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_unit.py +28 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_wind_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog.py +16 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/control.py +26 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/iopoint.py +16 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement.py +60 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement_value.py +21 -0
- zepben/ewb/model/cim/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/protection/current_relay.py +23 -0
- zepben/ewb/model/cim/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_control.py +22 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_point.py +16 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_source.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/wires/ac_line_segment.py +214 -0
- zepben/ewb/model/cim/iec61970/base/wires/breaker.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/busbar_section.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/clamp.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/conductor.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/connector.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/cut.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/disconnector.py +17 -0
- zepben/ewb/model/cim/iec61970/base/wires/earth_fault_compensator.py +21 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_connection.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer.py +107 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer_phase.py +56 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source.py +172 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source_phase.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/fuse.py +23 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground_disconnector.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/grounding_impedance.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/jumper.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/junction.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/line.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/linear_shunt_compensator.py +26 -0
- zepben/ewb/model/cim/iec61970/base/wires/load_break_switch.py +14 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_impedance.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_line_parameter.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_phase_impedance.py +99 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_sequence_impedance.py +43 -0
- zepben/ewb/model/cim/iec61970/base/wires/petersen_coil.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_impedance_data.py +37 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_shunt_connection_kind.py +38 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection.py +524 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection_phase.py +34 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer.py +217 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer_end.py +208 -0
- zepben/ewb/model/cim/iec61970/base/wires/protected_switch.py +96 -0
- zepben/ewb/model/cim/iec61970/base/wires/ratio_tap_changer.py +30 -0
- zepben/ewb/model/cim/iec61970/base/wires/reactive_capability_curve.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/recloser.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_cond_eq.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control.py +173 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control_mode_kind.py +46 -0
- zepben/ewb/model/cim/iec61970/base/wires/rotating_machine.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/series_compensator.py +42 -0
- zepben/ewb/model/cim/iec61970/base/wires/shunt_compensator.py +59 -0
- zepben/ewb/model/cim/iec61970/base/wires/single_phase_kind.py +105 -0
- zepben/ewb/model/cim/iec61970/base/wires/static_var_compensator.py +40 -0
- zepben/ewb/model/cim/iec61970/base/wires/svc_control_mode.py +28 -0
- zepben/ewb/model/cim/iec61970/base/wires/switch.py +119 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine.py +168 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine_kind.py +44 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer.py +150 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer_control.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_end.py +73 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_star_impedance.py +48 -0
- zepben/ewb/model/cim/iec61970/base/wires/winding_connection.py +43 -0
- zepben/ewb/model/cim/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/circuit.py +144 -0
- zepben/ewb/model/phases.py +168 -0
- zepben/ewb/model/resistance_reactance.py +40 -0
- zepben/ewb/services/__init__.py +4 -0
- zepben/ewb/services/common/__init__.py +16 -0
- zepben/ewb/services/common/base_service.py +383 -0
- zepben/ewb/services/common/base_service_comparator.py +394 -0
- zepben/ewb/services/common/difference.py +47 -0
- zepben/ewb/services/common/enum_mapper.py +55 -0
- zepben/ewb/services/common/meta/__init__.py +4 -0
- zepben/ewb/services/common/meta/data_source.py +16 -0
- zepben/ewb/services/common/meta/metadata_collection.py +28 -0
- zepben/ewb/services/common/meta/metadata_translations.py +47 -0
- zepben/ewb/services/common/meta/service_info.py +22 -0
- zepben/ewb/services/common/reference_resolvers.py +374 -0
- zepben/ewb/services/common/resolver.py +597 -0
- zepben/ewb/services/common/translator/__init__.py +4 -0
- zepben/ewb/services/common/translator/base_cim2proto.py +92 -0
- zepben/ewb/services/common/translator/base_proto2cim.py +112 -0
- zepben/ewb/services/common/translator/service_differences.py +81 -0
- zepben/ewb/services/common/translator/util.py +78 -0
- zepben/ewb/services/customer/__init__.py +4 -0
- zepben/ewb/services/customer/customer_service_comparator.py +52 -0
- zepben/ewb/services/customer/customers.py +23 -0
- zepben/ewb/services/customer/translator/__init__.py +21 -0
- zepben/ewb/services/customer/translator/customer_cim2proto.py +71 -0
- zepben/ewb/services/customer/translator/customer_enum_mappers.py +18 -0
- zepben/ewb/services/customer/translator/customer_proto2cim.py +87 -0
- zepben/ewb/services/diagram/__init__.py +4 -0
- zepben/ewb/services/diagram/diagram_service_comparator.py +39 -0
- zepben/ewb/services/diagram/diagrams.py +107 -0
- zepben/ewb/services/diagram/translator/__init__.py +11 -0
- zepben/ewb/services/diagram/translator/diagram_cim2proto.py +51 -0
- zepben/ewb/services/diagram/translator/diagram_enum_mappers.py +21 -0
- zepben/ewb/services/diagram/translator/diagram_proto2cim.py +61 -0
- zepben/ewb/services/measurement/__init__.py +4 -0
- zepben/ewb/services/measurement/measurements.py +35 -0
- zepben/ewb/services/measurement/translator/__init__.py +6 -0
- zepben/ewb/services/measurement/translator/measurement_cim2proto.py +42 -0
- zepben/ewb/services/measurement/translator/measurement_proto2cim.py +52 -0
- zepben/ewb/services/network/__init__.py +4 -0
- zepben/ewb/services/network/network_extensions.py +119 -0
- zepben/ewb/services/network/network_service.py +302 -0
- zepben/ewb/services/network/network_service_comparator.py +1322 -0
- zepben/ewb/services/network/network_state.py +34 -0
- zepben/ewb/services/network/tracing/__init__.py +4 -0
- zepben/ewb/services/network/tracing/busbranch_trace.py +36 -0
- zepben/ewb/services/network/tracing/connectivity/__init__.py +4 -0
- zepben/ewb/services/network/tracing/connectivity/connectivity_result.py +105 -0
- zepben/ewb/services/network/tracing/connectivity/nominal_phase_path.py +23 -0
- zepben/ewb/services/network/tracing/connectivity/phase_paths.py +70 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_connected.py +226 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_internal.py +64 -0
- zepben/ewb/services/network/tracing/connectivity/transformer_phase_paths.py +202 -0
- zepben/ewb/services/network/tracing/connectivity/xy_candidate_phase_paths.py +235 -0
- zepben/ewb/services/network/tracing/connectivity/xy_phase_step.py +24 -0
- zepben/ewb/services/network/tracing/feeder/__init__.py +4 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_lv_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/clear_direction.py +80 -0
- zepben/ewb/services/network/tracing/feeder/direction_status.py +133 -0
- zepben/ewb/services/network/tracing/feeder/feeder_direction.py +107 -0
- zepben/ewb/services/network/tracing/feeder/set_direction.py +143 -0
- zepben/ewb/services/network/tracing/find_swer_equipment.py +175 -0
- zepben/ewb/services/network/tracing/networktrace/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/equipment_tree_builder.py +71 -0
- zepben/ewb/services/network/tracing/networktrace/actions/tree_node.py +37 -0
- zepben/ewb/services/network/tracing/networktrace/compute_data.py +60 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/conditions.py +73 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/direction_condition.py +63 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_step_limit_condition.py +26 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_type_step_limit_condition.py +44 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_queue_condition.py +67 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_stop_condition.py +65 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/open_condition.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace.py +450 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_action_type.py +42 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_queue_next.py +84 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step.py +125 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step_path_provider.py +351 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_tracker.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/operators/__init__.py +14 -0
- zepben/ewb/services/network/tracing/networktrace/operators/equipment_container_state_operators.py +264 -0
- zepben/ewb/services/network/tracing/networktrace/operators/feeder_direction_state_operations.py +181 -0
- zepben/ewb/services/network/tracing/networktrace/operators/in_service_state_operators.py +76 -0
- zepben/ewb/services/network/tracing/networktrace/operators/network_state_operators.py +120 -0
- zepben/ewb/services/network/tracing/networktrace/operators/open_state_operators.py +104 -0
- zepben/ewb/services/network/tracing/networktrace/operators/phase_state_operators.py +56 -0
- zepben/ewb/services/network/tracing/networktrace/tracing.py +132 -0
- zepben/ewb/services/network/tracing/phases/__init__.py +4 -0
- zepben/ewb/services/network/tracing/phases/phase_inferrer.py +205 -0
- zepben/ewb/services/network/tracing/phases/phase_status.py +101 -0
- zepben/ewb/services/network/tracing/phases/remove_phases.py +143 -0
- zepben/ewb/services/network/tracing/phases/set_phases.py +490 -0
- zepben/ewb/services/network/tracing/traversal/__init__.py +4 -0
- zepben/ewb/services/network/tracing/traversal/context_value_computer.py +63 -0
- zepben/ewb/services/network/tracing/traversal/debug_logging.py +124 -0
- zepben/ewb/services/network/tracing/traversal/queue.py +112 -0
- zepben/ewb/services/network/tracing/traversal/queue_condition.py +75 -0
- zepben/ewb/services/network/tracing/traversal/step_action.py +83 -0
- zepben/ewb/services/network/tracing/traversal/step_context.py +59 -0
- zepben/ewb/services/network/tracing/traversal/stop_condition.py +57 -0
- zepben/ewb/services/network/tracing/traversal/traversal.py +634 -0
- zepben/ewb/services/network/tracing/traversal/traversal_condition.py +22 -0
- zepben/ewb/services/network/tracing/traversal/weighted_priority_queue.py +85 -0
- zepben/ewb/services/network/tracing/util.py +93 -0
- zepben/ewb/services/network/translator/__init__.py +392 -0
- zepben/ewb/services/network/translator/network_cim2proto.py +1782 -0
- zepben/ewb/services/network/translator/network_enum_mappers.py +78 -0
- zepben/ewb/services/network/translator/network_proto2cim.py +2147 -0
- zepben/ewb/services/services.py +48 -0
- zepben/ewb/streaming/__init__.py +4 -0
- zepben/ewb/streaming/data/__init__.py +4 -0
- zepben/ewb/streaming/data/current_state_event.py +314 -0
- zepben/ewb/streaming/data/current_state_event_batch.py +25 -0
- zepben/ewb/streaming/data/set_current_states_status.py +286 -0
- zepben/ewb/streaming/exceptions.py +14 -0
- zepben/ewb/streaming/get/__init__.py +4 -0
- zepben/ewb/streaming/get/consumer.py +209 -0
- zepben/ewb/streaming/get/customer_consumer.py +111 -0
- zepben/ewb/streaming/get/diagram_consumer.py +107 -0
- zepben/ewb/streaming/get/hierarchy/__init__.py +4 -0
- zepben/ewb/streaming/get/hierarchy/data.py +27 -0
- zepben/ewb/streaming/get/included_energized_containers.py +34 -0
- zepben/ewb/streaming/get/included_energizing_containers.py +34 -0
- zepben/ewb/streaming/get/network_consumer.py +870 -0
- zepben/ewb/streaming/get/query_network_state_client.py +64 -0
- zepben/ewb/streaming/get/query_network_state_service.py +94 -0
- zepben/ewb/streaming/grpc/__init__.py +4 -0
- zepben/ewb/streaming/grpc/auth_token_plugin.py +24 -0
- zepben/ewb/streaming/grpc/connect.py +209 -0
- zepben/ewb/streaming/grpc/grpc.py +107 -0
- zepben/ewb/streaming/grpc/grpc_channel_builder.py +185 -0
- zepben/ewb/streaming/mutations/__init__.py +4 -0
- zepben/ewb/streaming/mutations/update_network_state_client.py +80 -0
- zepben/ewb/streaming/mutations/update_network_state_service.py +61 -0
- zepben/ewb/testing/__init__.py +4 -0
- zepben/ewb/testing/test_network_builder.py +816 -0
- zepben/ewb/types.py +17 -0
- zepben/ewb/util.py +189 -0
- zepben_ewb-1.0.0b1.dist-info/METADATA +102 -0
- zepben_ewb-1.0.0b1.dist-info/RECORD +639 -0
- zepben_ewb-1.0.0b1.dist-info/WHEEL +5 -0
- zepben_ewb-1.0.0b1.dist-info/licenses/LICENSE +374 -0
- zepben_ewb-1.0.0b1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["CustomerDatabaseReader"]
|
|
7
|
+
|
|
8
|
+
from sqlite3 import Connection
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_database_reader import BaseDatabaseReader
|
|
11
|
+
from zepben.ewb.database.sqlite.common.metadata_collection_reader import MetadataCollectionReader
|
|
12
|
+
from zepben.ewb.database.sqlite.customer.customer_database_tables import CustomerDatabaseTables
|
|
13
|
+
from zepben.ewb.database.sqlite.customer.customer_service_reader import CustomerServiceReader
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.table_version import TableVersion
|
|
15
|
+
from zepben.ewb.services.customer.customers import CustomerService
|
|
16
|
+
|
|
17
|
+
class CustomerDatabaseReader(BaseDatabaseReader):
|
|
18
|
+
"""
|
|
19
|
+
A class for reading the `CustomerService` objects and `MetadataCollection` from our customer database.
|
|
20
|
+
|
|
21
|
+
:param connection: The connection to the database.
|
|
22
|
+
:param service: The `CustomerService` to populate with CIM objects from the database.
|
|
23
|
+
:param database_description: The description of the database for logging (e.g. filename).
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
connection: Connection,
|
|
29
|
+
service: CustomerService,
|
|
30
|
+
database_description: str,
|
|
31
|
+
tables: CustomerDatabaseTables = None,
|
|
32
|
+
metadata_reader: MetadataCollectionReader = None,
|
|
33
|
+
service_reader: CustomerServiceReader = None,
|
|
34
|
+
table_version: TableVersion = None
|
|
35
|
+
):
|
|
36
|
+
tables = tables if tables is not None else CustomerDatabaseTables()
|
|
37
|
+
super().__init__(
|
|
38
|
+
connection,
|
|
39
|
+
metadata_reader if metadata_reader is not None else MetadataCollectionReader(service, tables, connection),
|
|
40
|
+
service_reader if service_reader is not None else CustomerServiceReader(service, tables, connection),
|
|
41
|
+
service,
|
|
42
|
+
database_description,
|
|
43
|
+
table_version if table_version is not None else TableVersion()
|
|
44
|
+
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["CustomerDatabaseTables"]
|
|
7
|
+
|
|
8
|
+
from typing import Generator
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_database_tables import BaseDatabaseTables
|
|
11
|
+
from zepben.ewb.database.sqlite.tables.associations.table_customer_agreements_pricing_structures import *
|
|
12
|
+
from zepben.ewb.database.sqlite.tables.associations.table_pricing_structures_tariffs import *
|
|
13
|
+
from zepben.ewb.database.sqlite.tables.iec61968.common.table_organisations import *
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_customer_agreements import *
|
|
15
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_customers import *
|
|
16
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_pricing_structures import *
|
|
17
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_tariffs import *
|
|
18
|
+
from zepben.ewb.database.sqlite.tables.sqlite_table import *
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class CustomerDatabaseTables(BaseDatabaseTables):
|
|
22
|
+
"""
|
|
23
|
+
The collection of tables for our customer databases.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def _included_tables(self) -> Generator[SqliteTable, None, None]:
|
|
28
|
+
for table in super()._included_tables:
|
|
29
|
+
yield table
|
|
30
|
+
|
|
31
|
+
yield TableCustomerAgreements()
|
|
32
|
+
yield TableCustomerAgreementsPricingStructures()
|
|
33
|
+
yield TableCustomers()
|
|
34
|
+
yield TableOrganisations()
|
|
35
|
+
yield TablePricingStructures()
|
|
36
|
+
yield TablePricingStructuresTariffs()
|
|
37
|
+
yield TableTariffs()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["CustomerDatabaseWriter"]
|
|
7
|
+
|
|
8
|
+
import sqlite3
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from sqlite3 import Connection
|
|
11
|
+
from typing import Callable, Union
|
|
12
|
+
|
|
13
|
+
from zepben.ewb.database.sqlite.common.base_database_writer import BaseDatabaseWriter
|
|
14
|
+
from zepben.ewb.database.sqlite.common.metadata_collection_writer import MetadataCollectionWriter
|
|
15
|
+
from zepben.ewb.database.sqlite.customer.customer_database_tables import CustomerDatabaseTables
|
|
16
|
+
from zepben.ewb.database.sqlite.customer.customer_service_writer import CustomerServiceWriter
|
|
17
|
+
from zepben.ewb.services.customer.customers import CustomerService
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CustomerDatabaseWriter(BaseDatabaseWriter):
|
|
21
|
+
"""
|
|
22
|
+
A class for writing the `CustomerService` objects and `MetadataCollection` to our customer database.
|
|
23
|
+
|
|
24
|
+
:param database_file: the filename of the database to write.
|
|
25
|
+
:param service: The `CustomerService` to save to the database.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
database_file: Union[Path, str],
|
|
31
|
+
service: CustomerService,
|
|
32
|
+
database_tables: CustomerDatabaseTables = None,
|
|
33
|
+
create_metadata_writer: Callable[[], MetadataCollectionWriter] = None,
|
|
34
|
+
create_service_writer: Callable[[], CustomerServiceWriter] = None,
|
|
35
|
+
get_connection: Callable[[str], Connection] = None
|
|
36
|
+
):
|
|
37
|
+
database_tables = database_tables if database_tables is not None else CustomerDatabaseTables()
|
|
38
|
+
|
|
39
|
+
super().__init__(
|
|
40
|
+
database_file,
|
|
41
|
+
database_tables,
|
|
42
|
+
create_metadata_writer if create_metadata_writer is not None else lambda: MetadataCollectionWriter(service, database_tables),
|
|
43
|
+
create_service_writer if create_service_writer is not None else lambda: CustomerServiceWriter(service, database_tables),
|
|
44
|
+
get_connection if get_connection is not None else sqlite3.connect
|
|
45
|
+
)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["CustomerServiceReader"]
|
|
7
|
+
|
|
8
|
+
from sqlite3 import Connection
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_service_reader import BaseServiceReader
|
|
11
|
+
from zepben.ewb.database.sqlite.customer.customer_cim_reader import CustomerCimReader
|
|
12
|
+
from zepben.ewb.database.sqlite.customer.customer_database_tables import CustomerDatabaseTables
|
|
13
|
+
from zepben.ewb.database.sqlite.tables.associations.table_customer_agreements_pricing_structures import TableCustomerAgreementsPricingStructures
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.associations.table_pricing_structures_tariffs import TablePricingStructuresTariffs
|
|
15
|
+
from zepben.ewb.database.sqlite.tables.iec61968.common.table_organisations import TableOrganisations
|
|
16
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_customer_agreements import TableCustomerAgreements
|
|
17
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_customers import TableCustomers
|
|
18
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_pricing_structures import TablePricingStructures
|
|
19
|
+
from zepben.ewb.database.sqlite.tables.iec61968.customers.table_tariffs import TableTariffs
|
|
20
|
+
from zepben.ewb.services.customer.customers import CustomerService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CustomerServiceReader(BaseServiceReader):
|
|
24
|
+
"""
|
|
25
|
+
A class for reading a [CustomerService] from the database.
|
|
26
|
+
|
|
27
|
+
@param service The [CustomerService] to populate from the database.
|
|
28
|
+
@param database_tables The tables available in the database.
|
|
29
|
+
@param connection A connection to the database.
|
|
30
|
+
|
|
31
|
+
@property reader The [CustomerCimReader] used to load the objects from the database.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
service: CustomerService,
|
|
37
|
+
database_tables: CustomerDatabaseTables,
|
|
38
|
+
connection: Connection,
|
|
39
|
+
reader: CustomerCimReader = None
|
|
40
|
+
):
|
|
41
|
+
reader = reader if reader is not None else CustomerCimReader(service)
|
|
42
|
+
super().__init__(database_tables, connection, reader)
|
|
43
|
+
|
|
44
|
+
# This is not strictly necessary, it is just to update the type of the reader. It could be done with a generic
|
|
45
|
+
# on the base class which looks like it works, but that actually silently breaks code insight and completion
|
|
46
|
+
self._reader = reader
|
|
47
|
+
|
|
48
|
+
def _do_load(self) -> bool:
|
|
49
|
+
return all([
|
|
50
|
+
self._load_each(TableOrganisations, self._reader.load_organisations),
|
|
51
|
+
self._load_each(TableCustomers, self._reader.load_customers),
|
|
52
|
+
self._load_each(TableCustomerAgreements, self._reader.load_customer_agreements),
|
|
53
|
+
self._load_each(TablePricingStructures, self._reader.load_pricing_structures),
|
|
54
|
+
self._load_each(TableTariffs, self._reader.load_tariffs),
|
|
55
|
+
self._load_each(TableCustomerAgreementsPricingStructures, self._reader.load_customer_agreements_pricing_structures),
|
|
56
|
+
self._load_each(TablePricingStructuresTariffs, self._reader.load_pricing_structures_tariffs)
|
|
57
|
+
])
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["CustomerServiceWriter"]
|
|
7
|
+
|
|
8
|
+
from zepben.ewb.database.sqlite.common.base_service_writer import BaseServiceWriter
|
|
9
|
+
from zepben.ewb.database.sqlite.customer.customer_cim_writer import CustomerCimWriter
|
|
10
|
+
from zepben.ewb.database.sqlite.customer.customer_database_tables import CustomerDatabaseTables
|
|
11
|
+
from zepben.ewb.model.cim.iec61968.common.organisation import Organisation
|
|
12
|
+
from zepben.ewb.model.cim.iec61968.customers.customer import Customer
|
|
13
|
+
from zepben.ewb.model.cim.iec61968.customers.customer_agreement import CustomerAgreement
|
|
14
|
+
from zepben.ewb.model.cim.iec61968.customers.pricing_structure import PricingStructure
|
|
15
|
+
from zepben.ewb.model.cim.iec61968.customers.tariff import Tariff
|
|
16
|
+
from zepben.ewb.services.customer.customers import CustomerService
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class CustomerServiceWriter(BaseServiceWriter):
|
|
20
|
+
"""
|
|
21
|
+
A class for writing a `CustomerService` into the database.
|
|
22
|
+
|
|
23
|
+
:param service: The `CustomerService` to save to the database.
|
|
24
|
+
:param database_tables: The `CustomerDatabaseTables` to add to the database.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
service: CustomerService,
|
|
30
|
+
database_tables: CustomerDatabaseTables,
|
|
31
|
+
writer: CustomerCimWriter = None
|
|
32
|
+
):
|
|
33
|
+
writer = writer if writer is not None else CustomerCimWriter(database_tables)
|
|
34
|
+
super().__init__(service, writer)
|
|
35
|
+
|
|
36
|
+
# This is not strictly necessary, it is just to update the type of the writer. It could be done with a generic
|
|
37
|
+
# on the base class which looks like it works, but that actually silently breaks code insight and completion
|
|
38
|
+
self._writer = writer
|
|
39
|
+
|
|
40
|
+
def _do_save(self) -> bool:
|
|
41
|
+
return all([
|
|
42
|
+
self._save_each_object(Organisation, self._writer.save_organisation),
|
|
43
|
+
self._save_each_object(Customer, self._writer.save_customer),
|
|
44
|
+
self._save_each_object(CustomerAgreement, self._writer.save_customer_agreement),
|
|
45
|
+
self._save_each_object(PricingStructure, self._writer.save_pricing_structure),
|
|
46
|
+
self._save_each_object(Tariff, self._writer.save_tariff)
|
|
47
|
+
])
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramCimReader"]
|
|
7
|
+
|
|
8
|
+
from typing import Callable
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_cim_reader import BaseCimReader
|
|
11
|
+
from zepben.ewb.database.sqlite.extensions.result_set import ResultSet
|
|
12
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_object_points import TableDiagramObjectPoints
|
|
13
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_objects import TableDiagramObjects
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagrams import TableDiagrams
|
|
15
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram import Diagram
|
|
16
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object import DiagramObject
|
|
17
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object_point import DiagramObjectPoint
|
|
18
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_style import DiagramStyle
|
|
19
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.orientation_kind import OrientationKind
|
|
20
|
+
from zepben.ewb.services.diagram.diagrams import DiagramService
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DiagramCimReader(BaseCimReader):
|
|
24
|
+
"""
|
|
25
|
+
A class for reading the `DiagramService` tables from the database.
|
|
26
|
+
|
|
27
|
+
:param service: The `DiagramService` to populate from the database.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, service: DiagramService):
|
|
31
|
+
super().__init__(service)
|
|
32
|
+
|
|
33
|
+
################################
|
|
34
|
+
# IEC61970 Base Diagram Layout #
|
|
35
|
+
################################
|
|
36
|
+
|
|
37
|
+
def load_diagrams(self, table: TableDiagrams, result_set: ResultSet, set_identifier: Callable[[str], str]) -> bool:
|
|
38
|
+
"""
|
|
39
|
+
Create a `Diagram` and populate its fields from `TableDiagrams`.
|
|
40
|
+
|
|
41
|
+
:param table: The database table to read the `Diagram` fields from.
|
|
42
|
+
:param result_set: The record in the database table containing the fields for this `Diagram`.
|
|
43
|
+
:param set_identifier: A callback to register the mRID of this `Diagram` for logging purposes.
|
|
44
|
+
|
|
45
|
+
:return: True if the `Diagram` was successfully read from the database and added to the service.
|
|
46
|
+
:raises SqlException: For any errors encountered reading from the database.
|
|
47
|
+
"""
|
|
48
|
+
diagram = Diagram(mrid=set_identifier(result_set.get_string(table.mrid.query_index)))
|
|
49
|
+
|
|
50
|
+
diagram.diagram_style = DiagramStyle[result_set.get_string(table.diagram_style.query_index)]
|
|
51
|
+
diagram.orientation_kind = OrientationKind[result_set.get_string(table.orientation_kind.query_index)]
|
|
52
|
+
|
|
53
|
+
return self._load_identified_object(diagram, table, result_set) and self._add_or_throw(diagram)
|
|
54
|
+
|
|
55
|
+
def load_diagram_objects(self, table: TableDiagramObjects, result_set: ResultSet, set_identifier: Callable[[str], str]) -> bool:
|
|
56
|
+
"""
|
|
57
|
+
Create a `DiagramObject` and populate its fields from `TableDiagramObjects`.
|
|
58
|
+
|
|
59
|
+
:param table: The database table to read the `DiagramObject` fields from.
|
|
60
|
+
:param result_set: The record in the database table containing the fields for this `DiagramObject`.
|
|
61
|
+
:param set_identifier: A callback to register the mRID of this `DiagramObject` for logging purposes.
|
|
62
|
+
|
|
63
|
+
:return: True if the `DiagramObject` was successfully read from the database and added to the service.
|
|
64
|
+
:raises SqlException: For any errors encountered reading from the database.
|
|
65
|
+
"""
|
|
66
|
+
diagram_object = DiagramObject(mrid=set_identifier(result_set.get_string(table.mrid.query_index)))
|
|
67
|
+
|
|
68
|
+
diagram_object.diagram = self._ensure_get(
|
|
69
|
+
result_set.get_string(table.diagram_mrid.query_index, on_none=None),
|
|
70
|
+
Diagram
|
|
71
|
+
)
|
|
72
|
+
if diagram_object.diagram is not None:
|
|
73
|
+
diagram_object.diagram.add_diagram_object(diagram_object)
|
|
74
|
+
|
|
75
|
+
diagram_object.identified_object_mrid = result_set.get_string(table.identified_object_mrid.query_index, on_none=None)
|
|
76
|
+
diagram_object.style = result_set.get_string(table.style.query_index, on_none=None)
|
|
77
|
+
diagram_object.rotation = result_set.get_float(table.rotation.query_index)
|
|
78
|
+
|
|
79
|
+
return self._load_identified_object(diagram_object, table, result_set) and self._add_or_throw(diagram_object)
|
|
80
|
+
|
|
81
|
+
def load_diagram_object_points(self, table: TableDiagramObjectPoints, result_set: ResultSet, set_identifier: Callable[[str], str]) -> bool:
|
|
82
|
+
"""
|
|
83
|
+
Create a `DiagramObjectPoint` and populate its fields from `TableDiagramObjectPoints`.
|
|
84
|
+
|
|
85
|
+
:param table: The database table to read the `DiagramObjectPoint` fields from.
|
|
86
|
+
:param result_set: The record in the database table containing the fields for this `DiagramObjectPoint`.
|
|
87
|
+
:param set_identifier: A callback to register the mRID of this `DiagramObjectPoint` for logging purposes.
|
|
88
|
+
|
|
89
|
+
:return: True if the `DiagramObjectPoint` was successfully read from the database and added to the service.
|
|
90
|
+
:raises SqlException: For any errors encountered reading from the database.
|
|
91
|
+
"""
|
|
92
|
+
diagram_object_mrid = set_identifier(result_set.get_string(table.diagram_object_mrid.query_index))
|
|
93
|
+
sequence_number = result_set.get_int(table.sequence_number.query_index)
|
|
94
|
+
|
|
95
|
+
set_identifier(f"{diagram_object_mrid}-point{sequence_number}")
|
|
96
|
+
|
|
97
|
+
self._service.get(diagram_object_mrid, DiagramObject).insert_point(
|
|
98
|
+
DiagramObjectPoint(
|
|
99
|
+
result_set.get_float(table.x_position.query_index),
|
|
100
|
+
result_set.get_float(table.y_position.query_index)
|
|
101
|
+
),
|
|
102
|
+
sequence_number
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
return True
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramCimWriter"]
|
|
7
|
+
|
|
8
|
+
from zepben.ewb.database.sqlite.common.base_cim_writer import BaseCimWriter
|
|
9
|
+
from zepben.ewb.database.sqlite.diagram.diagram_database_tables import DiagramDatabaseTables
|
|
10
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_object_points import TableDiagramObjectPoints
|
|
11
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_objects import TableDiagramObjects
|
|
12
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagrams import TableDiagrams
|
|
13
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram import Diagram
|
|
14
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object import DiagramObject
|
|
15
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object_point import DiagramObjectPoint
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class DiagramCimWriter(BaseCimWriter):
|
|
19
|
+
"""
|
|
20
|
+
A class for writing the `DiagramService` tables to the database.
|
|
21
|
+
|
|
22
|
+
:param database_tables: The tables available in the database.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self, database_tables: DiagramDatabaseTables):
|
|
26
|
+
super().__init__(database_tables)
|
|
27
|
+
|
|
28
|
+
################################
|
|
29
|
+
# IEC61970 Base Diagram Layout #
|
|
30
|
+
################################
|
|
31
|
+
|
|
32
|
+
def save_diagram(self, diagram: Diagram) -> bool:
|
|
33
|
+
"""
|
|
34
|
+
Save the `Diagram` fields to `TableDiagrams`.
|
|
35
|
+
|
|
36
|
+
:param diagram: The `Diagram` instance to write to the database.
|
|
37
|
+
|
|
38
|
+
:return: True if the `Diagram` was successfully written to the database, otherwise false.
|
|
39
|
+
:raises SqlException: For any errors encountered writing to the database.
|
|
40
|
+
"""
|
|
41
|
+
table = self._database_tables.get_table(TableDiagrams)
|
|
42
|
+
insert = self._database_tables.get_insert(TableDiagrams)
|
|
43
|
+
|
|
44
|
+
insert.add_value(table.diagram_style.query_index, diagram.diagram_style.name)
|
|
45
|
+
insert.add_value(table.orientation_kind.query_index, diagram.orientation_kind.name)
|
|
46
|
+
|
|
47
|
+
return self._save_identified_object(table, insert, diagram, "diagram")
|
|
48
|
+
|
|
49
|
+
def save_diagram_object(self, diagram_object: DiagramObject) -> bool:
|
|
50
|
+
"""
|
|
51
|
+
Save the `DiagramObject` fields to `TableDiagramObjects`.
|
|
52
|
+
|
|
53
|
+
:param diagram_object: The `DiagramObject` instance to write to the database.
|
|
54
|
+
|
|
55
|
+
:return: True if the `DiagramObject` was successfully written to the database, otherwise false.
|
|
56
|
+
:raises SqlException: For any errors encountered writing to the database.
|
|
57
|
+
"""
|
|
58
|
+
table = self._database_tables.get_table(TableDiagramObjects)
|
|
59
|
+
insert = self._database_tables.get_insert(TableDiagramObjects)
|
|
60
|
+
|
|
61
|
+
status = True
|
|
62
|
+
for sequence, point in enumerate(diagram_object.points):
|
|
63
|
+
status = all([status, self._save_diagram_object_point(diagram_object, point, sequence)])
|
|
64
|
+
|
|
65
|
+
insert.add_value(table.identified_object_mrid.query_index, diagram_object.identified_object_mrid)
|
|
66
|
+
insert.add_value(table.diagram_mrid.query_index, self._mrid_or_none(diagram_object.diagram))
|
|
67
|
+
insert.add_value(table.style.query_index, diagram_object.style)
|
|
68
|
+
insert.add_value(table.rotation.query_index, diagram_object.rotation)
|
|
69
|
+
|
|
70
|
+
return all([status, self._save_identified_object(table, insert, diagram_object, "diagram object")])
|
|
71
|
+
|
|
72
|
+
def _save_diagram_object_point(self, diagram_object: DiagramObject, diagram_object_point: DiagramObjectPoint, sequence_number: int) -> bool:
|
|
73
|
+
table = self._database_tables.get_table(TableDiagramObjectPoints)
|
|
74
|
+
insert = self._database_tables.get_insert(TableDiagramObjectPoints)
|
|
75
|
+
|
|
76
|
+
insert.add_value(table.diagram_object_mrid.query_index, diagram_object.mrid)
|
|
77
|
+
insert.add_value(table.sequence_number.query_index, sequence_number)
|
|
78
|
+
insert.add_value(table.x_position.query_index, diagram_object_point.x_position)
|
|
79
|
+
insert.add_value(table.y_position.query_index, diagram_object_point.y_position)
|
|
80
|
+
|
|
81
|
+
return self._try_execute_single_update(insert, "diagram object point")
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramDatabaseReader"]
|
|
7
|
+
|
|
8
|
+
from sqlite3 import Connection
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_database_reader import BaseDatabaseReader
|
|
11
|
+
from zepben.ewb.database.sqlite.common.metadata_collection_reader import MetadataCollectionReader
|
|
12
|
+
from zepben.ewb.database.sqlite.diagram.diagram_database_tables import DiagramDatabaseTables
|
|
13
|
+
from zepben.ewb.database.sqlite.diagram.diagram_service_reader import DiagramServiceReader
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.table_version import TableVersion
|
|
15
|
+
from zepben.ewb.services.diagram.diagrams import DiagramService
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class DiagramDatabaseReader(BaseDatabaseReader):
|
|
19
|
+
"""
|
|
20
|
+
A class for reading the `DiagramService` objects and `MetadataCollection` from our diagram database.
|
|
21
|
+
|
|
22
|
+
:param connection: The connection to the database.
|
|
23
|
+
:param service: The `DiagramService` to populate with CIM objects from the database.
|
|
24
|
+
:param database_description: The description of the database for logging (e.g. filename).
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
connection: Connection,
|
|
30
|
+
service: DiagramService,
|
|
31
|
+
database_description: str,
|
|
32
|
+
tables: DiagramDatabaseTables = None,
|
|
33
|
+
metadata_reader: MetadataCollectionReader = None,
|
|
34
|
+
service_reader: DiagramServiceReader = None,
|
|
35
|
+
table_version: TableVersion = None
|
|
36
|
+
):
|
|
37
|
+
tables = tables if tables is not None else DiagramDatabaseTables()
|
|
38
|
+
super().__init__(
|
|
39
|
+
connection,
|
|
40
|
+
metadata_reader if metadata_reader is not None else MetadataCollectionReader(service, tables, connection),
|
|
41
|
+
service_reader if service_reader is not None else DiagramServiceReader(service, tables, connection),
|
|
42
|
+
service,
|
|
43
|
+
database_description,
|
|
44
|
+
table_version if table_version is not None else TableVersion()
|
|
45
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramDatabaseTables"]
|
|
7
|
+
|
|
8
|
+
from typing import Generator
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_database_tables import BaseDatabaseTables
|
|
11
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_object_points import *
|
|
12
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_objects import *
|
|
13
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagrams import *
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.sqlite_table import *
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class DiagramDatabaseTables(BaseDatabaseTables):
|
|
18
|
+
"""
|
|
19
|
+
The collection of tables for our customer databases.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def _included_tables(self) -> Generator[SqliteTable, None, None]:
|
|
24
|
+
for table in super()._included_tables:
|
|
25
|
+
yield table
|
|
26
|
+
|
|
27
|
+
yield TableDiagramObjectPoints()
|
|
28
|
+
yield TableDiagramObjects()
|
|
29
|
+
yield TableDiagrams()
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramDatabaseWriter"]
|
|
7
|
+
|
|
8
|
+
import sqlite3
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from sqlite3 import Connection
|
|
11
|
+
from typing import Callable, Union
|
|
12
|
+
|
|
13
|
+
from zepben.ewb.database.sqlite.common.base_database_writer import BaseDatabaseWriter
|
|
14
|
+
from zepben.ewb.database.sqlite.common.metadata_collection_writer import MetadataCollectionWriter
|
|
15
|
+
from zepben.ewb.database.sqlite.diagram.diagram_database_tables import DiagramDatabaseTables
|
|
16
|
+
from zepben.ewb.database.sqlite.diagram.diagram_service_writer import DiagramServiceWriter
|
|
17
|
+
from zepben.ewb.services.diagram.diagrams import DiagramService
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DiagramDatabaseWriter(BaseDatabaseWriter):
|
|
21
|
+
"""
|
|
22
|
+
A class for writing the `DiagramService` objects and `MetadataCollection` to our diagram database.
|
|
23
|
+
|
|
24
|
+
:param database_file: the filename of the database to write.
|
|
25
|
+
:param service: The `DiagramService` to save to the database.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
database_file: Union[Path, str],
|
|
31
|
+
service: DiagramService,
|
|
32
|
+
database_tables: DiagramDatabaseTables = None,
|
|
33
|
+
create_metadata_writer: Callable[[], MetadataCollectionWriter] = None,
|
|
34
|
+
create_service_writer: Callable[[], DiagramServiceWriter] = None,
|
|
35
|
+
get_connection: Callable[[str], Connection] = None
|
|
36
|
+
):
|
|
37
|
+
database_tables = database_tables if database_tables is not None else DiagramDatabaseTables()
|
|
38
|
+
super().__init__(
|
|
39
|
+
database_file,
|
|
40
|
+
database_tables,
|
|
41
|
+
create_metadata_writer if create_metadata_writer is not None else lambda: MetadataCollectionWriter(service, database_tables),
|
|
42
|
+
create_service_writer if create_service_writer is not None else lambda: DiagramServiceWriter(service, database_tables),
|
|
43
|
+
get_connection if get_connection is not None else sqlite3.connect
|
|
44
|
+
)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramServiceReader"]
|
|
7
|
+
|
|
8
|
+
from sqlite3 import Connection
|
|
9
|
+
|
|
10
|
+
from zepben.ewb.database.sqlite.common.base_service_reader import BaseServiceReader
|
|
11
|
+
from zepben.ewb.database.sqlite.diagram.diagram_cim_reader import DiagramCimReader
|
|
12
|
+
from zepben.ewb.database.sqlite.diagram.diagram_database_tables import DiagramDatabaseTables
|
|
13
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_object_points import TableDiagramObjectPoints
|
|
14
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagram_objects import TableDiagramObjects
|
|
15
|
+
from zepben.ewb.database.sqlite.tables.iec61970.base.diagramlayout.table_diagrams import TableDiagrams
|
|
16
|
+
from zepben.ewb.services.diagram.diagrams import DiagramService
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class DiagramServiceReader(BaseServiceReader):
|
|
20
|
+
"""
|
|
21
|
+
A class for reading a `DiagramService` from the database.
|
|
22
|
+
|
|
23
|
+
:param service: The `DiagramService` to populate from the database.
|
|
24
|
+
:param database_tables: The tables available in the database.
|
|
25
|
+
:param connection: A connection to the database.
|
|
26
|
+
|
|
27
|
+
:param reader: The `DiagramCimReader` used to load the objects from the database.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
service: DiagramService,
|
|
33
|
+
database_tables: DiagramDatabaseTables,
|
|
34
|
+
connection: Connection,
|
|
35
|
+
reader: DiagramCimReader = None
|
|
36
|
+
):
|
|
37
|
+
reader = reader if reader is not None else DiagramCimReader(service)
|
|
38
|
+
super().__init__(database_tables, connection, reader)
|
|
39
|
+
|
|
40
|
+
# This is not strictly necessary, it is just to update the type of the reader. It could be done with a generic
|
|
41
|
+
# on the base class which looks like it works, but that actually silently breaks code insight and completion
|
|
42
|
+
self._reader = reader
|
|
43
|
+
|
|
44
|
+
def _do_load(self) -> bool:
|
|
45
|
+
return all([
|
|
46
|
+
self._load_each(TableDiagrams, self._reader.load_diagrams),
|
|
47
|
+
self._load_each(TableDiagramObjects, self._reader.load_diagram_objects),
|
|
48
|
+
self._load_each(TableDiagramObjectPoints, self._reader.load_diagram_object_points)
|
|
49
|
+
])
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Copyright 2024 Zeppelin Bend Pty Ltd
|
|
2
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
|
|
6
|
+
__all__ = ["DiagramServiceWriter"]
|
|
7
|
+
|
|
8
|
+
from zepben.ewb.database.sqlite.common.base_service_writer import BaseServiceWriter
|
|
9
|
+
from zepben.ewb.database.sqlite.diagram.diagram_cim_writer import DiagramCimWriter
|
|
10
|
+
from zepben.ewb.database.sqlite.diagram.diagram_database_tables import DiagramDatabaseTables
|
|
11
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram import Diagram
|
|
12
|
+
from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object import DiagramObject
|
|
13
|
+
from zepben.ewb.services.diagram.diagrams import DiagramService
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DiagramServiceWriter(BaseServiceWriter):
|
|
17
|
+
"""
|
|
18
|
+
A class for writing a `DiagramService` into the database.
|
|
19
|
+
|
|
20
|
+
:param service: The `DiagramService` to save to the database.
|
|
21
|
+
:param database_tables: The `DiagramDatabaseTables` to add to the database.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
service: DiagramService,
|
|
27
|
+
database_tables: DiagramDatabaseTables,
|
|
28
|
+
writer: DiagramCimWriter = None
|
|
29
|
+
):
|
|
30
|
+
writer = writer if writer is not None else DiagramCimWriter(database_tables)
|
|
31
|
+
super().__init__(service, writer)
|
|
32
|
+
|
|
33
|
+
# This is not strictly necessary, it is just to update the type of the writer. It could be done with a generic
|
|
34
|
+
# on the base class which looks like it works, but that actually silently breaks code insight and completion
|
|
35
|
+
self._writer = writer
|
|
36
|
+
|
|
37
|
+
def _do_save(self) -> bool:
|
|
38
|
+
return all([
|
|
39
|
+
self._save_each_object(DiagramObject, self._writer.save_diagram_object),
|
|
40
|
+
self._save_each_object(Diagram, self._writer.save_diagram)
|
|
41
|
+
])
|