Exemplo n.º 1
0
class Program(TimeStampedModel):
    """
    Program model.

    .. no_pii: This model has no PII.
    """

    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    uuid = models.UUIDField(verbose_name="UUID")
    title = models.CharField(max_length=255)
    # We store runs not courses, since not all runs of a course are in a program
    course_runs = SortedManyToManyField(CourseRun, related_name="programs")
    authoring_organizations = SortedManyToManyField(
        Organization, blank=True, related_name="authored_programs")
    type = models.CharField(max_length=32, blank=False, default="")
    type_slug = models.CharField(max_length=32, blank=False, default="")
    total_hours_of_effort = models.PositiveSmallIntegerField(null=True,
                                                             blank=True)

    ACTIVE = ProgramStatus.ACTIVE.value
    RETIRED = ProgramStatus.RETIRED.value
    DELETED = ProgramStatus.DELETED.value
    UNPUBLISHED = ProgramStatus.UNPUBLISHED.value  # Discovery does give us unpublished programs...
    status = models.CharField(max_length=24, blank=False, default="active")

    class Meta:
        unique_together = (("site", "uuid"), )

    def __str__(self):
        return f"{self.title} ({self.uuid.hex})"
class Migration(migrations.Migration):

    dependencies = [
        ('media', '0007_auto_20190701_1600'),
        ('ratings', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='movieratinguser',
            name='predictions',
            field=models.ManyToManyField(related_name='ordered_predictions',
                                         to='media.Movie'),
        ),
        AlterSortedManyToManyField(
            model_name='movieratinguser',
            name='predictions',
            field=SortedManyToManyField('media.Movie',
                                        related_name='ordered_predictions'),
        ),
        AlterSortedManyToManyField(
            model_name='movieratinguser',
            name='movieratingids',
            field=SortedManyToManyField('media.Movie'),
        ),
        AlterSortedManyToManyField(
            model_name='bookratinguser',
            name='bookratingids',
            field=SortedManyToManyField('media.Book'),
        ),
    ]
Exemplo n.º 3
0
class Program(TimeStampedModel):
    """
    Program model.

    .. no_pii: This model has no PII.
    """
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    uuid = models.UUIDField(verbose_name='UUID')
    title = models.CharField(max_length=255)
    # We store runs not courses, since not all runs of a course are in a program
    course_runs = SortedManyToManyField(CourseRun, related_name='programs')
    authoring_organizations = SortedManyToManyField(Organization, blank=True, related_name='authored_programs')
    type = models.CharField(max_length=32, blank=False, default='')
    type_slug = models.CharField(max_length=32, blank=False, default='')

    ACTIVE = 'active'
    RETIRED = 'retired'
    DELETED = 'deleted'
    UNPUBLISHED = 'unpublished'  # Discovery does give us unpublished programs...
    status = models.CharField(max_length=24, blank=False, default='active')

    class Meta:
        unique_together = (
            ('site', 'uuid'),
        )

    def __str__(self):
        return self.title
Exemplo n.º 4
0
class RelatedServicesPlugin(CMSPlugin):

    # NOTE: This one does NOT subclass NewsBlogCMSPlugin. This is because this
    # plugin can really only be placed on the article detail view in an apphook.
    cmsplugin_ptr = models.OneToOneField(
        CMSPlugin, on_delete=models.CASCADE, related_name='+', parent_link=True)

    title = models.CharField(max_length=255, blank=True, verbose_name=_('Title'))
    icon = Icon(blank=False, default='')
    image = FilerImageField(on_delete=models.SET_NULL, null=True, blank=True, related_name='+')
    count = models.PositiveSmallIntegerField(verbose_name=_('Number services'))
    layout = models.CharField(max_length=30, verbose_name=_('layout'))
    background_color = RGBColorField(verbose_name=_('Background Color'),
        blank=True, null=True)
    full_screen = models.BooleanField(_('Show full screen'), default=False)
    related_services = SortedManyToManyField('js_services.Service', verbose_name=_('related services'), blank=True, symmetrical=False)
    related_sections = SortedManyToManyField(ServicesConfig, verbose_name=_('related sections'), blank=True, symmetrical=False)
    related_people = SortedManyToManyField(Person, verbose_name=_('key people'), blank=True, symmetrical=False)
    related_categories = SortedManyToManyField('aldryn_categories.Category', verbose_name=_('related categories'), blank=True, symmetrical=False)

    def copy_relations(self, oldinstance):
        self.related_services.set(oldinstance.related_services.all())
        self.related_sections.set(oldinstance.related_sections.all())
        self.related_people.set(oldinstance.related_people.all())
        self.related_categories.set(oldinstance.related_categories.all())
        if IS_THERE_COMPANIES:
            self.related_companies.set(oldinstance.related_companies.all())

    def __str__(self):
        return str(self.pk)
