Пример #1
0
class Exam(models.Model):
    """模拟考试"""

    customer = models.ForeignKey('customers.Customer',
                                 on_delete=models.CASCADE,
                                 verbose_name='考试人')
    subject = models.ForeignKey('subjects.Subject',
                                on_delete=models.DO_NOTHING,
                                verbose_name='所属科目',
                                null=True,
                                blank=True)
    questions = JSONField(default='[]', verbose_name='题目列表')
    # [id1, id2,]
    answer = JSONField(default='[]', verbose_name='答案列表')
    # [{"id": qid, "answer": [], "is_correct": True},]
    result = JSONField(default='{}', verbose_name='考试结果')
    # {"correct_count": 20, "wrong_cout": 10, "blank_count": 0, "score": 100}
    update_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    create_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    objects = ExamManager()

    class Meta:
        db_table = DB_PREFIX + 'exams'
        ordering = ['-id']

    def get_question_list(self):
        """获取题目详情
        """
        questions = []
        for q in self.questions:
            questions.append(mm_Question.get_question(q))
        return questions
Пример #2
0
class VersionPreview(BasePreview, ModelBase):
    version = models.ForeignKey(Version,
                                related_name='previews',
                                on_delete=models.CASCADE)
    position = models.IntegerField(default=0)
    sizes = JSONField(default={})
    colors = JSONField(default=None, null=True)
    media_folder = 'version-previews'

    class Meta:
        db_table = 'version_previews'
        ordering = ('position', 'created')
        indexes = [
            LongNameIndex(fields=('version', ),
                          name='version_previews_version_id_fk_versions_id'),
            models.Index(fields=('version', 'position', 'created'),
                         name='version_position_created_idx'),
        ]

    @cached_property
    def caption(self):
        """We only don't support defining a caption for previews because
        they're auto-generated.  This is for compatibility with Addon Preview
        objects. (it's a cached_property so it can be set transparently)"""
        return None
Пример #3
0
class WebsiteSubmission(ModelBase):
    """
    Model representing a website submission.

    When approved, the data from this will be copied to a new instance of the
    Website model, and approved=True will be set on the submission instance.
    """
    name = TranslatedField()
    keywords = JSONField(default=None)
    description = TranslatedField()
    categories = JSONField(default=None)

    date_approved = models.DateTimeField(blank=True, null=True)

    # `detected_icon` is the URL of the icon we are able to gather from the
    # submitted site's metadata. In the reviewer tools, reviewers will be able
    # to accept that icon, or upload one of their own.
    detected_icon = models.URLField(max_length=255, blank=True)
    icon_type = models.CharField(max_length=25, blank=True, null=True)
    icon_hash = models.CharField(max_length=8, blank=True, null=True)

    # The `url` field is the URL as entered by the submitter. The
    # `canonical_url` field is the URL that the site reports as the canonical
    # location for the submitted URL. In the reviewer tools, reviewers will
    # have the ability to copy the `canonical_url` value to the `url` field.
    url = models.URLField(max_length=255)
    canonical_url = models.URLField(max_length=255, blank=True, null=True)

    # A 1-5 Likert scale indicating how well the submitter says the website
    # works. This is primarily used to make the submitter question the
    # relevance of their submission, though submissions should be prevented if
    # the user says it works poorly.
    works_well = IntegerRangeField(min_value=2, max_value=5)

    # Who is submitting the website? Do they want public credit for their
    # submission?
    submitter = models.ForeignKey(UserProfile,
                                  blank=True,
                                  null=True,
                                  related_name='websites_submitted')
    public_credit = models.BooleanField(default=False)

    # Why does the user think the website is relevant to Marketplace?
    why_relevant = models.TextField()

    # If the submitter says the website is relevant worldwide,
    # preferred_regions should be set to [].
    preferred_regions = JSONField(default=None, blank=True, null=True)

    # Turn true when a reviewer has approved and published a submission.
    approved = models.BooleanField(default=False, db_index=True)

    objects = WebsiteSubmissionManager()

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

    def __unicode__(self):
        return unicode(self.url)
