Source code for stemp_abw.views.serial_views

import stemp_abw.models as models
from stemp_abw.results.serializers import ResultLayerDataSerializer
from django.views.generic import DetailView, View, ListView
from django.http import JsonResponse
from django.views.decorators.cache import never_cache
from django.utils.decorators import method_decorator
from djgeojson.views import GeoJSONLayerView, GeoJSONResponseMixin
from wam.settings import SESSION_DATA


#########################
### GeoJSONLayerViews ###
#########################
[docs]class RpAbwBoundData(GeoJSONLayerView): model = models.RpAbwBound properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegMunData(GeoJSONLayerView): model = models.RegMun properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegMunPopData(GeoJSONLayerView): model = models.RegMunPop properties = [ 'name', 'gen', 'pop', 'pop_region' ]
[docs]class RegMunPopDensityData(GeoJSONLayerView): model = models.RegMunPopDensity properties = [ 'name', 'gen', 'pop_density', 'pop_density_region' ]
[docs]class RegMunEnergyReElDemShareData(GeoJSONLayerView): model = models.RegMunEnergyReElDemShare properties = [ 'name', 'gen', 'energy_re_el_dem_share', 'energy_re_el_dem_share_region' ]
[docs]class RegMunGenEnergyReData(GeoJSONLayerView): model = models.RegMunGenEnergyRe properties = [ 'name', 'gen', 'gen_energy_re', 'gen_energy_re_region' ]
[docs]class RegMunGenEnergyRePerCapitaData(GeoJSONLayerView): model = models.RegMunGenEnergyRePerCapita properties = [ 'name', 'gen', 'gen_energy_re_per_capita', 'gen_energy_re_per_capita_region' ]
[docs]class RegMunGenEnergyReDensityData(GeoJSONLayerView): model = models.RegMunGenEnergyReDensity properties = [ 'name', 'gen', 'gen_energy_re_density', 'gen_energy_re_density_region' ]
[docs]class RegMunGenCapReData(GeoJSONLayerView): model = models.RegMunGenCapRe properties = [ 'name', 'gen', 'gen_cap_re', 'gen_cap_re_region' ]
[docs]class RegMunGenCapReDensityData(GeoJSONLayerView): model = models.RegMunGenCapReDensity properties = [ 'name', 'gen', 'gen_cap_re_density', 'gen_cap_re_density_region' ]
[docs]class RegMunGenCountWindDensityData(GeoJSONLayerView): model = models.RegMunGenCountWindDensity properties = [ 'name', 'gen', 'gen_count_wind_density', 'gen_count_wind_density_region' ]
[docs]class RegMunDemElEnergyData(GeoJSONLayerView): model = models.RegMunDemElEnergy properties = [ 'name', 'gen', 'dem_el_energy', 'dem_el_energy_region' ]
[docs]class RegMunDemElEnergyPerCapitaData(GeoJSONLayerView): model = models.RegMunDemElEnergyPerCapita properties = [ 'name', 'gen', 'dem_el_energy_per_capita', 'dem_el_energy_per_capita_region' ]
[docs]class RegMunDemThEnergyData(GeoJSONLayerView): model = models.RegMunDemThEnergy properties = [ 'name', 'gen', 'dem_th_energy', 'dem_th_energy_region' ]
[docs]class RegMunDemThEnergyPerCapitaData(GeoJSONLayerView): model = models.RegMunDemThEnergyPerCapita properties = [ 'name', 'gen', 'dem_th_energy_per_capita', 'dem_th_energy_per_capita_region' ]
[docs]class RegWaterProtAreaData(GeoJSONLayerView): model = models.RegWaterProtArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegBirdProtAreaData(GeoJSONLayerView): model = models.RegBirdProtArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegBirdProtAreaB200Data(GeoJSONLayerView): model = models.RegBirdProtAreaB200 properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegNatureProtAreaData(GeoJSONLayerView): model = models.RegNatureProtArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegLandscProtAreaPartsData(GeoJSONLayerView): model = models.RegLandscProtAreaParts properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegResidAreaData(GeoJSONLayerView): model = models.RegResidArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegResidAreaB500Data(GeoJSONLayerView): model = models.RegResidAreaB500 properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaFloodProtData(GeoJSONLayerView): model = models.RegPrioAreaFloodProt properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegSurfaceWaterData(GeoJSONLayerView): model = models.RegSurfaceWater properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaCultData(GeoJSONLayerView): model = models.RegPrioAreaCult properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegForestData(GeoJSONLayerView): model = models.RegForest properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegFFHProtAreaData(GeoJSONLayerView): model = models.RegFFHProtArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegResidAreaB1000Data(GeoJSONLayerView): model = models.RegResidAreaB1000 properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaWECData(GeoJSONLayerView): model = models.RegPrioAreaWEC properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class GenWECData(GeoJSONLayerView): model = models.GenWEC properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class GenPVGroundData(GeoJSONLayerView): model = models.GenPVGround properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegDeadZoneHardData(GeoJSONLayerView): model = models.RegDeadZoneHard properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegDeadZoneSoftData(GeoJSONLayerView): model = models.RegDeadZoneSoft properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegFFHProtAreaBData(GeoJSONLayerView): model = models.RegFFHProtAreaB properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegLandscProtAreaData(GeoJSONLayerView): model = models.RegLandscProtArea properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegNatureParkData(GeoJSONLayerView): model = models.RegNaturePark properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegBioReserveData(GeoJSONLayerView): model = models.RegBioReserve properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegRetentAreaEcosysData(GeoJSONLayerView): model = models.RegRetentAreaEcosys properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaNatureData(GeoJSONLayerView): model = models.RegPrioAreaNature properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegNatureMonumData(GeoJSONLayerView): model = models.RegNatureMonum properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaWaterData(GeoJSONLayerView): model = models.RegPrioAreaWater properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaAgriData(GeoJSONLayerView): model = models.RegPrioAreaAgri properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegRetentAreaAgriData(GeoJSONLayerView): model = models.RegRetentAreaAgri properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegPrioAreaResData(GeoJSONLayerView): model = models.RegPrioAreaRes properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegInfrasRailwayData(GeoJSONLayerView): model = models.RegInfrasRailway properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegInfrasRoadData(GeoJSONLayerView): model = models.RegInfrasRoad properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegInfrasHvgridData(GeoJSONLayerView): model = models.RegInfrasHvgrid properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
[docs]class RegInfrasAviationData(GeoJSONLayerView): model = models.RegInfrasAviation properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
############################### # GeoJSON serial detail views # ###############################
[docs]class GeoJSONSingleDatasetLayerView(GeoJSONResponseMixin, DetailView): """Serial view for single objects of djgeojson's GeoJSON response Modified version of GeoJSONResponseMixin - filter queryset before creating GeoJSON response. """
[docs] def render_to_response(self, context, **response_kwargs): self.queryset = self.model.objects.filter(id=context['object'].id) return super(GeoJSONSingleDatasetLayerView, self) \ .render_to_response(context, **response_kwargs)
[docs]class REPotentialAreasData(GeoJSONSingleDatasetLayerView): model = models.REPotentialAreas properties = ['name'] srid = 4326 geometry_field = 'geom' precision = 5
######################## # Results serial views # ########################
[docs]@method_decorator(never_cache, name='dispatch') class SimulationStatus(View): """Serial view to get simulation status Returns ------- :obj:`django.http.JsonResponse` GeoJSON response with simulation status, format: {'sim_status': <STATUS>} where <STATUS> is one of * 'init' (tool initialized, results contain those from SQ scenario) * 'up_to_date' (results are up-to-date) * 'outdated' (results are outdated) See Also -------- Status is taken from :obj:`stemp_abw.results.results.Results` """ model = None
[docs] @staticmethod def get(request): session = SESSION_DATA.get_session(request) results = session.simulation.results return JsonResponse({'sim_status': results.status}, safe=True)
[docs]@method_decorator(never_cache, name='dispatch') class ResultChartsData(View): model = None
[docs] @staticmethod def get(request): session = SESSION_DATA.get_session(request) results = session.simulation.results return JsonResponse(results.get_result_charts_data(), safe=True)
[docs]@method_decorator(never_cache, name='dispatch') class GeoJSONResultLayerData(ListView): """Serial view with custom data in djgeojson's GeoJSON response Modified version of GeoJSONResponseMixin - add custom data column before creating GeoJSON response. Municipalities (model RegMun) is used as base model. Different from static serial layer views (examples see above) which use a specific model each, this view uses the dummy model :class:`stemp_abw.models.ResultLayerModel` on initialization. The property "model" which is required by djgeojson is set dynamically using class method :meth:`stemp_abw.models.ResultLayerModel.name_init`. Attributes ---------- model_name : :obj:`str` Name string of model (used as property "name" in dummy model :class:`stemp_abw.models.ResultLayerModel)`, see model for detailed description. custom_property : :obj:`str` Property (column) to be added to model, must be a column in layer results DataFrame results_df. properties : :obj:`list` of :obj:`str` Properties for each feature to be contained in the GeoJSON. srid : :obj:`int` SRID of CRS geometry_field : :obj:`str` Geometry field of model to be used for the GeoJSON Notes ----- Attributes `model_name` and `custom_property` must be attributes of subclass. """ model_name = None result_property = None properties = ['name', 'gen'] geometry_field = 'geom' def __init__(self, *args, **kwargs): """Instantiate with custom `model_name` and `custom_property` """ self.model = models.ResultLayerModel.name_init( name=self.model_name) super(GeoJSONResultLayerData, self).__init__(*args, **kwargs)
[docs] def render_to_response(self, context, **response_kwargs): session = SESSION_DATA.get_session(self.request) results_df = session.simulation.results.layer_results options = dict(properties=self.properties, result_property=self.result_property, results_df=results_df, geometry_field=self.geometry_field) serializer = ResultLayerDataSerializer(options) queryset = self.get_queryset() return JsonResponse(serializer.serialize(queryset), safe=True, content_type='application/geo+json')
[docs]class RegMunEnergyReElDemShareResultData(GeoJSONResultLayerData): model_name = 'reg_mun_energy_re_el_dem_share_result' result_property = 'energy_re_el_dem_share_result'
[docs]class RegMunGenEnergyReResultData(GeoJSONResultLayerData): model_name = 'reg_mun_gen_energy_re_result' result_property = 'gen_energy_re_result'
[docs]class RegMunGenEnergyReDensityResultData(GeoJSONResultLayerData): model_name = 'reg_mun_gen_energy_re_density_result' result_property = 'gen_energy_re_density_result'
[docs]class RegMunGenCapReResultData(GeoJSONResultLayerData): model_name = 'reg_mun_gen_cap_re_result' result_property = 'gen_cap_re_result'
[docs]class RegMunGenCapReDensityResultData(GeoJSONResultLayerData): model_name = 'reg_mun_gen_cap_re_density_result' result_property = 'gen_cap_re_density_result'
[docs]class RegMunGenCountWindDensityResultData(GeoJSONResultLayerData): model_name = 'reg_mun_gen_count_wind_density_result' result_property = 'gen_count_wind_density_result'
[docs]class RegMunDemElEnergyResultData(GeoJSONResultLayerData): model_name = 'reg_mun_dem_el_energy_result' result_property = 'dem_el_energy_result'
[docs]class RegMunDemElEnergyPerCapitaResultData(GeoJSONResultLayerData): model_name = 'reg_mun_dem_el_energy_per_capita_result' result_property = 'dem_el_energy_per_capita_result'
################################ # Results serial views (DELTA) # ################################
[docs]class RegMunEnergyReElDemShareResultDeltaData(GeoJSONLayerView): model = models.RegMunEnergyReElDemShareDeltaResult properties = [ 'name', 'gen', 'energy_re_el_dem_share_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunGenEnergyReResultDeltaData(GeoJSONLayerView): model = models.RegMunGenEnergyReDeltaResult properties = [ 'name', 'gen', 'gen_energy_re_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunGenEnergyReDensityResultDeltaData(GeoJSONLayerView): model = models.RegMunGenEnergyReDensityDeltaResult properties = [ 'name', 'gen', 'gen_energy_re_density_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunGenCapReResultDeltaData(GeoJSONLayerView): model = models.RegMunGenCapReDeltaResult properties = [ 'name', 'gen', 'gen_cap_re_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunGenCapReDensityResultDeltaData(GeoJSONLayerView): model = models.RegMunGenCapReDensityDeltaResult properties = [ 'name', 'gen', 'gen_cap_re_density_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunGenCountWindDensityResultDeltaData(GeoJSONLayerView): model = models.RegMunGenCountWindDensityDeltaResult properties = [ 'name', 'gen', 'gen_count_wind_density_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunDemElEnergyResultDeltaData(GeoJSONLayerView): model = models.RegMunDemElEnergyDeltaResult properties = [ 'name', 'gen', 'dem_el_energy_result_delta' ] geometry_field = 'geom_centroid'
[docs]class RegMunDemElEnergyPerCapitaResultDeltaData(GeoJSONLayerView): model = models.RegMunDemElEnergyPerCapitaDeltaResult properties = [ 'name', 'gen', 'dem_el_energy_per_capita_result_delta' ] geometry_field = 'geom_centroid'