Exemplo n.º 5
0
class GeneralProduct(models.Model):
    class Meta:
        verbose_name_plural = "Выбор продуктов для главной"
        verbose_name = "Выбор продуктов для главной"

    child = SortedManyToManyField("products.Product",
                                  blank=True,
                                  verbose_name="Детям",
                                  related_name="gen_child")
    adults = SortedManyToManyField("products.Product",
                                   blank=True,
                                   verbose_name="Взрослым",
                                   related_name="gen_adult")
    avitaminoz = SortedManyToManyField("products.Product",
                                       blank=True,
                                       verbose_name="Авитаминоз",
                                       related_name="gen_av")
    hurt = SortedManyToManyField("products.Product",
                                 blank=True,
                                 verbose_name="Сердце",
                                 related_name="gen_hurt")
    beaty = SortedManyToManyField("products.Product",
                                  blank=True,
                                  verbose_name="Красота",
                                  related_name="gen_beaty")

    def __str__(self):
        return "Выбор"

    def clean(self):
        if self._meta.model.objects.count() == 1 and not self.pk:
            raise ValidationError(
                "Может существовать только в одном экземпляре")
Exemplo n.º 6
0
class RelatedPeoplePlugin(CMSPlugin):

    # NOTE: This one does NOT subclass NewsBlogCMSPlugin. This is because this
    # plugin can really only be placed on the article detail view in an apphook.
    cmsplugin_ptr = models.OneToOneField(
        CMSPlugin, on_delete=models.CASCADE, related_name='+', parent_link=True)

    title = models.CharField(max_length=255, blank=True, verbose_name=_('Title'))
    icon = Icon(blank=False, default='')
    image = FilerImageField(on_delete=models.SET_NULL, null=True, blank=True, related_name="main_image")
    number_of_people = models.PositiveSmallIntegerField(verbose_name=_('Number of people'))
    layout = models.CharField(max_length=30, verbose_name=_('layout'))
    related_people = SortedManyToManyField(Person, verbose_name=_('key people'), blank=True, symmetrical=False)
    related_groups = SortedManyToManyField(Group, verbose_name=_('related groups'), blank=True, symmetrical=False)
    related_locations = SortedManyToManyField('js_locations.Location', verbose_name=_('related locations'), blank=True, symmetrical=False)
    related_categories = SortedManyToManyField('aldryn_categories.Category', verbose_name=_('related categories'), blank=True, symmetrical=False)
    related_services = SortedManyToManyField('js_services.Service', verbose_name=_('related services'), blank=True, symmetrical=False)
    more_button_is_shown = models.BooleanField(blank=True, default=False, verbose_name=_('Show “See More Button”'))
    more_button_text = models.CharField(max_length=255, blank=True, verbose_name=_('See More Button Text'))
    more_button_link = models.CharField(max_length=255, blank=True, verbose_name=_('See More Button Link'))

    def copy_relations(self, oldinstance):
        self.related_people.set(oldinstance.related_people.all())
        self.related_groups.set(oldinstance.related_groups.all())
        self.related_locations.set(oldinstance.related_locations.all())
        self.related_services.set(oldinstance.related_services.all())
        self.related_categories.set(oldinstance.related_categories.all())
        if IS_THERE_COMPANIES:
            self.related_companies.set(oldinstance.related_companies.all())

    def __str__(self):
        return text_type(self.pk)