Пример #4
0
class Frame(TimeStampedModel):
    node = models.ForeignKey(Node)
    text = models.TextField()
    annotations = JSONField(null=True, blank=True)
    key_entities = JSONField(null=True, blank=True)

    def __unicode__(self):
        return self.text
Пример #5
0
class Result(TimeStampedModel):
    STATUS = Choices((0, 'unknown', _('Unknown')),
                     (1, 'ok', _('OK')),
                     (2, 'warning', _('Warning')),
                     (3, 'critical', _('Critical')))

    slug = models.TextField(verbose_name=_('Module slug'))
    identifier = models.CharField(max_length=256, verbose_name=_('Identifier'))

    status = models.IntegerField(choices=STATUS,
                                 default=STATUS.unknown, verbose_name=_('Status'))
    data = JSONField(blank=True, default=dict, verbose_name=('Data'))
    config = JSONField(blank=True, default=dict, verbose_name=_('Configuration'))

    payload_description = models.TextField(verbose_name=_('Payload description'))

    acknowledged_by = models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True, blank=True,
                                        verbose_name=_('Acknowledged by'),
                                        related_name='acknowledged_by')
    acknowledged_at = models.DateTimeField(null=True, blank=True, verbose_name=_('Acknowledged at'))
    acknowledged_until = models.DateTimeField(null=True, blank=True, verbose_name=_('Acknowledged until'))
    acknowledged_reason = models.TextField(blank=True, verbose_name=_('Acknowledge reason'))

    assigned_to_user = models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True, blank=True,
                                         related_name='assigned_to_user')
    assigned_to_group = models.ForeignKey(to='auth.Group', null=True, blank=True)

    objects = ResultQuerySet.as_manager()

    class Meta:
        unique_together = ('slug', 'identifier')
        permissions = (('view', 'Can view results dashboard and details'), ('acknowledge', 'Can acknowledge results'),
                       ('config', 'Can change the configuration for results'), ('refresh', 'Can refresh results'))

    def acknowledge(self, user, days, reason=None, commit=True):
        if self.status in (self.STATUS.warning, self.STATUS.critical) and self.is_acknowledged():
            raise AlreadyAcknowledged()
        self.acknowledged_at = timezone.now()
        self.acknowledged_by = user
        self.acknowledged_until = timezone.now() + relativedelta.relativedelta(days=days)
        self.acknowledged_reason = reason or ''
        if commit:
            self.save(update_fields=['acknowledged_at', 'acknowledged_by', 'acknowledged_until', 'acknowledged_reason'])

    def is_acknowledged(self):
        return self.acknowledged_until and self.acknowledged_until >= timezone.now()

    def __str__(self):
        return self.slug

    def get_check_instance(self):
        return datawatch.get_check_class(self.slug)()

    def get_payload(self):
        return self.get_check_instance().get_payload(self.identifier)

    def get_formatted_data(self):
        return datawatch.get_check_class(self.slug)().format_result_data(self)
Пример #6
0
class Question(models.Model):

    AggregationChoices = (
        ('sum', 'Sum'),
        ('average', 'Average'),
        ('winner', 'Winner'),
    )

    survey = models.ForeignKey('surveys.Survey')
    remote_id = models.CharField(max_length=200, blank=True, null=True)
    type = models.CharField(max_length=200, blank=True, null=True)
    title = models.CharField(max_length=500, blank=True, null=True)

    display = models.BooleanField(default=True)
    display_theme = models.CharField(max_length=50, blank=True, null=True)
    display_title = models.CharField(max_length=500, blank=True, null=True)
    display_style = models.CharField(max_length=500, blank=True, null=True)
    left_label = models.CharField(max_length=200, blank=True, null=True)
    right_label = models.CharField(max_length=200, blank=True, null=True)

    aggregation = models.CharField(max_length=200, choices=AggregationChoices, null=True, blank=True)
    properties = JSONField(null=True)
    specification = JSONField(null=True)

    def save(self, *args, **kwargs):
        if not self.id:
            self.display_title = self.title
            try:
                self.left_label = self.properties['left_label']
            except KeyError:
                pass
            try:
                self.right_label = self.properties['right_label']
            except KeyError:
                pass
        return super(Question, self).save(*args, **kwargs)

    def get_platform_aggregate(self, start=None, end=None):
        answers = self.aggregateanswer_set.filter(aggregation_type='combined').all()

        if start:
            answers = answers.filter(project__campaign_ended__gte=start)
        if end:
            answers = answers.filter(project__campaign_ended__lte=end)

        if self.type in ('number', 'slider', 'percent'):
            if (self.aggregation == 'average'):
                return answers.aggregate(value=models.Avg('value'))['value']
            else:
                return answers.aggregate(value=models.Sum('value'))['value']
        elif self.type in ('radio', 'checkbox', 'table-radio'):
            values = defaultdict(list)
            for answer in answers:
                [values[key].append(value) for key, value in answer.options.items()]
            return dict((key, float(sum(value)) / len(value)) for key, value in values.items())

    def __unicode__(self):
        return bleach.clean(unicode(self.title), strip=True, tags=[])
