コード例 #1
0
 def filter_queryset(self, request, queryset, view):
     try:
         types = None
         for key, value in request.query_params.items():
             if key == 'type':
                 if ',' in value:
                     types = value.split(',')
                 else:
                     types = (value, )
         if types:
             types_map = {}
             for ct in ContentType.objects.filter(
                     Q(app_label='main')
                     | Q(app_label='auth', model='user')):
                 ct_model = ct.model_class()
                 if not ct_model:
                     continue
                 ct_type = get_type_for_model(ct_model)
                 types_map[ct_type] = ct.pk
             model = queryset.model
             model_type = get_type_for_model(model)
             if 'polymorphic_ctype' in get_all_field_names(model):
                 types_pks = set(
                     [v for k, v in types_map.items() if k in types])
                 queryset = queryset.filter(
                     polymorphic_ctype_id__in=types_pks)
             elif model_type in types:
                 queryset = queryset
             else:
                 queryset = queryset.none()
         return queryset
     except FieldError as e:
         # Return a 400 for invalid field names.
         raise ParseError(*e.args)
コード例 #2
0
    def start_task(self, task, dependent_tasks=[]):
        from cyborgbackup.main.tasks import handle_work_error, handle_work_success

        task_actual = {
            'type': get_type_for_model(type(task)),
            'id': task.id,
        }
        dependencies = [{'type': get_type_for_model(type(t)), 'id': t.id} for t in dependent_tasks]

        error_handler = handle_work_error.s(subtasks=[task_actual] + dependencies)
        success_handler = handle_work_success.s(task_actual=task_actual)

        task.status = 'waiting'
        (start_status, opts) = task.pre_start()
        if not start_status:
            task.status = 'failed'
            if task.job_explanation:
                task.job_explanation += ' '
            task.job_explanation += 'Task failed pre-start check.'
            task.save()
            # TODO: run error handler to fail sub-tasks and send notifications
        else:
            logger.info('Submitting %s to instance group cyborgbackup.', task.log_format)
            with disable_activity_stream():
                task.celery_task_id = str(uuid.uuid4())
                task.save()

            self.consume_capacity(task, 'cyborgbackup')

        def post_commit():
            task.websocket_emit_status(task.status)
            if task.status != 'failed':
                task.start_celery_task(opts,
                                       error_callback=error_handler,
                                       success_callback=success_handler,
                                       queue='cyborgbackup')

        connection.on_commit(post_commit)
コード例 #3
0
ファイル: serializers.py プロジェクト: skyle97/cyborgbackup
    def get_summary_fields(self, obj):
        # Return values for certain fields on related objects, to simplify
        # displaying lists of items without additional API requests.
        summary_fields = OrderedDict()
        for fk, related_fields in SUMMARIZABLE_FK_FIELDS.items():
            try:
                fkval = getattr(obj, fk, None)
                if fkval is None:
                    continue
                if fkval == obj:
                    continue
                summary_fields[fk] = OrderedDict()
                for field in related_fields:
                    if (self.version < 2 and field == 'credential_type_id'
                            and fk in ['credential', 'vault_credential']):
                        continue

                    fval = getattr(fkval, field, None)

                    if fval is None and field == 'type':
                        if isinstance(fkval, PolymorphicModel):
                            fkval = fkval.get_real_instance()
                        fval = get_type_for_model(fkval)
                    if fval is not None:
                        summary_fields[fk][field] = fval
            # Can be raised by the reverse accessor for a OneToOneField.
            except ObjectDoesNotExist:
                pass
        if getattr(obj, 'created_by', None):
            summary_fields['created_by'] = OrderedDict()
            for field in SUMMARIZABLE_FK_FIELDS['user']:
                summary_fields['created_by'][field] = getattr(
                    obj.created_by, field)
        if getattr(obj, 'modified_by', None):
            summary_fields['modified_by'] = OrderedDict()
            for field in SUMMARIZABLE_FK_FIELDS['user']:
                summary_fields['modified_by'][field] = getattr(
                    obj.modified_by, field)

        return summary_fields
コード例 #4
0
ファイル: jobs.py プロジェクト: skyle97/cyborgbackup
 def log_format(self):
     return '{} {} ({})'.format(get_type_for_model(type(self)), self.id,
                                self.status)
コード例 #5
0
ファイル: serializers.py プロジェクト: skyle97/cyborgbackup
 def get_type(self, obj):
     return get_type_for_model(self.Meta.model)