コード例 #1
0
def on_feature_post_save_tilestache(sender, **kwargs):
    """
        Update/Create the tilestache data for the layers of the given feature
    """

    features = kwargs['instance']
    config_entity = features[0].config_entity.subclassed
    db_entity_interest = config_entity.computed_db_entity_interests(db_entity__key=features[0].db_entity_key)[0]
    db_entity = db_entity_interest.db_entity
    logger.info("Handler: on_feature_post_save_tilestache for config_entity %s and db_entity %s" %\
                    (config_entity.name, db_entity.key))

    ids = map(lambda obj: obj.id, features)
    feature_class = config_entity.db_entity_feature_class(db_entity.key)
    queryset = feature_class.objects.filter(id__in=ids)
    # Find all scenarios under the config_entity, whatever it's scope
    # We need to refresh all LayerLibraries of those scenarios
    scenarios = config_entity.descendants_by_type(Scenario) if\
        not isinstance(config_entity, Scenario)\
        else [config_entity]
    if not scenarios:
        raise Exception("No scenarios found to invalidate for config_entity %s" % config_entity.full_name)

    logger.info("Handler: on_feature_post_save_tilestache. Invalidate layer of scenarios %s" % \
                (map(lambda scenario: scenario.id, scenarios)))
    layer_libraries = LayerLibrary.objects.filter(
        config_entity__id__in=map(lambda scenario: scenario.id, scenarios),
        key='layer_library__default'
    )
    for layer in resolve_layers(layer_libraries, db_entity_keys=[db_entity.key]):
        logger.info("Handler: on_feature_post_save_tilestache. Invalidate layer %s, queryset: %s" % (layer.medium_subclassed.style_attributes.all(), queryset))
        for attr in layer.medium_subclassed.style_attributes.all():
            #
            layer_key = "layer:{layer},attr_id:{attribute},type:raster".format(layer=layer.id, attribute=attr.id)
            invalidate_feature_cache(layer_key, queryset)
コード例 #2
0
    def update_dependent_scenarios(self, base_features, scenario):
        if isinstance(scenario, BaseScenario):

            future_scenarios = FutureScenario.objects.filter(
                parent_config_entity=scenario.parent_config_entity_subclassed)
            logger.info("Updating dependent scenarios {0} of {1}".format(
                future_scenarios, scenario))
            for future_scenario in future_scenarios:

                agriculture_feature_class = future_scenario.db_entity_feature_class(
                    DbEntityKey.FUTURE_AGRICULTURE)
                future_features = agriculture_feature_class.objects.filter(
                    id__in=base_features, updater__isnull=True)
                logger.info("Updating {0} features of {1}".format(
                    future_features.count(), future_scenario))

                updated_built_forms = []
                for feature in future_features.iterator():

                    base_feature = base_features.get(id=feature.id)
                    if base_feature.built_form_id != feature.built_form_id:
                        updated_built_forms.append(feature)
                    base_attributes = dict(
                        gross_net_pct=base_feature.gross_net_pct,
                        built_form_key=base_feature.built_form_key,
                        built_form_id=base_feature.built_form_id,
                        density_pct=base_feature.density_pct,
                        acres_gross=base_feature.acres_gross,
                        crop_yield=base_feature.crop_yield,
                        market_value=base_feature.market_value,
                        production_cost=base_feature.production_cost,
                        water_consumption=base_feature.water_consumption,
                        labor_force=base_feature.labor_force,
                        truck_trips=base_feature.truck_trips,
                    )

                    for attr, value in base_attributes.iteritems():
                        setattr(feature, attr, value)
                    feature.save(update_fields=self.ANALYSIS_FIELDS)

                layer = Layer.objects.filter(
                    presentation__config_entity=agriculture_feature_class.
                    config_entity,
                    db_entity_interest__db_entity__key=agriculture_feature_class
                    .db_entity_key)[0]

                if updated_built_forms:
                    for key in layer.keys:
                        # clear tilestache cache for updated dependencies
                        invalidate_feature_cache(key, updated_built_forms)