Пример #7
0
class Question(models.Model):
    """题目"""

    subject = models.ForeignKey('subjects.Subject',
                                on_delete=models.SET_NULL,
                                blank=True,
                                null=True,
                                verbose_name='科目')
    qtype = models.PositiveSmallIntegerField(
        choices=ModelManager.Question_Type,
        default=ModelManager.Question_Type_Danxuanti,
        verbose_name='题型')
    content = models.TextField(verbose_name='题目内容')
    choices = JSONField(default='[]', verbose_name='选项列表')
    # [{"label": "A", "content": "选项内容"}, {"label": "A", "content": "选项内容"},]
    images = JSONField(default='[]', verbose_name='图片列表')
    # [{"url": "https:xxx.jpg", "name": "图1"}]
    answer = JSONField(default='[]', verbose_name='正确答案')
    update_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    create_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    markers = models.ManyToManyField('customers.Customer', verbose_name='收藏人')

    objects = QuestionManager()

    class Meta:
        db_table = DB_PREFIX + 'questions'
        ordering = ['-id']
        verbose_name = verbose_name_plural = '题目管理'

    def __str__(self):
        return '<{qid}: {content}>'.format(qid=self.id,
                                           content=self.content[:10])

    def is_correct_answer(self, answer_list):
        """判断答案对错"""
        upper_correct_answer = [choice.upper() for choice in list(self.answer)]
        upper_answer_list = [choice.upper() for choice in answer_list]
        if len(upper_correct_answer) != len(upper_answer_list):
            return ModelManager.Answer_Result_Wrong
        for item in upper_correct_answer:
            if item not in upper_answer_list:
                return ModelManager.Answer_Result_Wrong
        return ModelManager.Answer_Result_Correct

    @property
    def dict(self):
        data = {
            'id': self.id,
            'subject_id': self.subject_id,
            'qtype': self.qtype,
            'content': self.content,
            'choices': self.choices,
            'images': self.images,
            'answer': self.answer,
            'update_at': strtime(self.update_at),
            'create_at': strtime(self.create_at)
        }
        return data
