def test_export(session_with_pywr_network, root_user_id): pywr_network_id, pywr_json_filename = session_with_pywr_network # Fetch the network network = hydra_base.get_network(pywr_network_id, user_id=root_user_id, include_data='Y') # Fetch all the attributes attributes = hydra_base.get_attributes() # TODO not sure why this returns SQLAlchemy object? # TODO rename this to map/lookup attributes = {attr.id: JSONObject(attr) for attr in attributes} # We also need the template to get the node types template = JSONObject( hydra_base.get_template_by_name(pywr_template_name('Full'))) exporter = PywrHydraExporter(network, attributes, template) pywr_data_exported = exporter.get_pywr_data() # Check transformed data is about right with open(pywr_json_filename) as fh: pywr_data = json.load(fh) assert_identical_pywr_data(pywr_data, pywr_data_exported)
def test_add_network(pywr_json_filename, session_with_pywr_template, projectmaker, root_user_id): project = projectmaker.create() template = JSONObject( hydra_base.get_template_by_name(pywr_template_name('Full'))) importer = PywrHydraImporter(pywr_json_filename, template) # First the attributes must be added. attributes = [ JSONObject(a) for a in importer.add_attributes_request_data() ] # The response attributes have ids now. response_attributes = hydra_base.add_attributes(attributes) # Convert to a simple dict for local processing. # TODO change this variable name to map or lookup attribute_ids = {a.name: a.id for a in response_attributes} # Now we try to create the network network = importer.add_network_request_data(attribute_ids, project.id) # Check transformed data is about right with open(pywr_json_filename) as fh: pywr_data = json.load(fh) assert_hydra_pywr(network, pywr_data) hydra_network = hydra_base.add_network(JSONObject(network), user_id=root_user_id)
def session_with_pywr_network(pywr_json_filename, session_with_pywr_template, projectmaker, root_user_id): project = projectmaker.create() template = JSONObject( hydra_base.get_template_by_name(pywr_template_name('Full'))) importer = PywrHydraImporter(pywr_json_filename, template) # First the attributes must be added. attributes = [ JSONObject(a) for a in importer.add_attributes_request_data() ] # The response attributes have ids now. response_attributes = hydra_base.add_attributes(attributes) # Convert to a simple dict for local processing. attribute_ids = {a.name: a.id for a in response_attributes} # Now we try to create the network network = importer.add_network_request_data(attribute_ids, project.id) hydra_network = hydra_base.add_network(JSONObject(network), user_id=root_user_id) return hydra_network.id, pywr_json_filename
def test_add_network(pywr_json_filename, session_with_pywr_template, projectmaker, root_user_id): project = projectmaker.create() template = JSONObject(hydra_base.get_template_by_name(pywr_template_name('Full'))) importer = PywrHydraImporter(pywr_json_filename, template) # First the attributes must be added. attributes = [JSONObject(a) for a in importer.add_attributes_request_data()] # The response attributes have ids now. response_attributes = hydra_base.add_attributes(attributes) # Convert to a simple dict for local processing. # TODO change this variable name to map or lookup attribute_ids = {a.name: a.id for a in response_attributes} # Now we try to create the network network = importer.add_network_request_data(attribute_ids, project.id) # Check transformed data is about right with open(pywr_json_filename) as fh: pywr_data = json.load(fh) assert_hydra_pywr(network, pywr_data) hydra_network = hydra_base.add_network(JSONObject(network), user_id=root_user_id)
def test_create_empty_network(db_with_template, projectmaker, logged_in_client): client = logged_in_client project = projectmaker.create() template = client.get_template_by_name(pywr_template_name('Full')) # Find the network type in this template. # There is only one of these in the template. for template_type in template['templatetypes']: if template_type['resource_type'] == 'NETWORK': template_type_id = template_type['id'] break else: raise ValueError('No network type found in this template!') # This is a minimal network with no data and a scenario network_data = { 'name': 'empty', 'description': 'empty network', 'project_id': project.id, 'types': [{ 'id': template_type_id }], 'scenarios': [{ "name": "Baseline", "description": "", "resourcescenarios": [] }] } hydra_network = client.add_network(network_data) scenario_id = hydra_network['scenarios'][0]['id'] exporter = PywrHydraExporter.from_network_id(client, hydra_network.id, scenario_id) pywr_data_exported = exporter.get_pywr_data() assert 'timestepper' in pywr_data_exported for key in PYWR_TIMESTEPPER_ATTRIBUTES: assert key in pywr_data_exported['timestepper'] assert 'metadata' in pywr_data_exported assert 'title' in pywr_data_exported['metadata'] assert 'description' in pywr_data_exported['metadata'] assert 'nodes' in pywr_data_exported assert 'edges' in pywr_data_exported
def test_add_network(pywr_json_filename, db_with_template, projectmaker, logged_in_client): client = logged_in_client project = projectmaker.create() config = load_template_config('full') template = client.get_template_by_name(pywr_template_name(config['name'])) importer = PywrHydraImporter.from_client(client, pywr_json_filename, template['id']) importer.import_data(client, project.id)
def test_create_empty_network(db_with_template, projectmaker, logged_in_client): client = logged_in_client project = projectmaker.create() template = client.get_template_by_name(pywr_template_name('Full')) # Find the network type in this template. # There is only one of these in the template. for template_type in template['templatetypes']: if template_type['resource_type'] == 'NETWORK': template_type_id = template_type['id'] break else: raise ValueError('No network type found in this template!') # This is a minimal network with no data and a scenario network_data = { 'name': 'empty', 'description': 'empty network', 'project_id': project.id, 'types': [{'id': template_type_id}], 'scenarios': [{ "name": "Baseline", "description": "", "resourcescenarios": [] }] } hydra_network = client.add_network(network_data) scenario_id = hydra_network['scenarios'][0]['id'] exporter = PywrHydraExporter.from_network_id(client, hydra_network.id, scenario_id) pywr_data_exported = exporter.get_pywr_data() assert 'timestepper' in pywr_data_exported for key in PYWR_TIMESTEPPER_ATTRIBUTES: assert key in pywr_data_exported['timestepper'] assert 'metadata' in pywr_data_exported assert 'title' in pywr_data_exported['metadata'] assert 'description' in pywr_data_exported['metadata'] assert 'nodes' in pywr_data_exported assert 'edges' in pywr_data_exported
def session_with_pywr_network(pywr_json_filename, session_with_pywr_template, projectmaker, root_user_id): project = projectmaker.create() template = JSONObject(hydra_base.get_template_by_name(pywr_template_name('Full'))) importer = PywrHydraImporter(pywr_json_filename, template) # First the attributes must be added. attributes = [JSONObject(a) for a in importer.add_attributes_request_data()] # The response attributes have ids now. response_attributes = hydra_base.add_attributes(attributes) # Convert to a simple dict for local processing. attribute_ids = {a.name: a.id for a in response_attributes} # Now we try to create the network network = importer.add_network_request_data(attribute_ids, project.id) hydra_network = hydra_base.add_network(JSONObject(network), user_id=root_user_id) return hydra_network.id, pywr_json_filename
def pywr_with_demand_pattern(model_directory, db_with_template, projectmaker, logged_in_client): client = logged_in_client # Create the basic pywr model project = projectmaker.create() pywr_json_filename = os.path.join(model_directory, 'simple1.json') template = client.get_template_by_name(pywr_template_name('Full')) importer = PywrHydraImporter.from_client(client, pywr_json_filename, template['id']) network_id, scenario_id = importer.import_data(client, project.id) # Create the demand pattern pattern_attr = client.add_attribute({'name': 'demand_pattern'}) ra = client.add_resource_attribute('NETWORK', network_id, pattern_attr['id'], 'N') with open(os.path.join(model_directory, 'simple_demand_pattern.json')) as fh: pattern_str = fh.read() pattern_data = Dataset({ 'name': 'demand_pattern', 'value': pattern_str, "hidden": "N", "type": 'PYWR_PARAMETER_PATTERN', }) client.add_data_to_attribute(scenario_id, ra['id'], pattern_data) # Assign the pattern to one of the nodes node = client.get_node_by_name(network_id, 'demand1') pattern_ref_attr = client.add_attribute({'name': 'demand'}) ra = client.add_resource_attribute('NODE', node['id'], pattern_ref_attr['id'], 'N') pattern_ref_data = Dataset({ 'name': 'demand', 'value': 'demand_pattern', 'hidden': 'N', 'type': 'PYWR_PARAMETER_PATTERN_REF' }) client.add_data_to_attribute(scenario_id, ra['id'], pattern_ref_data) # population_attr = client.add_attribute({'name': 'population'}) ra = client.add_resource_attribute('NODE', node['id'], population_attr['id'], 'N') population_data = Dataset({ 'name': 'population', 'value': 3.14, 'hidden': 'N', 'type': 'SCALAR' }) client.add_data_to_attribute(scenario_id, ra['id'], population_data) return network_id, scenario_id