示例#1
0
class MyModel(models.Model):
    color = CharEnumField(Color, max_length=1)
    taste = IntegerEnumField(Taste, default=Taste.SWEET)
    taste_null_default = IntegerEnumField(Taste,
                                          null=True,
                                          blank=True,
                                          default=None)

    default_none = IntegerEnumField(Taste, default=None, null=True, blank=True)
    nullable = IntegerEnumField(Taste, null=True, blank=True)

    random_code = models.TextField(null=True, blank=True)

    zero_field = IntegerEnumField(ZeroEnum,
                                  null=True,
                                  default=None,
                                  blank=True)
    int_enum = IntegerEnumField(IntegerEnum,
                                null=True,
                                default=None,
                                blank=True)
    sub_int_enum = IntegerEnumSubField('int_enum',
                                       SubIntegerEnum,
                                       null=True,
                                       default=None,
                                       blank=True)

    zero2 = IntegerEnumField(ZeroEnum, default=ZeroEnum.ZERO)
    labeled_enum = CharEnumField(LabeledEnum, blank=True, null=True)
    state = IntegerEnumField(StateFlow, default=StateFlow.START)
    any_first_state = IntegerEnumField(StateFlowAnyFirst,
                                       default=StateFlowAnyFirst.START)
示例#2
0
class CommandLog(CommandLogStrMixin, Log):
    """
    Represents a log of a command run.

    Attributes:
        start: Date and time when command was started.
        stop: Date and time when command finished.
        time: Command processing time in miliseconds.
        name: Name of the command.
        options: Arguments/options the command was run with.
        is_executed_from_command_line: Flag that indicates if command was run from the command line.
        output: Standard and error output of the command.
        is_successful: Flag that indicates if command finished successfully.
    """
    name = models.CharField(
        max_length=250,
        blank=False,
        null=False,
        editable=False,
        db_index=True
    )
    input = models.TextField(
        blank=False,
        null=False,
        editable=False
    )
    is_executed_from_command_line = models.BooleanField(
        blank=False,
        null=False,
        default=False,
        editable=False
    )
    output = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CommandState,
        default=CommandState.ACTIVE,
        db_index=True
    )
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)
示例#3
0
class RequestLog(Log):

    host = models.CharField(
        max_length=255,
        null=False,
        blank=False,
        db_index=True
    )
    method = models.SlugField(
        max_length=7,
        null=False,
        blank=False,
        db_index=True
    )
    path = models.CharField(
        max_length=2000,
        null=False,
        blank=True,
        db_index=True
    )
    queries = models.JSONField(
        null=True,
        blank=True,
        encoder=DjangoJSONEncoder
    )
    is_secure = models.BooleanField(
        default=False,
        null=False,
        blank=False
    )

    # Request information
    request_headers = models.JSONField(
        null=True,
        blank=True,
        encoder=DjangoJSONEncoder
    )
    request_body = models.TextField(
        null=True,
        blank=True
    )

    # Response information
    response_code = models.PositiveSmallIntegerField(
        null=True,
        blank=True
    )
    response_headers = models.JSONField(
        null=True,
        blank=True,
        encoder=DjangoJSONEncoder
    )
    response_body = models.TextField(
        null=True,
        blank=True
    )

    state = IntegerEnumField(
        enum=RequestLogState,
        null=False,
        blank=False,
        default=RequestLogState.INCOMPLETE
    )

    def __str__(self):
        return ' '.join(
            (force_text(v) for v in (
                self.slug, self.response_code, localtime(self.start.replace(microsecond=0))
            ) if v)
        )

    class Meta:
        abstract = True