Пример #8
0
class WxGroup(models.Model):
    """[summary]
    - groupinfo(群信息结构):
    {
    "head_img": "http://wx.qlogo.cn/mmcrhead/uchmtWQh7iaqDiboEJT29lP9avibibicrDibuY5BDoI11mdwNd9GfrmTgsfib81K6bzu8wvoYKllShC0FK189Pfruymwib05m0FPkJeic/0",
    "member_count": 4,
    "member_nickname_list": [
        "Cvmars",
        "碗底有虫",
        "Zdz",
        "yu"
    ],
    "member_wxid_list": [
        "hehaifeng4235",
        "wxid_96r2lcupwp6f21",
        "wxid_smrapzzeruvp21",
        "wxid_r1nrc1u1m4qw22"
    ],
    "name": "先退的是狗",
    "owner_wxid": "hehaifeng4235",
    "room_wxid": "5609987290@chatroom",
    "wxid": "5609987290@chatroom"
    }
    """
    head_img = models.CharField(max_length=200,
                                blank=True,
                                null=True,
                                verbose_name='头像的url地址')
    member_count = models.PositiveIntegerField(default=0,
                                               verbose_name='该群成员总数')
    member_nickname_list = JSONField(default='[]', verbose_name='成员昵称列表')
    member_wxid_list = JSONField(default='[]', verbose_name='当前群的成员wxid的列表')
    name = models.CharField(max_length=200,
                            blank=True,
                            null=True,
                            verbose_name='群名称')
    owner_wxid = models.CharField(max_length=200,
                                  blank=True,
                                  null=True,
                                  verbose_name='群主wxid')
    room_wxid = models.CharField(max_length=200,
                                 db_index=True,
                                 blank=True,
                                 null=True,
                                 verbose_name='群wxid')
    # wxid = models.CharField(max_length=200, verbose_name='wxid')
    bot_wxid = models.CharField(max_length=200,
                                blank=True,
                                null=True,
                                verbose_name='bot_wxid')
    memberInfo_list = JSONField(default='[]', verbose_name='当前群的成员信息列表')

    objects = WxGroupManager()

    class Meta:
        db_table = 'wx_group'
        unique_together = [['room_wxid', 'bot_wxid']]
Пример #9
0
class Event(models.Model):
    """
      {
        "address": "0x25Ff5dc79A7c4e34254ff0f4a19d69E491201DD3",
        "blockNumber": 3,
        "transactionHash": "0xc18a24a35052a5a3375ee6c2c5ddd6b0587cfa950b59468b67f63f284e2cc382",
        "transactionIndex": 0,
        "blockHash": "0x62469a8d113b27180c139d88a25f0348bb4939600011d33382b98e10842c85d9",
        "logIndex": 0,
        "removed": false,
        "id": "log_25652065",
        "returnValues": {
          "0": "0xFCaf25bF38E7C86612a25ff18CB8e09aB07c9885",
          "shipTokenContractAddress": "0xFCaf25bF38E7C86612a25ff18CB8e09aB07c9885"
        },
        "event": "SetTokenContractAddressEvent",
        "signature": "0xbbbf32f08c8c0621e580dcf0a8e0024525ec357db61bb4faa1a639d4f958a824",
        "raw": {
          "data": "0x000000000000000000000000fcaf25bf38e7c86612a25ff18cb8e09ab07c9885",
          "topics": [
            "0xbbbf32f08c8c0621e580dcf0a8e0024525ec357db61bb4faa1a639d4f958a824"
          ]
        }
      }
    """

    id = models.CharField(primary_key=True, default=random_id, max_length=36)
    eth_action = models.ForeignKey(EthAction,
                                   on_delete=models.CASCADE,
                                   blank=True,
                                   null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    address = AddressField()
    block_number = models.BigIntegerField()
    transaction_hash = HashField()
    transaction_index = models.IntegerField()
    block_hash = HashField()
    log_index = models.IntegerField()
    removed = models.BooleanField()
    event_id = models.CharField(max_length=514)
    return_values = JSONField()
    event_name = models.CharField(max_length=514)
    signature = HashField()
    raw = JSONField()

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['eth_action', 'log_index'],
                                    name='unique event')
        ]

    @staticmethod
    def get_event_subscription_url():
        return settings.INTERNAL_URL + reverse('event-list',
                                               kwargs={'version': 'v1'})
Пример #10
0
class WebextPermission(ModelBase):
    NATIVE_MESSAGING_NAME = u'nativeMessaging'
    permissions = JSONField(default={})
    optional_permissions = JSONField(default={})
    file = models.OneToOneField('File',
                                related_name='_webext_permissions',
                                on_delete=models.CASCADE)

    class Meta:
        db_table = 'webext_permissions'