Exemplo n.º 7
0
class Collection(BaseModel):
    display_name = models.CharField(max_length=255, blank=True, null=True,
                                    help_text="Public name for the collection")
    internal_name = models.CharField(max_length=255, blank=True, null=True,
                                     help_text="Internal name for the collection")
    created_by = models.CharField(max_length=255, blank=True, null=True)
    published = models.BooleanField(help_text="Whether or not this collection is currently active.")
    created_at = models.DateTimeField(editable=False)
    updated_at = models.DateTimeField()

    movies = SortedManyToManyField('Movie', sort_value_field_name='order', blank=True,
                                   through='CollectionMovie', related_name='collections')
    shows = SortedManyToManyField('Show', sort_value_field_name='order', related_name='collections',
                                  through='CollectionShow', blank=True)
    episodes = SortedManyToManyField('Episode', sort_value_field_name='order', related_name='collections',
                                     through='CollectionEpisode', blank=True)
    collections = SortedManyToManyField('Collection', sort_value_field_name='order', related_name='parents',
                                        through='CollectionChildren', blank=True)

    def __str__(self):
        return 'Collection: %s created_by: %s' % (self.display_name, self.created_by)

    class Meta:
        verbose_name = 'Collection'
        verbose_name_plural = 'Collections'
        managed = False
        db_table = 'collections'
Exemplo n.º 8
0
class NewsBlogJSRelatedPlugin(PluginEditModeMixin, AdjustableCacheModelMixin,
                              CMSPlugin):
    # NOTE: This one does NOT subclass NewsBlogCMSPlugin. This is because this
    # plugin can really only be placed on the article detail view in an apphook.
    cmsplugin_ptr = models.OneToOneField(CMSPlugin,
                                         related_name='+',
                                         parent_link=True)

    title = models.CharField(max_length=255,
                             blank=True,
                             verbose_name=_('Title'))
    icon = Icon(blank=False, default='fa-')
    image = FilerImageField(null=True, blank=True, related_name="title_image")
    number_of_articles = models.PositiveSmallIntegerField(
        verbose_name=_('Number of articles'),
        validators=[django.core.validators.MaxValueValidator(120)])
    layout = models.CharField(max_length=30, verbose_name=_('layout'))
    featured = models.BooleanField(blank=True, default=False)
    exclude_current_article = models.BooleanField(blank=True, default=False)
    related_types = SortedManyToManyField(NewsBlogConfig,
                                          verbose_name=_('related sections'),
                                          blank=True,
                                          symmetrical=False)
    related_categories = SortedManyToManyField(
        Category,
        verbose_name=_('related categories'),
        blank=True,
        symmetrical=False)
    related_services = SortedManyToManyField(
        'js_services.Service',
        verbose_name=_('related services'),
        blank=True,
        symmetrical=False)
    related_authors = SortedManyToManyField(Person,
                                            verbose_name=_('related authors'),
                                            blank=True,
                                            symmetrical=False)

    def copy_relations(self, oldinstance):
        self.related_types = oldinstance.related_types.all()
        self.related_categories = oldinstance.related_categories.all()
        self.related_services = oldinstance.related_services.all()
        self.related_authors = oldinstance.related_authors.all()

    # def get_articles(self, article, request):
    #     """
    #     Returns a queryset of articles that are related to the given article.
    #     """
    #     languages = get_valid_languages_from_request(
    #         article.app_config.namespace, request)
    #     if self.language not in languages:
    #         return Article.objects.none()
    #     qs = article.related.translated(*languages)
    #     if not self.get_edit_mode(request):
    #         qs = qs.published()
    #     return qs

    def __str__(self):
        return ugettext('Related articles')