示例#4
0
class CeleryTaskRunLog(CeleryTaskRunLogStrMixin, Log):

    celery_task_id = models.UUIDField(
        max_length=250,
        db_index=True,
        null=True,
        blank=True
    )
    name = models.CharField(
        null=False,
        blank=False,
        max_length=250,
        db_index=True
    )
    queue_name = models.CharField(
        null=True,
        blank=True,
        max_length=250
    )
    input = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    task_args = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    task_kwargs = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CeleryTaskRunLogState,
        default=CeleryTaskRunLogState.ACTIVE,
        db_index=True
    )
    result = models.JSONField(
        blank=True,
        null=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    output = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    retries = models.PositiveSmallIntegerField(
        null=False,
        blank=False,
        default=0
    )
    estimated_time_of_next_retry = models.DateTimeField(
        null=True,
        blank=True
    )
    waiting_time = models.FloatField(
        null=True,
        blank=True
    )
    related_objects = MultipleDBGenericManyToManyField()

    objects = BaseLogQuerySet.as_manager()

    class Meta:
        ordering = ('-start',)

    def __str__(self):
        return '{} ({})'.format(self.name, self.get_state_display())

    def get_task_invocation_logs(self):
        return CeleryTaskInvocationLog.objects.filter(celery_task_id=self.celery_task_id)
示例#5
0
class CeleryTaskInvocationLog(CeleryTaskInvocationLogStrMixin, Log):

    celery_task_id = models.UUIDField(
        max_length=250,
        db_index=True,
        null=True,
        blank=True
    )
    name = models.CharField(
        null=False,
        blank=False,
        max_length=250,
        db_index=True
    )
    queue_name = models.CharField(
        null=True,
        blank=True,
        max_length=250
    )
    applied_at = models.DateTimeField(
        null=False,
        blank=False
    )
    triggered_at = models.DateTimeField(
        null=True,
        blank=True
    )
    is_unique = models.BooleanField()
    is_async = models.BooleanField()
    is_on_commit = models.BooleanField()
    input = models.TextField(
        blank=True,
        null=True,
        editable=False
    )
    task_args = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    task_kwargs = models.JSONField(
        null=True,
        blank=True,
        editable=False,
        encoder=DjangoJSONEncoder
    )
    estimated_time_of_first_arrival = models.DateTimeField(
        null=True,
        blank=True
    )
    expires_at = models.DateTimeField(
        null=True,
        blank=True
    )
    stale_at = models.DateTimeField(
        null=True,
        blank=True
    )
    state = IntegerEnumField(
        null=False,
        blank=False,
        enum=CeleryTaskInvocationLogState,
        default=CeleryTaskInvocationLogState.WAITING,
        db_index=True
    )

    related_objects = MultipleDBGenericManyToManyField()

    objects = CeleryTaskInvocationLogManager.from_queryset(BaseLogQuerySet)()

    class Meta:
        ordering = ('-start',)

    def __str__(self):
        return '{} ({})'.format(self.name, self.state.label)

    @property
    def runs(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id)

    @property
    def last_run(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id).first()

    @property
    def first_run(self):
        return CeleryTaskRunLog.objects.filter(celery_task_id=self.celery_task_id).last()
def test_django_admin_lookup_value_for_integer_enum_field():
    field = IntegerEnumField(Taste)

    assert field.get_prep_value(
        str(Taste.BITTER.value
            )) == 3, "get_prep_value should be able to convert from strings"
示例#7
0
class LegalReason(SmartModel):
    objects = LegalReasonManager.from_queryset(LegalReasonQuerySet)()

    issued_at = models.DateTimeField(
        verbose_name=_('issued at'),
        null=False,
        blank=False,
    )
    expires_at = models.DateTimeField(verbose_name=_('expires at'),
                                      null=True,
                                      blank=True,
                                      db_index=True)
    tag = models.CharField(verbose_name=_('tag'),
                           null=True,
                           blank=True,
                           max_length=100)
    state = IntegerEnumField(verbose_name=_('state'),
                             null=False,
                             blank=False,
                             enum=LegalReasonState,
                             default=LegalReasonState.ACTIVE,
                             db_index=True)
    purpose_slug = models.CharField(verbose_name=_('purpose'),
                                    null=False,
                                    blank=False,
                                    max_length=100,
                                    db_index=True)
    source_object_content_type = models.ForeignKey(
        ContentType,
        verbose_name=_('source object content type'),
        null=False,
        blank=False,
        on_delete=models.DO_NOTHING)
    source_object_id = models.TextField(verbose_name=_('source object ID'),
                                        null=False,
                                        blank=False,
                                        db_index=True)
    source_object = GenericForeignKey('source_object_content_type',
                                      'source_object_id')

    class Meta:
        verbose_name = _('legal reason')
        verbose_name_plural = _('legal reasons')
        ordering = ('-created_at', )
        unique_together = ('purpose_slug', 'source_object_content_type',
                           'source_object_id')

    def __str__(self):
        return f'{self.purpose.name}'

    @property
    def is_active(self):
        return self.state == LegalReasonState.ACTIVE

    @property
    def purpose(self) -> Type["AbstractPurpose"]:
        return purpose_register.get(self.purpose_slug, None)

    def _anonymize_obj(self, *args, **kwargs):
        purpose_register[self.purpose_slug]().anonymize_obj(
            self.source_object, self, *args, **kwargs)

    def _deanonymize_obj(self, *args, **kwargs):
        purpose_register[self.purpose_slug]().deanonymize_obj(
            self.source_object, *args, **kwargs)

    def expire(self):
        """Anonymize obj and set state as expired."""
        with transaction.atomic():
            self._anonymize_obj()
            self.change_and_save(state=LegalReasonState.EXPIRED)

    def deactivate(self):
        """Deactivate obj and run anonymization."""
        with transaction.atomic():
            self._anonymize_obj()
            self.change_and_save(state=LegalReasonState.DEACTIVATED)

    def renew(self):
        with transaction.atomic():
            self.change_and_save(
                expires_at=timezone.now() +
                purpose_register[self.purpose_slug]().expiration_timedelta,
                state=LegalReasonState.ACTIVE)
            self._deanonymize_obj()