Пример #11
0
class BlogPost(models.Model):
    wp_id = models.IntegerField()
    wp_blog_slug = models.CharField(max_length=50)
    date = models.DateTimeField()
    modified = models.DateTimeField()
    title = models.CharField(max_length=255)
    excerpt = models.TextField()
    link = models.URLField()
    featured_media = JSONField()
    tags = JSONField()

    objects = BlogPostManager()

    class Meta:
        get_latest_by = 'date'
        ordering = ['-date']

    def __str__(self):
        return '%s: %s' % (self.blog_name, self.title)

    def get_absolute_url(self):
        return self.link

    def htmlify(self):
        return Markup(self.excerpt)

    @property
    def blog_title(self):
        return Markup(self.title).unescape()

    @property
    def blog_link(self):
        return settings.WP_BLOGS[self.wp_blog_slug]['url']

    @property
    def blog_name(self):
        return settings.WP_BLOGS[self.wp_blog_slug]['name']

    def get_featured_tag(self, tags):
        """Return a tag present both in the post and the passed in list.

        If no tag matches something odd has happened, so just return blank.
        """
        matching_tags = list(set(self.tags) & set(tags))
        if matching_tags:
            return random.choice(matching_tags)
        else:
            return ''

    def get_featured_image_url(self, size='large'):
        try:
            return self.featured_media['media_details']['sizes'][size][
                'source_url']
        except (KeyError, TypeError):
            return None
Пример #12
0
class Race(models.Model):
    name = models.CharField(max_length=255)
    horses = models.ManyToManyField(Horse, related_name='races', blank=True)

    paddy_power_data = JSONField(blank=True, help_text='"url" and "event_id" is required')
    bet365_data = JSONField(blank=True)
    william_hill_data = JSONField(blank=True, help_text='"url" and "template_name" is required')
    sky_bet_data = JSONField(blank=True, help_text='"url" and "event_id" is required')

    def __str__(self):
        return self.name
Пример #13
0
    def test_get_prep_value(self):
        j_field = JSONField()

        self.assertEqual(
            six.u(dumps([{'a': 'a'}])),
            j_field.get_prep_value(value=[{'a': 'a'}])
        )

        self.assertEqual(
            six.u(dumps([{'a': 'a'}])),
            j_field.get_prep_value(value='[{"a": "a"}]')
        )
Пример #14
0
    def test_get_prep_value(self):
        j_field = JSONField()

        self.assertEqual(six.u(dumps([{
            'a': 'a'
        }])), j_field.get_prep_value(value=[{
            'a': 'a'
        }]))

        self.assertEqual(six.u(dumps([{
            'a': 'a'
        }])), j_field.get_prep_value(value='[{"a": "a"}]'))
Пример #15
0
    def test_get_db_prep_save(self):
        j_field = JSONField()

        self.assertEqual(
            six.u(dumps([{'a': 'a'}])),
            j_field.get_db_prep_save(value=[{'a': 'a'}], connection=None)
        )

        self.assertEqual(
            six.u('[{"a": "a"}]'),
            j_field.get_db_prep_save(value='[{"a": "a"}]', connection=None)
        )
Пример #16
0
class HistoricalFeatureRecords(HistoricalRecords):
    additional_fields = {
        'references': JSONField(default=[]),
        'children': JSONField(default=[])
    }

    def get_references_value(self, instance, mtype):
        return list(
            instance.references.values_list('pk', flat=True))

    def get_children_value(self, instance, mtype):
        return list(
            instance.get_children().values_list('pk', flat=True))
Пример #17
0
class Explorer(models.Model):
    coin = models.ForeignKey(Coin, on_delete=models.CASCADE, related_name='explorer')

    updated = models.DateTimeField(default=timezone.now)
    last_block = models.DateTimeField(default=timezone.now)
    circulating = models.CharField(max_length=124, default='0')
    height = models.CharField(max_length=124, default='0')
    reward = models.CharField(max_length=124, default='0')
    average_blocktime = models.CharField(max_length=124, default='0')
    totalcoins = models.CharField(max_length=124, default='0')
    target_diff = JSONField(default={})
    total_diff = JSONField(default={})
    to_save = models.BooleanField(default=False)
