|
3 | 3 |
|
4 | 4 | from api_app import utilities |
5 | 5 |
|
6 | | -STATUS = [("pending", "pending"), |
7 | | - ("running", "running"), |
8 | | - ("reported_without_fails", "reported_without_fails"), |
9 | | - ("reported_with_fails", "reported_with_fails"), |
10 | | - ("failed", "failed")] |
| 6 | +STATUS = [ |
| 7 | + ("pending", "pending"), |
| 8 | + ("running", "running"), |
| 9 | + ("reported_without_fails", "reported_without_fails"), |
| 10 | + ("reported_with_fails", "reported_with_fails"), |
| 11 | + ("failed", "failed"), |
| 12 | +] |
| 13 | + |
| 14 | + |
| 15 | +class Tag(models.Model): |
| 16 | + label = models.CharField(max_length=50, blank=False, default="none") |
| 17 | + color = models.CharField(max_length=7, blank=False, default="#222222") |
| 18 | + |
| 19 | + def __str__(self): |
| 20 | + return f'Tag(label="{self.label}")' |
11 | 21 |
|
12 | 22 |
|
13 | 23 | class Job(models.Model): |
14 | 24 | source = models.CharField(max_length=50, blank=False, default="none") |
15 | | - is_sample = models.BooleanField(blank=False) |
| 25 | + is_sample = models.BooleanField(blank=False, default=False) |
16 | 26 | md5 = models.CharField(max_length=50, blank=False) |
17 | 27 | observable_name = models.CharField(max_length=50, blank=True) |
18 | 28 | observable_classification = models.CharField(max_length=50, blank=True) |
19 | 29 | file_name = models.CharField(max_length=50, blank=True) |
20 | 30 | file_mimetype = models.CharField(max_length=50, blank=True) |
21 | | - status = models.CharField(max_length=50, blank=False, choices=STATUS, default="pending") |
22 | | - analyzers_requested = postgres_fields.ArrayField(models.CharField(max_length=900), blank=True, default=list) |
| 31 | + status = models.CharField( |
| 32 | + max_length=50, blank=False, choices=STATUS, default="pending" |
| 33 | + ) |
| 34 | + analyzers_requested = postgres_fields.ArrayField( |
| 35 | + models.CharField(max_length=900), blank=True, default=list |
| 36 | + ) |
23 | 37 | run_all_available_analyzers = models.BooleanField(blank=False, default=False) |
24 | | - analyzers_to_execute = postgres_fields.ArrayField(models.CharField(max_length=900), blank=True, default=list) |
| 38 | + analyzers_to_execute = postgres_fields.ArrayField( |
| 39 | + models.CharField(max_length=900), blank=True, default=list |
| 40 | + ) |
25 | 41 | analysis_reports = postgres_fields.JSONField(default=list, null=True, blank=True) |
26 | 42 | received_request_time = models.DateTimeField(auto_now_add=True) |
27 | 43 | finished_analysis_time = models.DateTimeField(blank=True, null=True) |
28 | 44 | force_privacy = models.BooleanField(blank=False, default=False) |
29 | 45 | disable_external_analyzers = models.BooleanField(blank=False, default=False) |
30 | | - errors = postgres_fields.ArrayField(models.CharField(max_length=900), blank=True, default=list, null=True) |
| 46 | + errors = postgres_fields.ArrayField( |
| 47 | + models.CharField(max_length=900), blank=True, default=list, null=True |
| 48 | + ) |
31 | 49 | file = models.FileField(blank=True, upload_to=utilities.file_directory_path) |
| 50 | + tags = models.ManyToManyField(Tag, related_name="jobs", blank=True) |
| 51 | + |
| 52 | + def __str__(self): |
| 53 | + if self.observable_name: |
| 54 | + return f'Job("{self.observable_name}")' |
| 55 | + else: |
| 56 | + return f'Job("{self.file_name}")' |
0 commit comments