forked from s_ranjbar/city_retrofit
persistence changes
This commit is contained in:
parent
716465f1eb
commit
27ceed01fe
@ -4,10 +4,8 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project CoderPeter Yefi peteryefi@gmail.com
|
Project CoderPeter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
import json
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
|
|
||||||
from hub.persistence.repositories.application import Application
|
from hub.persistence.repositories.application import Application
|
||||||
from hub.persistence.repositories.city import City
|
from hub.persistence.repositories.city import City
|
||||||
from hub.persistence.repositories.city_object import CityObject
|
from hub.persistence.repositories.city_object import CityObject
|
||||||
@ -99,17 +97,18 @@ class DBControl:
|
|||||||
"""
|
"""
|
||||||
return self._city_object.get_by_name_or_alias_in_cities(name, cities)
|
return self._city_object.get_by_name_or_alias_in_cities(name, cities)
|
||||||
|
|
||||||
def buildings_info(self, request_values, city_id) -> [CityObject]:
|
def buildings_info(self, user_id, application_id, names_or_aliases) -> [CityObject]:
|
||||||
"""
|
"""
|
||||||
Retrieve the buildings info from the database
|
Retrieve the buildings info from the database
|
||||||
:param request_values: Building names
|
:param user_id: User ID
|
||||||
:param city_id: City ID
|
:param application_id: Application ID
|
||||||
|
:param names_or_aliases: A list of names or alias for the buildings
|
||||||
:return: [CityObject]
|
:return: [CityObject]
|
||||||
"""
|
"""
|
||||||
buildings = []
|
results = self._city_object.get_by_name_or_alias_for_user_app(user_id, application_id, names_or_aliases)
|
||||||
for name in request_values['names']:
|
if results is None:
|
||||||
buildings.append(self.building_info(name, city_id))
|
return []
|
||||||
return buildings
|
return results
|
||||||
|
|
||||||
def results(self, user_id, application_id, request_values, result_names=None) -> Dict:
|
def results(self, user_id, application_id, request_values, result_names=None) -> Dict:
|
||||||
"""
|
"""
|
||||||
|
@ -14,6 +14,7 @@ from sqlalchemy.orm import Session
|
|||||||
|
|
||||||
from hub.city_model_structure.building import Building
|
from hub.city_model_structure.building import Building
|
||||||
from hub.persistence.models import CityObject as Model
|
from hub.persistence.models import CityObject as Model
|
||||||
|
from hub.persistence.models import City as CityModel
|
||||||
from hub.persistence.repository import Repository
|
from hub.persistence.repository import Repository
|
||||||
|
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ class CityObject(Repository):
|
|||||||
with Session(self.engine) as session:
|
with Session(self.engine) as session:
|
||||||
session.query(Model).filter(Model.name == building.name, Model.city_id == city_id).update(
|
session.query(Model).filter(Model.name == building.name, Model.city_id == city_id).update(
|
||||||
{'name': building.name,
|
{'name': building.name,
|
||||||
'alias': building.alias,
|
'aliases': building.aliases,
|
||||||
'object_type': building.type,
|
'object_type': building.type,
|
||||||
'year_of_construction': building.year_of_construction,
|
'year_of_construction': building.year_of_construction,
|
||||||
'function': building.function,
|
'function': building.function,
|
||||||
@ -135,6 +136,26 @@ class CityObject(Repository):
|
|||||||
logging.error('Error while fetching city object by name and city, empty result %s', err)
|
logging.error('Error while fetching city object by name and city, empty result %s', err)
|
||||||
raise IndexError from err
|
raise IndexError from err
|
||||||
|
|
||||||
|
def get_by_name_or_alias_for_user_app(self, user_id, application_id, names) -> Union[Model, None]:
|
||||||
|
"""
|
||||||
|
Fetch city objects belonging to the user and application where the name or alias is in the names list
|
||||||
|
:param user_id: User ID
|
||||||
|
:param application_id: Application ID
|
||||||
|
:param names: a list of building aliases or names
|
||||||
|
:return [CityObject] or None
|
||||||
|
"""
|
||||||
|
with Session(self.engine) as session:
|
||||||
|
cities = session.execute(select(CityModel).where(
|
||||||
|
CityModel.user_id == user_id, CityModel.application_id == application_id
|
||||||
|
)).all()
|
||||||
|
ids = [c[0].id for c in cities]
|
||||||
|
buildings = session.execute(select(Model).where(
|
||||||
|
Model.city_id.in_(ids), Model.name.in_(names)
|
||||||
|
))
|
||||||
|
results = [r[0] for r in buildings]
|
||||||
|
print(ids, buildings)
|
||||||
|
return None
|
||||||
|
|
||||||
def get_by_name_or_alias_and_city(self, name, city_id) -> Union[Model, None]:
|
def get_by_name_or_alias_and_city(self, name, city_id) -> Union[Model, None]:
|
||||||
"""
|
"""
|
||||||
Fetch a city object based on name and city id
|
Fetch a city object based on name and city id
|
||||||
|
@ -6,7 +6,6 @@ Project Coder Peter Yefi peteryefi@gmail.com
|
|||||||
"""
|
"""
|
||||||
import distutils.spawn
|
import distutils.spawn
|
||||||
import glob
|
import glob
|
||||||
import json
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -286,6 +285,8 @@ TestDBFactory
|
|||||||
results, city_object_id=db_building_id)
|
results, city_object_id=db_building_id)
|
||||||
self.assertEqual(17, len(city_objects_id), 'wrong number of results')
|
self.assertEqual(17, len(city_objects_id), 'wrong number of results')
|
||||||
self.assertIsNotNone(city_objects_id[0], 'city_object_id is None')
|
self.assertIsNotNone(city_objects_id[0], 'city_object_id is None')
|
||||||
|
results = control.database.results(control.user_id, control.application_id, request_values)
|
||||||
|
|
||||||
for _id in city_objects_id:
|
for _id in city_objects_id:
|
||||||
control.database.delete_results_by_name('insel meb', city_object_id=_id)
|
control.database.delete_results_by_name('insel meb', city_object_id=_id)
|
||||||
control.database.delete_city(city_id)
|
control.database.delete_city(city_id)
|
||||||
|
@ -5,11 +5,8 @@ Copyright © 2022 Concordia CERC group
|
|||||||
Project Coder Peter Yefi peteryefi@gmail.com
|
Project Coder Peter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
import distutils.spawn
|
import distutils.spawn
|
||||||
import glob
|
|
||||||
import json
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
|
||||||
import unittest
|
import unittest
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
@ -18,19 +15,7 @@ import sqlalchemy.exc
|
|||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.exc import ProgrammingError
|
from sqlalchemy.exc import ProgrammingError
|
||||||
|
|
||||||
import hub.helpers.constants as cte
|
|
||||||
from hub.exports.energy_building_exports_factory import EnergyBuildingsExportsFactory
|
|
||||||
from hub.exports.exports_factory import ExportsFactory
|
|
||||||
from hub.helpers.data.montreal_function_to_hub_function import MontrealFunctionToHubFunction
|
|
||||||
from hub.imports.construction_factory import ConstructionFactory
|
|
||||||
from hub.imports.energy_systems_factory import EnergySystemsFactory
|
|
||||||
from hub.imports.geometry_factory import GeometryFactory
|
|
||||||
from hub.imports.results_factory import ResultFactory
|
|
||||||
from hub.imports.usage_factory import UsageFactory
|
|
||||||
from hub.imports.weather_factory import WeatherFactory
|
|
||||||
from hub.persistence.db_control import DBControl
|
from hub.persistence.db_control import DBControl
|
||||||
from hub.persistence.models import City, Application, CityObject, SimulationResults
|
|
||||||
from hub.persistence.models import User, UserRoles
|
|
||||||
from hub.persistence.repository import Repository
|
from hub.persistence.repository import Repository
|
||||||
|
|
||||||
|
|
||||||
@ -129,24 +114,12 @@ TestDBFactory
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@unittest.skipIf(control.skip_test, control.skip_reason)
|
@unittest.skipIf(control.skip_test, control.skip_reason)
|
||||||
def test_retrieve_results(self):
|
def test_buildings_info(self):
|
||||||
request_values = {
|
request_values = {
|
||||||
"scenarios": [
|
"buildings": [
|
||||||
{
|
"01002777", "01002773", "01036804"
|
||||||
"current status": ["01002777", "01002773", "01036804"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"skin retrofit": ["01002777", "01002773", "01036804"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"system retrofit and pv": ["01002777", "01002773", "01036804"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"skin and system retrofit with pv": ["01002777", "01002773", "01036804"]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
results = control.database.results(control.user_id, control.application_id, request_values)
|
results = control.database.buildings_info(control.user_id, control.application_id, request_values)
|
||||||
|
self.assertEqual(12, len(results), 'wrong number of results')
|
||||||
print(results)
|
print(results)
|
||||||
|
Loading…
Reference in New Issue
Block a user