Пример #18
0
class Project(Model):
    class Meta:
        verbose_name = verbose_name_plural = '团作项目'

    GRADE_BEGINNER = 1
    GRADE_INTERMEDIATE = 2
    GRADE_ADVANCED = 3

    GRADE_CHOICES = (
        (GRADE_BEGINNER, '初级'),
        (GRADE_INTERMEDIATE, '中级'),
        (GRADE_BEGINNER, '高级'),
    )

    name = models.CharField('名称', max_length=64, blank=True, default='')
    logo = models.URLField('Logo', blank=True, default='')
    simple_description = models.CharField('简介',
                                          blank=True,
                                          max_length=256,
                                          default='')

    grade = models.SmallIntegerField('难度',
                                     choices=GRADE_CHOICES,
                                     default=GRADE_BEGINNER)

    video_tutorial = models.BooleanField('有视频讲解', default=False)
    text_tutorial = models.BooleanField('有图文教程', default=False)

    start = models.DateTimeField('开始日期', default=timezone.now)
    end = models.DateTimeField('结束日期', default=timezone.now)

    images = JSONField('图片列表', blank=True, default=[])
    detail_images = JSONField('详情图片列表', blank=True, default=[])
    description = models.TextField('详细描述', blank=True, default='')

    created_by = models.ForeignKey(AUTH_USER_MODEL,
                                   models.SET_NULL,
                                   verbose_name='创建人',
                                   blank=True,
                                   null=True,
                                   default=None)
    created_at = models.DateTimeField('加入时间', default=timezone.now)
    swiper = models.BooleanField('首页轮播展示', default=False)
    recommend = models.BooleanField('首页推荐展示', default=False)

    skills = models.ManyToManyField(Skill)

    def __str__(self):
        return self.name
Пример #19
0
class UpdateCount(StatsSearchMixin, models.Model):
    # Has an index `addon_id` in our dev, stage and prod database
    addon = models.ForeignKey('addons.Addon')
    # Has an index named `count` in our dev, stage and prod database
    count = models.PositiveIntegerField(db_index=True)
    # Has an index named `date` in our dev, stage and prod database
    date = models.DateField(db_index=True)
    versions = JSONField(db_column='version', null=True)
    statuses = JSONField(db_column='status', null=True)
    applications = JSONField(db_column='application', null=True)
    oses = JSONField(db_column='os', null=True)
    locales = JSONField(db_column='locale', null=True)

    class Meta:
        db_table = 'update_counts'
Пример #20
0
class Answer(models.Model):

    response = models.ForeignKey('surveys.Response')
    question = models.ForeignKey('surveys.Question')
    remote_id = models.CharField(max_length=200, blank=True, null=True)
    specification = JSONField(null=True)
    value = models.CharField(max_length=5000, blank=True)
    options = JSONField(null=True)

    @property
    def float_value(self):
        try:
            return float(self.value.replace('%', ''))
        except ValueError:
            return 0
Пример #21
0
class BlogPost(models.Model):
    wp_id = models.IntegerField()
    wp_blog_slug = models.CharField(max_length=50)
    date = models.DateTimeField()
    modified = models.DateTimeField()
    title = models.CharField(max_length=255)
    excerpt = models.TextField()
    link = models.URLField()
    featured_media = JSONField()
    tags = JSONField()

    objects = BlogPostManager()

    class Meta:
        get_latest_by = 'date'
        ordering = ['-date']

    def __unicode__(self):
        return '%s: %s' % (self.blog_name, self.title)

    def get_absolute_url(self):
        return self.link

    def htmlify(self):
        summary = strip_tags(self.excerpt).strip()
        if summary.lower().endswith('continue reading'):
            summary = summary[:-16]

        return Markup(summary)

    @property
    def blog_title(self):
        title = strip_tags(self.title).strip()
        return Markup(title).unescape()

    @property
    def blog_link(self):
        return settings.WP_BLOGS[self.wp_blog_slug]['url']

    @property
    def blog_name(self):
        return settings.WP_BLOGS[self.wp_blog_slug]['name']

    def get_featured_image_url(self, size='large'):
        try:
            return self.featured_media['media_details']['sizes'][size]['source_url']
        except KeyError:
            return None
