def get(self, request, project): """ List a project's filters Retrieve a list of filters for a given project. {method} {path} """ results = [] for flt in message_filters.get_all_filter_specs(): results.append({ "id": flt.id, # 'active' will be either a boolean or list for the legacy browser filters # all other filters will be boolean "active": message_filters.get_filter_state(flt.id, project), "description": flt.description, "name": flt.name, "hello": flt.id + " - " + flt.name, }) results.sort(key=lambda x: x["name"]) return Response(results)
def get(self, request, project): """ List a project's filters Retrieve a list of filters for a given project. {method} {path} """ results = [] for flt in message_filters.get_all_filters(): filter_spec = flt.spec results.append({ 'id': filter_spec.id, # 'active' will be either a boolean or list for the legacy browser filters # all other filters will be boolean 'active': message_filters.get_filter_state(filter_spec.id, project), 'description': filter_spec.description, 'name': filter_spec.name, 'hello': filter_spec.id + " - " + filter_spec.name }) results.sort(key=lambda x: x['name']) return Response(results)
def put(self, request, project, filter_id): """ Update a filter Update a project's filter. {method} {path} """ current_filter = None for flt in message_filters.get_all_filters(): if flt.spec.id == filter_id: current_filter = flt break else: raise ResourceDoesNotExist # could not find filter with the requested id serializer = current_filter.spec.serializer_cls(data=request.DATA, partial=True) if not serializer.is_valid(): return Response(serializer.errors, status=400) current_state = message_filters.get_filter_state(filter_id, project) new_state = message_filters.set_filter_state(filter_id, project, serializer.object) audit_log_state = AuditLogEntryEvent.PROJECT_ENABLE if filter_id == 'legacy-browsers': if isinstance(current_state, bool) or new_state == 0 or isinstance( new_state, six.binary_type): returned_state = new_state if isinstance(new_state, six.binary_type): audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE returned_state = current_state elif current_state - new_state: returned_state = current_state - new_state audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE elif new_state - current_state: returned_state = new_state - current_state elif new_state == current_state: returned_state = new_state if filter_id in ('browser-extensions', 'localhost', 'web-crawlers'): returned_state = filter_id removed = current_state - new_state if removed == 1: audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE self.create_audit_entry( request=request, organization=project.organization, target_object=project.id, event=audit_log_state, data={"state": returned_state}, ) return Response(status=201)