class MetaDataModel(models.Model): items = models.PositiveIntegerField(null=True) fields = models.PositiveSmallIntegerField(null=True) preview = models.FileField(null=True, upload_to=file_upload_path) fields_names = pg_fields.ArrayField(models.TextField(), blank=True, default=list) fields_with_urls = pg_fields.ArrayField(models.TextField(), blank=True, default=list) class Meta: abstract = True @property def data(self): if not self.preview: return {} self.preview.seek(0) preview = json.loads(self.preview.read()) preview["labels"] = {} if "fields" in preview: for k, v in preview["fields"].items(): label = self.get_data_source_meta().fields_labels.get( k, {"type": v.get("dtype")}) preview["labels"][k] = label return preview @property def shape(self): return [self.items, self.fields]
class AclAbstractModel(SimpleAclAbstractModel): _users = pg_fields.ArrayField(models.IntegerField(), default=list, blank=True) _groups = pg_fields.ArrayField(models.IntegerField(), default=list, blank=True) _public = models.BooleanField(default=False) class Meta: abstract = True @staticmethod @receiver(class_prepared, dispatch_uid='AclAbstractModel.prepare_acl_manager') def prepare_acl_manager(sender, **kwargs): if issubclass(sender, AclAbstractModel): manager = sender.objects orig_queryset_class = manager._queryset_class if issubclass(orig_queryset_class, AclQuerySet): parent = (orig_queryset_class, ) else: parent = (AclQuerySet, orig_queryset_class) # Django abstract manager inheritance is pretty much non-existing so we just create it for each model queryset_class = type('AclQuery', parent, {}) new_manager = sender.objects.from_queryset(queryset_class)() new_manager.name = manager.name new_manager.model = sender sender.objects = new_manager
class Metadata(models.Model): url = models.TextField() keywords = fields.ArrayField(models.TextField(), blank=True, default=list) entities = fields.ArrayField(models.TextField(), blank=True, default=list) def __str__(self): return self.url
class Survey(BaseDocumentModel): township = pg_fields.ArrayField( models.PositiveIntegerField(null=True, blank=True), help_text=ARRAY_FIELD_HELP_TEXT ) section = pg_fields.ArrayField( models.PositiveIntegerField(null=True, blank=True), help_text=ARRAY_FIELD_HELP_TEXT ) range = pg_fields.ArrayField( models.PositiveIntegerField(null=True, blank=True), help_text=ARRAY_FIELD_HELP_TEXT ) map_number = models.CharField(max_length=255, null=True, blank=True) location = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) job_number = models.CharField(max_length=255, blank=True, null=True) number_of_sheets = models.CharField(max_length=255, blank=True, null=True) date = models.CharField(max_length=255, blank=True, null=True) cross_ref_area = models.PositiveIntegerField(blank=True, null=True) cross_ref_section = models.PositiveIntegerField(blank=True, null=True) cross_ref_map_number = models.CharField( max_length=255, blank=True, null=True ) hash = models.CharField(max_length=255, null=True, blank=True) source_file = models.FileField(upload_to='SURVEYS')
class RefiningModel(BaseModel): user = models.EmailField(max_length=255) tax = models.IntegerField() type_of = models.CharField(max_length=56) focus = IntegerRangeField(min_value=0, max_value=30000, blank=True, null=True) purchased_resources = models.BooleanField(default=False) resouces_cost = fields.ArrayField(fields.JSONField(), blank=False, null=False) resources_to_refining = fields.ArrayField(fields.JSONField(), blank=False, null=False) refined_total = fields.ArrayField(fields.JSONField(), blank=False, null=False) refining_prices = fields.ArrayField(fields.JSONField(), blank=False, null=False)
class Card(models.Model): id = models.CharField(primary_key=True, max_length=40) name = models.CharField(max_length=255) types = pgfields.ArrayField(models.CharField(max_length=128)) costs = pgfields.ArrayField(models.CharField(max_length=5), default=list) number_cost = models.DecimalField(default=0, max_digits=14, decimal_places=4) id_external = models.CharField(max_length=100) id_rarity = models.CharField(choices=Rarity.ALL, max_length=40) # rarity = models.ForeignKey('Rarity', on_delete=models.PROTECT) # id_set = models.CharField(max_length=40) set = models.ForeignKey( 'Set', on_delete=models.PROTECT, db_column='id_set', max_length=40, related_name='cards', ) id_asset = models.CharField(max_length=40) rate = models.DecimalField(default=0, max_digits=14, decimal_places=4) rate_votes = models.DecimalField(default=0, max_digits=10, decimal_places=0) rules = pgfields.ArrayField(models.CharField(max_length=512), default=list) order_external = models.CharField(null=True, max_length=15) artist = models.CharField(null=True, max_length=255) flavor = models.TextField(null=True, max_length=1024) data = pgfields.JSONField(null=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(null=True, auto_now=True) deleted_at = models.DateTimeField(null=True) def __str__(self): return self.name
class License(BaseDocumentModel): license_number = models.CharField(max_length=255, null=True, blank=True) description = models.TextField(null=True, blank=True) geometry = gis_models.GeometryCollectionField(blank=True, null=True) type = models.CharField(max_length=255, null=True, blank=True) entity = models.CharField(max_length=255, null=True, blank=True) diameter = models.PositiveIntegerField(null=True, blank=True) material = models.CharField(max_length=255, null=True, blank=True) end_date = models.CharField(max_length=255, null=True, blank=True) status = models.CharField(max_length=255, null=True, blank=True) agreement_type = models.CharField(max_length=255, null=True, blank=True) township = pg_fields.ArrayField( models.PositiveIntegerField(null=True), help_text=ARRAY_FIELD_HELP_TEXT, default=list ) range = pg_fields.ArrayField( models.PositiveIntegerField(null=True), help_text=ARRAY_FIELD_HELP_TEXT, default=list ) section = pg_fields.ArrayField( models.PositiveIntegerField(null=True), help_text=ARRAY_FIELD_HELP_TEXT, default=list ) source_file = models.FileField(upload_to='LICENSES')
class Job(models.Model): source = models.CharField(max_length=50, blank=False, default="none") is_sample = models.BooleanField(blank=False) md5 = models.CharField(max_length=50, blank=False) observable_name = models.CharField(max_length=50, blank=True) observable_classification = models.CharField(max_length=50, blank=True) file_name = models.CharField(max_length=50, blank=True) file_mimetype = models.CharField(max_length=50, blank=True) status = models.CharField(max_length=50, blank=False, choices=STATUS, default="pending") analyzers_requested = postgres_fields.ArrayField( models.CharField(max_length=900), blank=True, default=list) run_all_available_analyzers = models.BooleanField(blank=False, default=False) analyzers_to_execute = postgres_fields.ArrayField( models.CharField(max_length=900), blank=True, default=list) analysis_reports = postgres_fields.JSONField(default=list, null=True, blank=True) received_request_time = models.DateTimeField(auto_now_add=True) finished_analysis_time = models.DateTimeField(blank=True, null=True) force_privacy = models.BooleanField(blank=False, default=False) disable_external_analyzers = models.BooleanField(blank=False, default=False) errors = postgres_fields.ArrayField(models.CharField(max_length=900), blank=True, default=list, null=True) file = models.FileField(blank=True, upload_to=utilities.file_directory_path)
class Application(AbstractApplication): owner = models.UUIDField( null=True, blank=True, db_index=True, help_text="Unique identifier for the owner of the application", ) aggregator_for = models.ManyToManyField( Provider, blank=True, help_text="Provider the application is allowed to write for", ) scopes = pg_fields.ArrayField( models.CharField(max_length=32), help_text="Application allowed scopes (separated with commas)", ) users_allowed_scopes = pg_fields.ArrayField( models.CharField(max_length=32), help_text="User's allowed scopes (separated with commas)", default=list, blank=True, ) def natural_key(self): return (self.client_id, ) @property def scopes_string(self): return " ".join(sorted(set(self.scopes)))
class Job(models.Model): class Meta: indexes = [ models.Index(fields=[ "md5", "status", ]), ] source = models.CharField(max_length=50, blank=False, default="none") is_sample = models.BooleanField(blank=False, default=False) md5 = models.CharField(max_length=32, blank=False) observable_name = models.CharField(max_length=512, blank=True) observable_classification = models.CharField(max_length=12, blank=True) file_name = models.CharField(max_length=512, blank=True) file_mimetype = models.CharField(max_length=80, blank=True) status = models.CharField(max_length=32, blank=False, choices=STATUS, default="pending") analyzers_requested = postgres_fields.ArrayField( models.CharField(max_length=128), blank=True, default=list) run_all_available_analyzers = models.BooleanField(blank=False, default=False) analyzers_to_execute = postgres_fields.ArrayField( models.CharField(max_length=128), blank=True, default=list) analysis_reports = postgres_fields.JSONField(default=list, null=True, blank=True) received_request_time = models.DateTimeField(auto_now_add=True) finished_analysis_time = models.DateTimeField(blank=True, null=True) force_privacy = models.BooleanField(blank=False, default=False) disable_external_analyzers = models.BooleanField(blank=False, default=False) errors = postgres_fields.ArrayField(models.CharField(max_length=900), blank=True, default=list, null=True) file = models.FileField(blank=True, upload_to=file_directory_path) tags = models.ManyToManyField(Tag, related_name="jobs", blank=True) runtime_configuration = postgres_fields.JSONField(default=dict, null=True, blank=True) @classmethod def object_by_job_id(cls, job_id, transaction=False): try: if transaction: job_object = cls.objects.select_for_update().get(id=job_id) else: job_object = cls.objects.get(id=job_id) except cls.DoesNotExist: raise AnalyzerRunException(f"No Job with ID:{job_id} retrieved") return job_object def __str__(self): if self.is_sample: return f'Job("{self.file_name}")' return f'Job("{self.observable_name}")'
class Rules(models.Model): name = models.CharField(max_length=255) reply_to = models.TextField(blank=True, null=True) authors = fields.ArrayField(models.CharField(max_length=255), blank=True, null=True) # This field type is a guess. branches = fields.ArrayField(models.CharField(max_length=255), blank=True, null=True) # This field type is a guess. paths = fields.ArrayField(models.CharField(max_length=255), blank=True, null=True) # This field type is a guess. projects = fields.ArrayField(models.CharField(max_length=255), blank=True, null=True) # This field type is a guess. to = fields.ArrayField(models.CharField(max_length=255), blank=True, null=True) # This field type is a guess. class Meta: managed = False db_table = 'rules' def get_absolute_url(self): return reverse("rules:detail", kwargs={"pk": self.pk})
class CVResult(models.Model): params = fields.JSONField(default=dict) gridsearch = models.ForeignKey(GridSearch, related_name='results') fit_time = fields.ArrayField(models.FloatField(default=0.), default=list) score_time = fields.ArrayField(models.FloatField(default=0.), default=list) errors = models.TextField(null=True, blank=True)
class CVResultScore(models.Model): scorer = models.CharField(max_length=256) cv_result = models.ForeignKey(CVResult, related_name='scores') train_scores = fields.ArrayField(models.FloatField(default=0.), default=list) test_scores = fields.ArrayField(models.FloatField(default=0.), default=list) score = models.FloatField(default=0.)
class Gene(models.Model): class Meta: db_table = "cognoma_genes" entrez_gene_id = models.IntegerField(primary_key=True) symbol = models.CharField(max_length=32) description = models.CharField(max_length=256) chromosome = models.CharField(max_length=8, null=True) gene_type = models.CharField(max_length=16) synonyms = postgresfields.ArrayField(models.CharField(max_length=32), null=True) aliases = postgresfields.ArrayField(models.CharField(max_length=256), null=True)
class Course(models.Model): """A course model. Note: * "sessions" is a JSONField, so it can't natively perform model-level validations of the data format. The input for "sessions" should be checked rigorously before creating/updating a Course instance. The input of "sessions" should be of the form: "sessions": [ { "day": "", "period": "", "classrooms": ["", ""] }, { "day": "", "period": "", "classrooms": [""] }, ... ] """ title = models.CharField(max_length=150) course_class_code = models.CharField(max_length=20) course_code = models.CharField(max_length=10, blank=True) level = models.CharField( max_length=100, blank=True) # Ex. "Final stage advanced-level undergraduate" category = models.CharField(max_length=100, blank=True) # Ex. "Elective Subjects" eligible_year = models.CharField(max_length=50) # Ex. "4th year and above" credits = models.IntegerField() main_language = models.CharField(max_length=50) campus = models.CharField(max_length=50, blank=True) year = models.CharField(max_length=10) term = models.CharField(max_length=50, blank=True) syllabus_url = models.URLField(blank=True) schools = postgres_fields.ArrayField(models.CharField(max_length=70), size=3, blank=True, null=True) academic_disciplines = postgres_fields.ArrayField(models.CharField( max_length=100, blank=True), size=3, blank=True, null=True) instructors = postgres_fields.ArrayField( models.CharField(max_length=100, blank=True), size=43, ) sessions = postgres_fields.JSONField()
class Team(models.Model): name = models.CharField(max_length=10, primary_key=True) elos = pgfields.ArrayField(base_field=models.FloatField()) elo_changes = pgfields.ArrayField(base_field=models.FloatField()) def calculate_changes(self): self.elo_changes = list() #no change for the first week self.elo_changes.append(0) for i in range(1, len(self.elos)): self.elo_changes.append(self.elos[i] - self.elos[i - 1]) def __str__(self): return self.name
class RushProfile(models.Model): FRESHMAN = "FR" SOPHOMORE = "SO" JUNIOR = "JR" SENIOR = "SR" first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) email = models.CharField(max_length=8) semester = models.CharField(max_length=3) phone_number = models.CharField(max_length=11) grade = models.CharField(max_length=2, choices=((FRESHMAN, "Freshman"), (SOPHOMORE, "Sophomore"), (JUNIOR, "Junior"), (SENIOR, "Senior"))) channel = models.CharField(max_length=30) major_schools = fields.ArrayField( models.CharField(max_length=6)) # max_length => CAS,ENG,QST,Pardee majors = models.CharField(max_length=100) minors = models.CharField(max_length=100, blank=True, null=True) events_attended = fields.ArrayField(models.CharField(max_length=50), default=list) submitted_application = models.BooleanField(default=False) interview_wave = models.PositiveSmallIntegerField(null=True, blank=True) interview_prelim_yes = models.PositiveSmallIntegerField(null=True, blank=True) interview_prelim_no = models.PositiveSmallIntegerField(null=True, blank=True) interview_prelim_abstain = models.PositiveSmallIntegerField(null=True, blank=True) interview_prelim_deliberate = models.NullBooleanField(null=True, blank=True) interview_final_yes = models.PositiveSmallIntegerField(null=True, blank=True) interview_final_no = models.PositiveSmallIntegerField(null=True, blank=True) interview_final_abstain = models.PositiveSmallIntegerField(null=True, blank=True) given_bid = models.NullBooleanField(null=True, blank=True) def __str__(self): return "%s %s (%[email protected])" % (self.first_name, self.last_name, self.email) class Meta: verbose_name = 'Rush Profile' ordering = ['last_name']
class Target(models.Model): """ This contains Target(Course) related information """ target_type = models.CharField(max_length=4, choices=TARGET_TYPES, default='HP') start_date = models.DateTimeField(db_index=True) end_date = models.DateTimeField() # Ids of the Users who are Owners/Admins for this Target admins = pg_fields.ArrayField(models.IntegerField(), db_index=True) # Ids of the Users who are Volunteers for this Target volunteers = pg_fields.ArrayField(models.IntegerField(), db_index=True) total_leads = models.IntegerField(default=0) is_complete = models.BooleanField(default=False) created_at = models.DateTimeField(default=timezone.now) updated_at = models.DateTimeField(default=timezone.now)
class Recipe(models.Model): origin_id = models.CharField(max_length=255, unique=True) group_name = models.CharField(max_length=100, default="Etc") title = models.TextField() image_url = models.URLField() ingredients = pgfields.ArrayField(models.TextField()) instructions = pgfields.JSONField() sentences = pgfields.ArrayField(models.TextField()) last_assigned = models.DateTimeField(default=timezone.now) is_unused = models.BooleanField(default=False) def __str__(self): return self.title """
class Source(models.Model): source_quote = models.TextField() source_url = models.TextField() source_title = models.TextField() source_name = models.TextField() source_date = models.DateTimeField(default=django.utils.timezone.now) other_article_urls = fields.ArrayField(models.TextField(), blank=True, default=list) other_article_titles = fields.ArrayField(models.TextField(), blank=True, default=list) def __str__(self): return self.source_quote
class Attendees(models.Model): """ Storing attendees, useful only for frontend part """ event = models.OneToOneField(Event, on_delete=models.CASCADE, related_name="attendees") departments = postgres_fields.ArrayField(models.IntegerField(), null=True, blank=True) individual_users = postgres_fields.ArrayField( models.CharField(max_length=200), blank=True, null=True) def __str__(self): return f"Departments: {self.departments}, Individual Users:{self.individual_users}"
class Team(models.Model): league = models.ForeignKey(League, on_delete=models.PROTECT) name = models.CharField(max_length=64) team_key = models.CharField(max_length=16, unique=True) avatar = models.TextField(blank=True) users = models.ManyToManyField(User, default=list) # team profile bio = models.CharField(max_length=1000, blank=True) divisions = fields.ArrayField( models.TextField(choices=TOURNAMENT_DIVISION_CHOICES), default=list) # scrimmages mu = models.FloatField(default=25) sigma = models.FloatField(default=8.333) auto_accept_ranked = models.BooleanField(default=False) auto_accept_unranked = models.BooleanField(default=False) wins = models.IntegerField(default=0) losses = models.IntegerField(default=0) draws = models.IntegerField(default=0) code = models.TextField(default="// Get started by reading the docs!") # metadata deleted = models.BooleanField(default=False) def __str__(self): return '{}: (#{}) {}'.format(self.league, self.id, self.name)
class Post(MetaTagBase): title = models.CharField(max_length=200) text = FroalaField(image_upload=True) topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, related_name='posts', null=True, blank=True) published_date = models.DateField(blank=True, null=True) tags = fields.ArrayField(models.CharField(max_length=200), blank=True, default=list) clicks = models.IntegerField(blank=True, default=0) likes = models.IntegerField(blank=True, default=0) dislikes = models.IntegerField(blank=True, default=0) preferences = fields.JSONField(blank=True, default=dict) objects = models.Manager() published = PublishedMenager() class Meta: ordering = ['-published_date'] indexes = [ models.Index(fields=['-published_date']), ] def publish(self): self.published_date = timezone.now() self.save() def __str__(self): return self.title def get_absolute_url(self): return reverse('blog:post_detail', kwargs={'pk': self.pk})
class Tag(MTModel): user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE) name = models.CharField(max_length=255) words = postgresfields.ArrayField(models.CharField(max_length=100), blank=True, default=list) slug = models.SlugField(null=True) def __str__(self): return 'Tag %s for User %s' % (self.name, self.user) class Meta: unique_together = ['user', 'slug'] db_table = 'walletweb_tag' @property def transactions(self): """ Returns all user transactions associated with this tag. :return: QuerySet[Transaction] """ return Transaction.objects.filter(tags__slug=self.slug, user=self.user).all() def save(self, *args, **kwargs): if not self.id: # Newly created object, so set slug self.slug = slugify(self.name) super().save(*args, **kwargs)
class Order(models.Model): order_id = fields.IntegerField(primary_key=True) weight = fields.FloatField() region = fields.IntegerField() delivery_hours = pg_fields.ArrayField(fields.CharField(max_length=12)) delivery_pack = ForeignKey(DeliveryPack, on_delete=CASCADE, default=None, blank=True, null=True) delivery_time = fields.IntegerField(default=None, blank=True, null=True) def is_completed(self): return self.delivery_time is not None def set_completed(self, seconds: int): if not self.is_completed(): self.delivery_time = seconds def is_inside_working_time(self, courier: Courier): for available_period in self.delivery_hours: for delivery_period in courier.working_hours: result = time_utils.inside_bounds(available_period, delivery_period) if result: return True return False def __getitem__(self, item): return getattr(self, item) def __setitem__(self, key, value): setattr(self, key, value) def get_list_of_fields(self): return self._meta.get_fields()
class SpecialtyPizza(models.Model): toppings = postgres_fields.ArrayField(models.CharField(max_length=20), size=4) metadata = postgres_fields.HStoreField() price_range = postgres_fields.IntegerRangeField() sales = postgres_fields.BigIntegerRangeField() available_on = postgres_fields.DateTimeRangeField() season = postgres_fields.DateRangeField()
class ReportRecord(BasicModel): """ 举报记录 """ class Meta: verbose_name = 'ReportRecord' verbose_name_plural = verbose_name index_together = ['kind', 'is_offend', 'is_solved'] db_table = 'k_rt_reportrecord' ordering = ('-updated_at', ) usrid = models.BigIntegerField('用户', db_index=True) touchid = models.BigIntegerField('对方', db_index=True) kind = models.PositiveSmallIntegerField('类型', choices=mc.ReportKind.choices, default=0) kind_txt = models.CharField('类型描述', max_length=50, default='') is_offend = models.BooleanField('是否反感', default=False) # 有人身攻击或让人感觉不适 offended = models.CharField('反感原因或感受', max_length=200, default='') evidence = fields.ArrayField(models.URLField(default=''), verbose_name='证据', size=5) is_solved = models.BooleanField('是否已解决', default=False) feedback = models.CharField('给举报者的反馈', max_length=200, default='') operator = models.PositiveIntegerField('运营操作员', default=0) memo = models.TextField('运营备忘', default='') objects = ReportRecordManager() @property def report_user(self): user = ReportUser.objects.get(touchid=self.touchid) return user
class Currency(models.Model): code = fields.CodeISOField(_('code ISO 4217'), length=3, primary_key=True, regex=r'[A-Z]') numeric = fields.CodeISOField(_('code ISO 4217 numeric'), blank=True, length=3, regex=r'\d') name = models.CharField(_('name'), max_length=64) full_name = models.CharField(_('full name'), blank=True, max_length=64) minor_unit = models.PositiveSmallIntegerField(blank=True, null=True) symbol = models.CharField(_('symbol'), blank=True, max_length=4) unicode_hex = pg_fields.ArrayField(models.CharField(max_length=8), null=True, verbose_name=_('unicode hex')) class Meta: ordering = ('code', ) verbose_name = _('currency') verbose_name_plural = _('currencies') def __str__(self): return self.code
class MarkedResult(models.Model): class Meta: unique_together = (('chat_date', 'client_id'), ) indexes = [ models.Index(fields=[ 'chat_date', ]), models.Index(fields=[ 'client_id', ]), ] chat_date = models.DateField() client_id = models.CharField(max_length=6) topic = models.ForeignKey(Topic, on_delete=models.SET_DEFAULT, default=-1) subtopic = models.ForeignKey(Subtopic, on_delete=models.SET_DEFAULT, default=-1) custom_topic = models.CharField(max_length=800, null=True) custom_subtopic = models.CharField(max_length=800, null=True) aggressive_client = models.BooleanField(default=False) non_standard_question = models.BooleanField(default=False) chosen_phrases = fields.ArrayField(models.TextField()) def __str__(self): return f'{self.client_id};{self.topic};{self.subtopic};{self.custom_topic};{self.custom_subtopic};{self.aggressive_client};{self.non_standard_question};{self.chosen_phrases}'
class SearchTask(models.Model): user = models.ForeignKey(User) query = models.CharField("Пошуковий запит", max_length=150) deepsearch = models.BooleanField("Шукати скрізь", default=False) query_params = models.TextField("Опції", blank=True, default="", max_length=500) is_enabled = models.BooleanField("Активний", default=True, db_index=True) is_deleted = models.BooleanField("Видалений", default=False) found_total = models.IntegerField("Знайдено всього", default=0) found_week = models.IntegerField("Знайдено за тиждень", default=0) found_ids = fields.ArrayField(models.CharField(max_length=60), blank=True, default=[], verbose_name="Знайдені документи") last_run = models.DateTimeField("Останній запуск", null=True, blank=True, default=None) created = models.DateTimeField("Створений", auto_now_add=True, blank=True) def __str__(self): return self.query @property def title(self): title = self.query if not title: title = "(пустий) #{}".format(self.id) elif self.deepsearch: title += " (скрізь)" return title