Пример #22
0
class SecurityAdvisory(models.Model):
    id = models.CharField(max_length=8, primary_key=True, db_index=True)
    title = models.CharField(max_length=200)
    impact = models.CharField(max_length=100)
    reporter = models.CharField(max_length=100, null=True)
    announced = models.DateField(null=True)
    year = models.SmallIntegerField()
    order = models.SmallIntegerField()
    fixed_in = models.ManyToManyField(Product, related_name='advisories')
    extra_data = JSONField()
    html = models.TextField()
    last_modified = ModificationDateTimeField()

    class Meta:
        ordering = ('-year', '-order')
        get_latest_by = 'last_modified'

    def __unicode__(self):
        return u'MFSA {0}'.format(self.id)

    def get_absolute_url(self):
        return reverse('security.advisory', kwargs={'pk': self.id})

    @property
    def impact_class(self):
        return self.impact.lower().split(None, 1)[0]

    @property
    def products(self):
        prods_set = set(v.product for v in self.fixed_in.all())
        return sorted(prods_set)
Пример #23
0
class Container(BaseResource):
    history = HistoricalRecords()
    cpu = models.IntegerField()
    mem = models.IntegerField()
    replicas = models.IntegerField(default=3)
    k8s_cluster = models.ForeignKey(K8sCluster, on_delete=models.PROTECT)
    extra_args = JSONField(default={})
class LabTest(models.Model):
    # Fields
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    metadata = JSONField(default=dict, null=True, blank=True)
    is_approved = models.BooleanField(default=True)

    name = models.CharField(max_length=120, unique=True)
    slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
    aliases = ArrayField(models.CharField(max_length=1024),
                         blank=True,
                         null=True,
                         default=list)

    description = models.TextField(max_length=4096, blank=True, null=True)
    purpose = models.TextField(max_length=2048, blank=True, null=True)
    indication = models.TextField(max_length=2048, blank=True, null=True)
    sample = models.TextField(max_length=2048, blank=True, null=True)
    preparation = models.TextField(max_length=2048, blank=True, null=True)
    usage = models.TextField(max_length=4096, blank=True, null=True)
    interpretation = models.TextField(max_length=4096, blank=True, null=True)
    notes = models.TextField(max_length=4096, blank=True, null=True)

    objects = LabTestManager()

    class Meta:
        ordering = ('name', )

    def __str__(self):
        return self.name
Пример #25
0
class StripeBasicModel(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    stripe_response = JSONField(blank=True)

    class Meta:
        abstract = True
class PatientDiagnosis(models.Model):
    # Fields
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    metadata = JSONField(default=dict, null=True, blank=True)

    is_deleted = models.BooleanField(default=False)

    # Relationship Fields
    diagnosis = models.ForeignKey(Diagnosis,
                                  related_name="patient_diagnoses",
                                  on_delete=models.CASCADE,
                                  null=True)
    checkup = models.ForeignKey(PatientCheckupRecord,
                                related_name="checkup_diagnoses",
                                on_delete=models.CASCADE,
                                null=True)
    added_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 related_name='diagnoses_added')
    removed_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                   on_delete=models.SET_NULL,
                                   null=True,
                                   related_name='diagnoses_deleted')

    objects = PatientDiagnosisManager()

    class Meta:
        ordering = ('diagnosis__name', )
        unique_together = ('diagnosis', 'checkup')

    def __str__(self):
        return f'{self.diagnosis}'
class CheckupNote(models.Model):
    # Fields
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    metadata = JSONField(default=dict, null=True, blank=True)

    note = models.TextField(max_length=1024)

    # Relationship Fields
    checkup = models.ForeignKey(PatientCheckupRecord,
                                related_name="checkup_notes",
                                on_delete=models.CASCADE,
                                null=True)
    added_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 related_name='notes_added')

    objects = CheckupNoteManager()

    class Meta:
        ordering = ('checkup', )

    def __str__(self):
        return f'{self.checkup}: {self.note[:30]}'