Exemplo n.º 9
0
class Post(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    message = models.TextField()
    gallery = SortedManyToManyField(Photo, blank=True)
    quotation = SortedManyToManyField(Bible, blank=True)
    likes = SortedManyToManyField(Like, blank=True)
    comments = SortedManyToManyField(CommentBox, blank=True)
    created = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
Exemplo n.º 10
0
class SearchDefaultResultsConfiguration(models.Model):
    index_name = models.CharField(max_length=32, unique=True)
    programs = SortedManyToManyField(
        Program,
        blank=True,
        null=True,
        limit_choices_to={'status': ProgramStatus.Active})
    courses = SortedManyToManyField(Course,
                                    blank=True,
                                    null=True,
                                    limit_choices_to={'draft': 0})
Exemplo n.º 11
0
class Purchasable(UserOwnable, FranchiseOwnable):
    name = models.CharField(max_length=255)
    base_price = models.DecimalField(max_digits=19, decimal_places=10)

    image = models.ImageField(upload_to="images/thumbnail/", null=True)

    purchasable_options = SortedManyToManyField(PurchasableOption, blank=True)
    badges = SortedManyToManyField(Badge, blank=True)

    def __str__(self):
        return self.name
Exemplo n.º 12
0
class Gallery(models.Model):
    name = models.CharField(max_length=50)
    photos = SortedManyToManyField(Photo)
    photos2 = SortedManyToManyField(Photo, related_name='gallery2+')

    class Meta:
        verbose_name = _('Photo')
        verbose_name_plural = _('Photos')

    def __str__(self):
        return self.name
Exemplo n.º 13
0
class Session(models.Model):
    experiment = models.ForeignKey(Experiment)
    display_name = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)
    started_at = models.DateTimeField(blank=True)
    ended_at = models.DateTimeField(blank=True)
    participants = SortedManyToManyField(Participant)
    # this is the largest possible meaning space
    meaning_space = SortedManyToManyField(MeaningSpace)

    def __unicode__(self):
        return "{}({})".format(self.__class__.__name__, self.display_name)
Exemplo n.º 14
0
class Session(CMSPlugin):
    start_time = models.CharField(
        max_length=255,
        verbose_name=_('Start Time'),
    )
    end_time = models.CharField(
        max_length=255,
        verbose_name=_('End Time'),
    )
    title = models.CharField(
        max_length=255,
        verbose_name=_('Title'),
    )
    session_type = models.CharField(max_length=255,
                                    verbose_name=_('Type'),
                                    blank=True)
    description = HTMLField(verbose_name=_('Description'),
                            default='',
                            blank=True)
    speakers_list_title = models.CharField(
        max_length=255,
        blank=True,
        verbose_name=_('Speakers List Title Type 1'))
    speakers_list = SortedManyToManyField(
        'js_events.Speaker',
        verbose_name=_('Speakers Type 1'),
        blank=True,
        related_name='sessions',
    )
    speakers_list_title2 = models.CharField(
        max_length=255,
        blank=True,
        verbose_name=_('Speakers List Title Type 2'))
    speakers_list2 = SortedManyToManyField(
        'js_events.Speaker',
        verbose_name=_('Speakers Type 2'),
        blank=True,
        related_name='sessions2',
    )
    backgrond_color = RGBColorField(
        verbose_name=_('Backgrond color'),
        blank=True,
        null=True,
    )

    def __str__(self):
        return self.title or str(self.pk)

    def copy_relations(self, oldinstance):
        self.speakers_list = oldinstance.speakers_list.all()
        self.speakers_list2 = oldinstance.speakers_list2.all()