コード例 #3
0
    def update_dependent_scenarios(self, base_features, scenario):
        if isinstance(scenario, BaseScenario):

            future_scenarios = FutureScenario.objects.filter(parent_config_entity=scenario.parent_config_entity_subclassed)
            logger.info("Updating dependent scenarios {0} of {1}".format(future_scenarios, scenario))
            for future_scenario in future_scenarios:

                agriculture_feature_class = future_scenario.db_entity_feature_class(DbEntityKey.FUTURE_AGRICULTURE)
                future_features = agriculture_feature_class.objects.filter(
                    id__in=base_features,
                    updater__isnull=True
                )
                logger.info("Updating {0} features of {1}".format(future_features.count(), future_scenario))

                updated_built_forms = []
                for feature in future_features.iterator():

                    base_feature = base_features.get(id=feature.id)
                    if base_feature.built_form_id != feature.built_form_id:
                        updated_built_forms.append(feature)
                    base_attributes = dict(
                        gross_net_pct=base_feature.gross_net_pct,
                        built_form_key=base_feature.built_form_key,
                        built_form_id=base_feature.built_form_id,
                        density_pct=base_feature.density_pct,
                        acres_gross=base_feature.acres_gross,
                        crop_yield=base_feature.crop_yield,
                        market_value=base_feature.market_value,
                        production_cost=base_feature.production_cost,
                        water_consumption=base_feature.water_consumption,
                        labor_force=base_feature.labor_force,
                        truck_trips=base_feature.truck_trips,
                    )

                    for attr, value in base_attributes.iteritems():
                        setattr(feature, attr, value)
                    feature.save(update_fields=self.ANALYSIS_FIELDS)

                layer = Layer.objects.filter(presentation__config_entity=agriculture_feature_class.config_entity,
                                             db_entity_interest__db_entity__key=agriculture_feature_class.db_entity_key)[0]

                if updated_built_forms:
                    for key in layer.keys:
                        # clear tilestache cache for updated dependencies
                        invalidate_feature_cache(key, updated_built_forms)
コード例 #4
0
def on_feature_post_save_tilestache(sender, **kwargs):
    """
        Update/Create the tilestache data for the layers of the given feature
    """

    features = kwargs['instance']
    config_entity = features[0].config_entity.subclassed
    db_entity_interest = config_entity.computed_db_entity_interests(
        db_entity__key=features[0].db_entity_key)[0]
    db_entity = db_entity_interest.db_entity
    logger.info("Handler: on_feature_post_save_tilestache for config_entity %s and db_entity %s" %\
                    (config_entity.name, db_entity.key))

    ids = map(lambda obj: obj.id, features)
    feature_class = config_entity.db_entity_feature_class(db_entity.key)
    queryset = feature_class.objects.filter(id__in=ids)
    # Find all scenarios under the config_entity, whatever it's scope
    # We need to refresh all LayerLibraries of those scenarios
    scenarios = config_entity.descendants_by_type(Scenario) if\
        not isinstance(config_entity, Scenario)\
        else [config_entity]
    if not scenarios:
        raise Exception(
            "No scenarios found to invalidate for config_entity %s" %
            config_entity.full_name)

    logger.info("Handler: on_feature_post_save_tilestache. Invalidate layer of scenarios %s" % \
                (map(lambda scenario: scenario.id, scenarios)))
    layer_libraries = LayerLibrary.objects.filter(config_entity__id__in=map(
        lambda scenario: scenario.id, scenarios),
                                                  key='layer_library__default')
    for layer in resolve_layers(layer_libraries,
                                db_entity_keys=[db_entity.key]):
        logger.info(
            "Handler: on_feature_post_save_tilestache. Invalidate layer %s, queryset: %s"
            % (layer.medium_subclassed.style_attributes.all(), queryset))
        for attr in layer.medium_subclassed.style_attributes.all():
            #
            layer_key = "layer:{layer},attr_id:{attribute},type:raster".format(
                layer=layer.id, attribute=attr.id)
            invalidate_feature_cache(layer_key, queryset)