class PatientSymptom(models.Model):
    # Fields
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    metadata = JSONField(default=dict, null=True, blank=True)

    is_deleted = models.BooleanField(default=False)

    # Relationship Fields
    symptom = models.ForeignKey(Symptom,
                                related_name="patient_symptoms",
                                on_delete=models.CASCADE,
                                null=True)
    checkup = models.ForeignKey(PatientCheckupRecord,
                                related_name="checkup_symptoms",
                                on_delete=models.CASCADE,
                                null=True)
    added_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 related_name='symptoms_added')
    removed_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                   on_delete=models.SET_NULL,
                                   null=True,
                                   related_name='symptoms_deleted')

    objects = PatientSymptomManager()

    class Meta:
        ordering = ('symptom__name', )
        unique_together = ('symptom', 'checkup')

    def __str__(self):
        return f'{self.symptom}: {self.checkup.appointment.patient}'
class PatientLabTestRequest(models.Model):
    # Fields
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    metadata = JSONField(default=dict, null=True, blank=True)
    is_approved = models.BooleanField(default=True)

    # Relationship Fields
    lab_test = models.ForeignKey(LabTest,
                                 on_delete=models.CASCADE,
                                 related_name='tested_patients')
    checkup = models.ForeignKey('doctor_profiles.PatientCheckupRecord',
                                on_delete=models.CASCADE,
                                related_name='checkup_tests')
    requested_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                     on_delete=models.SET_NULL,
                                     null=True,
                                     related_name='labtests_requested')

    removed_by = models.ForeignKey('doctor_profiles.DoctorProfile',
                                   on_delete=models.SET_NULL,
                                   null=True,
                                   related_name='labtests_dismissed')

    objects = PatientLabTestRequestManager()

    class Meta:
        ordering = ('checkup', )
        unique_together = ('lab_test', 'checkup')

    def __str__(self):
        return f'{self.lab_test}: {self.checkup}'
Пример #30
0
class BadgeAssertion(models.Model):
    """
    Tracks badges on our side of the badge baking transaction
    """
    user = models.ForeignKey(User)
    course_id = CourseKeyField(max_length=255, blank=True, default=None)
    # Mode a badge was awarded for.
    mode = models.CharField(max_length=100)
    data = JSONField()

    @property
    def image_url(self):
        """
        Get the image for this assertion.
        """

        return self.data['image']

    @property
    def assertion_url(self):
        """
        Get the public URL for the assertion.
        """
        return self.data['json']['id']

    class Meta(object):
        """
        Meta information for Django's construction of the model.
        """
        unique_together = (('course_id', 'user', 'mode'),)
Пример #31
0
class Intent(models.Model):
    enabled = models.BooleanField(default=True)
    name = models.CharField(max_length=255, null=True)
    samples = JSONField(null=True)

    def __str__(self):
        return self.name
Пример #32
0
    def test_to_python(self):
        j_field = JSONField()

        self.assertEqual(
            loads('1'),
            j_field.to_python('1')
        )

        self.assertEqual(
            loads('"1"'),
            j_field.to_python('"1"')
        )

        self.assertEqual(
            loads('[{"a": 1}]'),
            j_field.to_python('[{"a": 1}]')
        )

        self.assertEqual(
            loads('[{"a": "1"}]'),
            j_field.to_python('[{"a": "1"}]')
        )
Пример #33
0
    def test_get_default(self):
        j_field = JSONField()
        value = j_field.get_default()
        self.assertEqual(value, {})
        self.assertIsInstance(value, JSONDict)

        j_field = JSONField(default={})
        value = j_field.get_default()
        self.assertEqual(value, {})
        self.assertIsInstance(value, JSONDict)

        j_field = JSONField(default='{}')
        value = j_field.get_default()
        self.assertEqual(value, {})
        self.assertIsInstance(value, JSONDict)

        j_field = JSONField(default=[{}])
        value = j_field.get_default()
        self.assertEqual(value, [{}])
        self.assertIsInstance(value, JSONList)

        j_field = JSONField(default='[{}]')
        value = j_field.get_default()
        self.assertEqual(value, [{}])
        self.assertIsInstance(value, JSONList)

        j_field = JSONField(default=lambda: '{}')
        value = j_field.get_default()
        self.assertEqual(value, {})
        self.assertIsInstance(value, JSONDict)