Exemplo n.º 15
0
class Product(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=255)
    subtitle = models.CharField(max_length=255, null=True, blank=True)
    thumbnail_url = models.URLField()
    purchase_url = models.URLField(null=True, blank=True)
    spec1_name = models.CharField(max_length=45)
    spec2_name = models.CharField(max_length=45, null=True, blank=True)
    spec1_options = models.CharField(max_length=255)
    spec2_options = models.CharField(max_length=255, null=True, blank=True)
    use_spec2 = models.BooleanField(default=False)
    spec_price = models.TextField(null=True, blank=True)
    body = models.TextField(null=True, blank=True)
    is_published = models.BooleanField(default=False)
    is_deleted = models.BooleanField(default=False)
    is_featured = models.BooleanField(default=False)
    view_count = models.IntegerField(default=0)
    low_price = models.PositiveIntegerField(default=100, db_index=True)
    high_price = models.PositiveIntegerField(default=100)
    create_time = models.DateTimeField(default=timezone.now)
    update_time = models.DateTimeField(db_index=True, auto_now=True)
    delete_time = models.DateTimeField(null=True)
    publish_time = models.DateTimeField(null=True)
    create_user = models.ForeignKey(User, related_name='create_user')
    update_user = models.ForeignKey(User, related_name='update_user')
    delete_user = models.ForeignKey(User,
                                    related_name='delete_user',
                                    null=True)
    publish_user = models.ForeignKey(User,
                                     related_name='publish_user',
                                     null=True)
    product_category = models.ForeignKey(ProductCategory)
    related = SortedManyToManyField('self', blank=True, symmetrical=False)
    images = SortedManyToManyField(Image, blank=True, symmetrical=False)

    def split_spec1_options(self):
        return self.spec1_options.split(',')

    def split_spec2_options(self):
        return self.spec2_options.split(',')

    def parse_spec_price(self):
        return json.loads(self.spec_price)

    def join_image_ids(self):
        return ','.join(map(str, self.images.values_list('id', flat=True)))

    def __unicode__(self):
        return u'%s' % (self.name)
Exemplo n.º 16
0
class Post(models.Model):
    class Meta:
        ordering = ['-id']
        verbose_name = "Статья"
        verbose_name_plural = "Статьи"

    image = models.ImageField(upload_to=get_image_path,
                              verbose_name="Картинка",
                              help_text="Выберете картинку")

    image_thumb = models.ImageField(
        upload_to=get_image_path,
        verbose_name="Миниатюра для важно знать",
        help_text="Выберете картинку",
    )

    date = models.DateField(default=timezone.now)
    products = SortedManyToManyField(Product, verbose_name="Продукты")
    posts = SortedManyToManyField(PostLink,
                                  verbose_name="Прикреплённые статьи")

    def image_tag(self):
        width = self.image.width if self.image.width <= 200 else 200
        print(self.image.path)
        return mark_safe(f'<img src={self.image.url} width="{width}px">')

    image_tag.short_description = 'Предпросмотр'

    def name(self):
        return self

    def __str__(self):
        return self.postbody_set.filter(language='ru')[0].name

    def save(self, *args, **kwargs):
        if self.pk is None:
            img = self.image
            img_thumb = self.image_thumb
            self.image = None
            self.image_thumb = None
            super(Post, self).save(*args, **kwargs)
            self.image = img
            self.image_thumb = img_thumb

            link = PostLink()
            link._post = self
            link.save()
        super(Post, self).save(*args, **kwargs)
Exemplo n.º 17
0
class Trip(models.Model):
  trip_name = models.CharField(max_length = 1000)
  pois = SortedManyToManyField(POI)
  #waypoint_id = models.IntegerField(default=0)
  
  def __unicode__(self):
    return self.trip_name
Exemplo n.º 18
0
class Program(TimeStampedModel):
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    uuid = models.UUIDField(verbose_name='UUID')
    title = models.CharField(max_length=255)
    # We store runs not courses, since not all runs of a course are in a program
    course_runs = SortedManyToManyField(CourseRun, related_name='programs')
    authoring_organizations = SortedManyToManyField(Organization, blank=True, related_name='authored_programs')
    type = models.CharField(max_length=32, blank=False, default='')

    class Meta:
        unique_together = (
            ('site', 'uuid'),
        )

    def __str__(self):
        return self.title
