def update(self, instance: Insight, validated_data: Dict, **kwargs) -> Insight: # Remove is_sample if it's set as user has altered the sample configuration validated_data["is_sample"] = False if validated_data.keys() & Insight.MATERIAL_INSIGHT_FIELDS: instance.last_modified_at = now() instance.last_modified_by = self.context["request"].user return super().update(instance, validated_data)
def get_last_refresh(self, dashboard_item: Insight): result = self.get_result(dashboard_item) if result is not None: return dashboard_item.last_refresh dashboard_item.last_refresh = None dashboard_item.save() return None
def update_dashboard_item_cache( dashboard_item: Insight, dashboard: Optional[Dashboard]) -> List[Dict[str, Any]]: cache_key, cache_type, payload = dashboard_item_update_task_params( dashboard_item, dashboard) result = update_cache_item(cache_key, cache_type, payload) dashboard_item.refresh_from_db() return result
def get_last_refresh(self, insight: Insight): if self.context["request"].GET.get("refresh"): return now() result = self.get_result(insight) if result is not None: return insight.last_refresh insight.last_refresh = None insight.save() return None
def get_last_refresh(self, insight: Insight): if should_refresh(self.context["request"]): return now() result = self.get_result(insight) if result is not None: return insight.last_refresh if insight.last_refresh is not None: # Update last_refresh without updating "updated_at" (insight edit date) insight.last_refresh = None insight.save() return None
def has_object_permission(self, request: Request, view, insight: Insight) -> bool: if request.method in SAFE_METHODS: return True return insight.get_effective_privilege_level( cast(User, request.user).id) == Dashboard.PrivilegeLevel.CAN_EDIT
def dashboard_item_update_task_params( item: Insight, dashboard: Optional[Dashboard] = None) -> Tuple[str, CacheType, Dict]: filter = get_filter(data=item.dashboard_filters(dashboard), team=item.team) cache_key = generate_cache_key("{}_{}".format(filter.toJSON(), item.team_id)) cache_type = get_cache_type(filter) payload = {"filter": filter.toJSON(), "team_id": item.team_id} return cache_key, cache_type, payload
def to_representation(self, instance: Insight): representation = super().to_representation(instance) representation["filters"] = instance.dashboard_filters( dashboard=self.context.get("dashboard")) return representation
def get_effective_privilege_level( self, insight: Insight) -> Dashboard.PrivilegeLevel: return insight.get_effective_privilege_level( self.context["request"].user.id)