Exemplo n.º 19
0
class RelatedSpeakersPlugin(CMSPlugin):

    # NOTE: This one does NOT subclass NewsBlogCMSPlugin. This is because this
    # plugin can really only be placed on the article detail view in an apphook.
    cmsplugin_ptr = models.OneToOneField(CMSPlugin,
                                         on_delete=models.CASCADE,
                                         related_name='+',
                                         parent_link=True)

    title = models.CharField(max_length=255,
                             blank=True,
                             verbose_name=_('Title'))
    icon = Icon(blank=False, default='')
    image = FilerImageField(on_delete=models.SET_NULL,
                            null=True,
                            blank=True,
                            related_name="related_speakers")
    number_of_people = models.PositiveSmallIntegerField(
        verbose_name=_('Number of people'))
    layout = models.CharField(max_length=30,
                              verbose_name=_('layout'),
                              blank=True,
                              default='',
                              choices=[])
    speakers = SortedManyToManyField(Speaker,
                                     verbose_name=_('speakers'),
                                     blank=True,
                                     symmetrical=False)

    def copy_relations(self, oldinstance):
        self.speakers.set(oldinstance.speakers.all())

    def __str__(self):
        return get_template_title(RELATED_SPEAKERS_LAYOUTS, self.layout)
Exemplo n.º 20
0
class Ressource(models.Model):

    titre           = models.CharField(db_index=True, max_length=767)
    slug            = models.SlugField(unique=True, max_length=255, blank=True)
    texte           = models.TextField(db_index=True, blank=True)
    lien_texte      = models.CharField(max_length=767, blank=True)
    annee           = models.IntegerField(db_index=True, choices=ressource_year_choices)
    mois            = models.SlugField(max_length=30, blank=True, choices=ressource_mois_choices)
    lieu            = models.CharField(db_index=True, max_length=300, blank=True)
    page_deb        = models.IntegerField(null=True, blank=True, verbose_name='Page de début')
    page_fin        = models.IntegerField(null=True, blank=True, verbose_name='Page de fin')
    date_debut      = models.DateField(null=True, blank=True, verbose_name='Date de début')
    date_fin        = models.DateField(null=True, blank=True, verbose_name='Date de fin')
    editeur         = models.CharField(db_index=True, max_length=450, blank=True)
    formation       = models.CharField(db_index=True, max_length=300, blank=True)
    universite      = models.CharField(db_index=True, max_length=300, blank=True, verbose_name='Université')
    discipline      = models.CharField(db_index=True, max_length=300, blank=True)
    type_production = models.CharField(db_index=True, max_length=767, blank=True)
    type_rapport    = models.CharField(db_index=True, max_length=767, blank=True)
    revue           = models.ForeignKey(Revue, verbose_name= 'Nom de la revue attribuée', null=True, blank=True)
    tags            = models.ManyToManyField(Tag)
    #auteurs         = models.ManyToManyField(Auteur)
    auteurs         = SortedManyToManyField(Auteur)
    categories      = models.ManyToManyField(Categorie, verbose_name=u'Catégorie', null=True, blank=True)
    subcats         = models.ManyToManyField(SousCategorie, verbose_name=u'Sous-Catégorie', null=True, blank=True)

    def __unicode__(self): return self.titre

    class Meta:
        ordering = ['annee', 'titre']
Exemplo n.º 21
0
class D6(models.Model):
    customer = models.CharField(max_length=100)
    user = models.ForeignKey(User,
                             on_delete=models.CASCADE,
                             related_name='d6_user')
    day1 = SortedManyToManyField(Activities, related_name='d6_day1_activities')
    day2 = models.ManyToManyField(Activities,
                                  blank=True,
                                  related_name='d6_day2_activities')
    day3 = models.ManyToManyField(Activities,
                                  blank=True,
                                  related_name='d6_day3_activities')
    day4 = models.ManyToManyField(Activities,
                                  blank=True,
                                  related_name='d6_day4_activities')
    day5 = models.ManyToManyField(Activities,
                                  blank=True,
                                  related_name='d6_day5_activities')
    day6 = models.ManyToManyField(Activities,
                                  blank=True,
                                  related_name='d6_day6_activities')
    has_closed = models.BooleanField(blank=True, default=False)
    price = models.PositiveIntegerField(blank=True, default=0)

    def __str__(self):
        return f"{self.user}"
Exemplo n.º 22
0
class TextAnnotation(models.Model):
    kind = models.CharField(
        max_length=255,
        default=hookset.TEXT_ANNOTATION_DEFAULT_KIND,
        choices=hookset.TEXT_ANNOTATION_KIND_CHOICES,
    )
    data = JSONField(default=dict, blank=True)
    idx = models.IntegerField(help_text="0-based index")

    text_parts = SortedManyToManyField(
        "scaife_viewer_atlas.Node", related_name="text_annotations"
    )

    urn = models.CharField(max_length=255, blank=True, null=True)

    def resolve_references(self):
        if "references" not in self.data:
            print(f'No references found [urn="{self.urn}"]')
            return
        desired_urns = set(self.data["references"])
        reference_objs = list(Node.objects.filter(urn__in=desired_urns))
        resolved_urns = set([r.urn for r in reference_objs])
        delta_urns = desired_urns.symmetric_difference(resolved_urns)

        if delta_urns:
            print(
                f'Could not resolve all references, probably due to bad data in the CEX file [urn="{self.urn}" unresolved_urns="{",".join(delta_urns)}"]'
            )
        self.text_parts.set(reference_objs)
Exemplo n.º 23
0
class AchievementTaskSet(models.Model):
    """
    One Achievement is related to set of tasks.
    """
    slug = models.SlugField(
        primary_key=True,
        help_text=
        'Must be unique among all achievement task sets, serves as part of URL.<br />'
        'Must only contain characters "a-zA-Z0-9_-".')
    name = models.CharField(max_length=128)
    achievement = models.ForeignKey(Achievement, on_delete=models.CASCADE)
    tasks = SortedManyToManyField(Task)

    @receiver(post_save, sender=Review, weak=False)
    def handler(sender, **kwargs):
        review = kwargs['instance']
        user = review.submit.user
        for achievementTaskSet in AchievementTaskSet.objects.all():
            task_list = achievementTaskSet.tasks.all()
            solved_all = True
            for task in task_list:
                if not Review.objects.filter(
                        submit__user=user,
                        submit__receiver__in=task.submit_receivers.all(),
                        score=100).exists():
                    solved_all = False

            if solved_all:
                achievement = Achievement.objects.get(
                    slug=achievementTaskSet.slug)
                achievement.award_to(user)
Exemplo n.º 24
0
class DoItYourselfShelf(models.Model):
    books = SortedManyToManyField(
        Book,
        sort_value_field_name='diy_sort_number',
        related_name='diy_shelves',
        base_class=BaseBookThrough
    )
Exemplo n.º 25
0
class Pathway(TimeStampedModel):
    """
    Connects an organization and programs to a Pathway.

    Pathways can be credit pathways that represent channels where learners can
    send their records for credit, or professional pathways.

    .. no_pii: This model has no learner PII. The email address used here is the email address associated with the
    pathway itself (such as '*****@*****.**'), not with a learner.
    """
    pathway_type = models.CharField(
        max_length=32,
        choices=[(tag.value, tag.value) for tag in PathwayType],
        default=PathwayType.CREDIT.value,
    )
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    uuid = models.UUIDField(verbose_name='UUID')
    name = models.CharField(max_length=255)
    org_name = models.CharField(max_length=255)
    email = models.EmailField()
    programs = SortedManyToManyField(Program, related_name='pathways')

    class Meta:
        unique_together = (
            ('site', 'uuid'),
        )

    def __str__(self):
        return self.name
Exemplo n.º 26
0
class AchievementTaskSet(models.Model):
    """
    One Achievement is related to set of tasks.
    """

    slug = models.SlugField(
        primary_key=True,
        help_text=
        "Must be unique among all achievement task sets, serves as part of URL.<br />"
        'Must only contain characters "a-zA-Z0-9_-".',
    )
    name = models.CharField(max_length=128)
    achievement = models.ForeignKey(Achievement, on_delete=models.CASCADE)
    tasks = SortedManyToManyField(Task)

    @receiver(post_save, sender=Review, weak=False)
    def handler(sender, **kwargs):
        review = kwargs["instance"]
        user = review.submit.user
        task = review.submit.receiver.task
        for achievementTaskSet in AchievementTaskSet.objects.filter(
                tasks__in=[task]):
            task_list = achievementTaskSet.tasks.all()
            if (Review.objects.order_by(
                    "submit", "-time").distinct("submit").filter(
                        score=100,
                        submit__user=user,
                        submit__receiver__task__in=task_list,
                    ).values("submit__receiver__task").distinct().count() ==
                    len(task_list)):

                achievementTaskSet.achievement.users.add(user)
Exemplo n.º 27
0
class Persona(models.Model):
    opcionesSexo = (('H', 'Hombre'), ('M', 'Mujer'))

    nombre = models.CharField('Nombre', max_length=50)
    apellido1 = models.CharField('Primer apellido', max_length=50)
    apellido2 = models.CharField('Segudo apellido',
                                 max_length=50,
                                 null=True,
                                 blank=True)
    sexo = models.CharField('Sexo', max_length=5, choices=opcionesSexo)
    identificacion = models.CharField('Identificacion',
                                      max_length=50,
                                      unique=True)
    fecha = models.DateField('Fecha nacimiento')
    celular = models.CharField('Celular', max_length=30, null=True, blank=True)
    telefono = models.CharField('Telefono',
                                max_length=30,
                                null=True,
                                blank=True)
    correo = models.EmailField('Correo', unique=True)
    usuario = models.OneToOneField(User, on_delete=models.CASCADE)
    fotos = SortedManyToManyField('photologue.Photo',
                                  related_name='fotos',
                                  blank=True)

    #usuario = models.CharField('Usuario', max_length=50)
    #clave = models.CharField('Clave', max_length=50)
    #confirmacion = models.CharField('Confirmar clave', max_length=50)

    def nombreCompleto(self):
        return self.nombre + ' ' + self.apellido1 + ' ' + self.apellido2
Exemplo n.º 28
0
class Config(OrgMixin, TemplatesVpnMixin, AbstractConfig):
    """
    Concrete Config model
    """
    device = models.OneToOneField('config.Device', on_delete=models.CASCADE)
    templates = SortedManyToManyField(
        'config.Template',
        related_name='config_relations',
        verbose_name=_('templates'),
        base_class=TemplatesThrough,
        blank=True,
        help_text=_('configuration templates, applied from '
                    'first to last'))
    vpn = models.ManyToManyField('config.Vpn',
                                 through='config.VpnClient',
                                 related_name='vpn_relations',
                                 blank=True)

    class Meta(AbstractConfig.Meta):
        abstract = False

    def clean(self):
        if not hasattr(self, 'organization') and self._has_device():
            self.organization = self.device.organization
        super(Config, self).clean()
Exemplo n.º 29
0
class JobListPlugin(BaseJobsPlugin):
    """ Store job list for JobListPlugin. """
    jobopenings = SortedManyToManyField(
        JobOpening,
        blank=True,
        verbose_name=_('job openings'),
        help_text=_("Choose specific Job Openings to show or leave empty to "
                    "show latest. Note that Job Openings from different "
                    "app configs will not appear."))

    def get_job_openings(self, namespace):
        """
        Return the selected JobOpening for JobListPlugin.

        If no JobOpening are selected, return all active events for namespace
        and language, sorted by title.
        """
        if self.jobopenings.exists():
            return self.jobopenings.namespace(namespace).active()

        return (JobOpening.objects.namespace(namespace).language(
            self.language).active_translations(self.language).active())

    def __str__(self):
        return force_text(self.pk)

    def copy_relations(self, oldinstance):
        self.app_config = oldinstance.app_config
        self.jobopenings = oldinstance.jobopenings.all()
Exemplo n.º 30
0
class TextAlignment(models.Model):
    """
    Tracks an alignment between one or more texts.
    """

    label = models.CharField(blank=True, null=True, max_length=255)
    description = models.TextField(blank=True, null=True)

    # TODO: Formalize CITE data model for alignments
    urn = models.CharField(max_length=255, unique=True)

    """
    metadata contains author / attribution information
    """
    metadata = JSONField(default=dict, blank=True)

    """
    versions being sorted maps onto the "items" within a particular record
    """
    versions = SortedManyToManyField(
        "scaife_viewer_atlas.Node", related_name="text_alignments"
    )

    def __str__(self):
        return self.label