예제 #1
0
파일: models.py 프로젝트: e-ruiz/brasil.io
    def get_model(self, cache=True, data_table=None):
        # TODO: the current dynamic model registry is handled by Brasil.IO's
        # code but it needs to be delegated to dynamic_models.

        data_table = data_table or self.data_table
        db_table = data_table.db_table_name

        # TODO: limit the max number of items in DYNAMIC_MODEL_REGISTRY
        cache_key = (self.id, db_table)
        if cache and cache_key in DYNAMIC_MODEL_REGISTRY:
            return DYNAMIC_MODEL_REGISTRY[cache_key]

        # TODO: unregister the model in Django if already registered (cache_key
        # in DYNAMIC_MODEL_REGISTRY and not cache)
        fields = {field.name: field.field_class for field in self.fields}
        fields["search_data"] = SearchVectorField(null=True)
        ordering = self.ordering or []
        filtering = self.filtering or []
        search = self.search or []
        indexes = []
        # TODO: add has_choices fields also
        if ordering:
            indexes.append(
                django_indexes.Index(
                    name=make_index_name(db_table, "order", ordering),
                    fields=ordering,
                ))
        if filtering:
            for field_name in filtering:
                if ordering == [field_name]:
                    continue
                indexes.append(
                    django_indexes.Index(name=make_index_name(
                        db_table, "filter", [field_name]),
                                         fields=[field_name]))
        if search:
            indexes.append(
                pg_indexes.GinIndex(name=make_index_name(
                    db_table, "search", ["search_data"]),
                                    fields=["search_data"]))

        managers = self.get_dynamic_model_managers()
        mixins = self.get_dynamic_model_mixins()
        meta = {"ordering": ordering, "indexes": indexes, "db_table": db_table}

        Model = dynamic_models.create_model_class(
            name=self.model_name,
            module="core.models",
            fields=fields,
            mixins=mixins,
            meta=meta,
            managers=managers,
        )
        Model.extra = {
            "filtering": filtering,
            "ordering": ordering,
            "search": search,
        }
        DYNAMIC_MODEL_REGISTRY[cache_key] = Model
        return Model
예제 #2
0
 class Meta:
     indexes = (
         models.Index(fields=['created_at']),
         models.Index(fields=['updated_at']),
         models.Index(fields=['deleted_at']),
         pgindexes.GinIndex(fields=['text_search_vector']),
     )
예제 #3
0
 class Meta:
     unique_together = [
         ('namespace', 'repository', 'name', 'content_type')
     ]
     ordering = ['namespace', 'repository', 'name', 'content_type']
     indexes = [
         psql_indexes.GinIndex(fields=['search_vector'])
     ]
예제 #4
0
 class Meta:
     unique_together = (
         'namespace',
         'name',
     )
     indexes = [
         psql_indexes.GinIndex(fields=['search_vector'])
     ]
예제 #5
0
    class Meta:
        permissions = (('download_mediaitem',
                        'Can download media associated with a media item'), )

        indexes = (
            models.Index(fields=['created_at']),
            models.Index(fields=['updated_at']),
            models.Index(fields=['published_at']),
            models.Index(fields=['deleted_at']),
            pgindexes.GinIndex(fields=['text_search_vector']),
        )
예제 #6
0
class Migration(migrations.Migration):
    dependencies = [("proposal", "0026_event_importer")]

    operations = [
        operations.BtreeGinExtension(),
        migrations.AddField(model_name="Proposal",
                            name="case_numbers",
                            field=fields.ArrayField(
                                base_field=models.CharField(max_length=64),
                                default=[])),
        migrations.AddIndex(model_name="Proposal",
                            index=indexes.GinIndex(fields=["case_numbers"],
                                                   name="case_numbers_idx")),
        migrations.RunPython(set_case_numbers),
    ]
class Migration(migrations.Migration):
    dependencies = [
        ('main', '0082_apb_content_type'),
    ]

    operations = [
        migrations.AddField(
            model_name='content',
            name='search_vector',
            field=psql_search.SearchVectorField(default=''),
            preserve_default=False,
        ),
        migrations.AddIndex(
            model_name='content',
            index=psql_indexes.GinIndex(fields=['search_vector'],
                                        name='main_conten_search__47815a_gin'),
        ),
        migrations.RunSQL(sql=(SET_SEARCH_VECTOR,
                               CREATE_SEARCH_VECTOR_UPDATE_TRIGGER),
                          reverse_sql=DROP_SEARCH_VECTOR_UPDATE_TRIGGER),
    ]
예제 #8
0
    def get_model(self, cache=True):
        if cache and self.id in DYNAMIC_MODEL_REGISTRY:
            return DYNAMIC_MODEL_REGISTRY[self.id]

        # TODO: unregister the model in Django if already registered (self.id
        # in DYNAMIC_MODEL_REGISTRY and not cache)
        # TODO: may use Django's internal registry instead of
        # DYNAMIC_MODEL_REGISTRY
        name = self.dataset.slug + "-" + self.name.replace("_", "-")
        model_name = "".join([word.capitalize() for word in name.split("-")])
        fields = {field.name: field.field_class for field in self.fields}
        fields["search_data"] = SearchVectorField(null=True)
        ordering = self.ordering or []
        filtering = self.filtering or []
        search = self.search or []
        indexes = []
        # TODO: add has_choices fields also
        if ordering:
            indexes.append(
                django_indexes.Index(
                    name=make_index_name(name, "order", ordering),
                    fields=ordering,
                ))
        if filtering:
            for field_name in filtering:
                if ordering == [field_name]:
                    continue
                indexes.append(
                    django_indexes.Index(name=make_index_name(
                        name, "filter", [field_name]),
                                         fields=[field_name]))
        if search:
            indexes.append(
                pg_indexes.GinIndex(name=make_index_name(
                    name, "search", ["search_data"]),
                                    fields=["search_data"]))

        Options = type(
            "Meta",
            (object, ),
            {
                "ordering": ordering,
                "indexes": indexes,
                "db_table": self.db_table,
            },
        )
        Model = type(
            model_name,
            (
                DynamicModelMixin,
                models.Model,
            ),
            {
                "__module__": "core.models",
                "Meta": Options,
                "objects": DynamicModelQuerySet.as_manager(),
                **fields,
            },
        )
        Model.extra = {
            "filtering": filtering,
            "ordering": ordering,
            "search": search,
        }
        DYNAMIC_MODEL_REGISTRY[self.id] = Model
        return Model
예제 #9
0
    def get_model(self, cache=True):
        if cache and self.id in DYNAMIC_MODEL_REGISTRY:
            return DYNAMIC_MODEL_REGISTRY[self.id]

        # TODO: unregister the model in Django if already registered (self.id
        # in DYNAMIC_MODEL_REGISTRY and not cache)
        # TODO: may use Django's internal registry instead of
        # DYNAMIC_MODEL_REGISTRY
        name = self.dataset.slug + '-' + self.name.replace('_', '-')
        model_name = ''.join([word.capitalize() for word in name.split('-')])
        fields = {field.name: field.field_class for field in self.fields}
        fields['search_data'] = SearchVectorField(null=True)
        ordering = self.ordering or []
        filtering = self.filtering or []
        search = self.search or []
        indexes = []
        # TODO: add has_choices fields also
        if ordering:
            indexes.append(
                django_indexes.Index(
                    name=make_index_name(name, 'order', ordering),
                    fields=ordering,
                ))
        if filtering:
            for field_name in filtering:
                if ordering == [field_name]:
                    continue
                indexes.append(
                    django_indexes.Index(name=make_index_name(
                        name, 'filter', [field_name]),
                                         fields=[field_name]))
        if search:
            indexes.append(
                pg_indexes.GinIndex(name=make_index_name(
                    name, 'search', ['search_data']),
                                    fields=['search_data']))

        Options = type(
            'Meta',
            (object, ),
            {
                'ordering': ordering,
                'indexes': indexes,
                'db_table': self.db_table,
            },
        )
        Model = type(
            model_name,
            (
                DynamicModelMixin,
                models.Model,
            ),
            {
                '__module__': 'core.models',
                'Meta': Options,
                'objects': DynamicModelQuerySet.as_manager(),
                **fields,
            },
        )
        Model.extra = {
            'filtering': filtering,
            'ordering': ordering,
            'search': search,
        }
        DYNAMIC_MODEL_REGISTRY[self.id] = Model
        return Model
예제 #10
0
 class Meta:
     indexes = [
         indexes.GinIndex(fields=['data']),
     ]
예제 #11
0
 class Meta:
     indexes = [
         indexes.GinIndex(fields=["case_numbers"], name="case_numbers_idx")
     ]
예제 #12
0
 class Meta:
     unique_together = (('customer', 'slug'), )
     ordering = ['-id']
     indexes = [
         indexes.GinIndex(fields=['search_vector'], name='title_index')
     ]
예제 #13
0
    def get_model(self, cache=True, data_table=None):
        # TODO: the current dynamic model registry is handled by Brasil.IO's
        # code but it needs to be delegated to dynamic_models.

        data_table = data_table or self.data_table
        db_table = data_table.db_table_name

        # TODO: limit the max number of items in DYNAMIC_MODEL_REGISTRY
        cache_key = (self.id, db_table)
        if cache and cache_key in DYNAMIC_MODEL_REGISTRY:
            return DYNAMIC_MODEL_REGISTRY[cache_key]

        # TODO: unregister the model in Django if already registered (cache_key
        # in DYNAMIC_MODEL_REGISTRY and not cache)
        fields = {field.name: field.field_class for field in self.fields}
        fields["search_data"] = SearchVectorField(null=True)
        ordering = self.ordering or []
        filtering = self.filtering or []
        search = self.search or []
        indexes = []

        if ordering and ordering != ["id"]:
            indexes.append(
                django_indexes.Index(
                    name=make_index_name(db_table, "order", ordering),
                    fields=ordering,
                ))
        if filtering:
            for field_name in filtering:
                if ordering and field_name == ordering[0]:
                    # This index is not needed, since it's covered by compound
                    # index from `ordering`. More info at:
                    # <https://github.com/gregnavis/active_record_doctor#removing-extraneous-indexes>
                    continue
                indexes.append(
                    django_indexes.Index(name=make_index_name(
                        db_table, "filter", [field_name]),
                                         fields=[field_name]))
        if search:
            indexes.append(
                pg_indexes.GinIndex(name=make_index_name(
                    db_table, "search", ["search_data"]),
                                    fields=["search_data"]))

        managers = self.get_dynamic_model_managers()
        mixins = self.get_dynamic_model_mixins()
        meta = {"ordering": ordering, "indexes": indexes, "db_table": db_table}

        Model = dynamic_models.create_model_class(
            name=self.model_name,
            module="core.models",
            fields=fields,
            mixins=mixins,
            meta=meta,
            managers=managers,
        )
        Model.extra = {
            "filtering": filtering,
            "ordering": ordering,
            "search": search,
            "table": self,
        }
        DYNAMIC_MODEL_REGISTRY[cache_key] = Model
        return Model
예제 #14
0
class Migration(migrations.Migration):
    dependencies = [
        ('pulp_app', '0001_initial'),
        ('main', '0127_drop_categories'),
    ]

    operations = [
        migrations.CreateModel(
            name='Collection',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=64)),
                ('deprecated', models.BooleanField(default=False)),
                ('download_count', models.IntegerField(default=0.0)),
                ('community_score', models.FloatField(default=0.0)),
                ('quality_score', models.FloatField(default=0.0)),
                ('search_vector', psql_search.SearchVectorField(default='')),
                ('created', models.DateTimeField(auto_now_add=True)),
                ('modified', models.DateTimeField(auto_now=True)),
                ('namespace',
                 models.ForeignKey(on_delete=models.PROTECT,
                                   to='main.Namespace')),
                ('tags', models.ManyToManyField(to='main.Tag')),
            ],
        ),
        migrations.CreateModel(
            name='CollectionVersion',
            fields=[
                ('version', models.CharField(max_length=64)),
                ('hidden', models.BooleanField(default=False)),
                ('metadata', psql_fields.JSONField(default=dict)),
                ('contents', psql_fields.JSONField(default=dict)),
                ('created', models.DateTimeField(auto_now_add=True)),
                ('modified', models.DateTimeField(auto_now=True)),
                ('_parent_ref',
                 models.OneToOneField(db_column='id',
                                      on_delete=models.CASCADE,
                                      parent_link=True,
                                      primary_key=True,
                                      serialize=False,
                                      to='pulp_app.Content')),
                ('collection',
                 models.ForeignKey(on_delete=models.PROTECT,
                                   related_name='versions',
                                   to='main.Collection')),
            ],
            bases=('pulp_app.content', ),
        ),
        migrations.AlterUniqueTogether(
            name='collectionversion',
            unique_together={('collection', 'version')},
        ),
        migrations.AlterUniqueTogether(
            name='collection',
            unique_together={('namespace', 'name')},
        ),
        migrations.AddIndex(
            model_name='collection',
            index=psql_indexes.GinIndex(fields=['search_vector'],
                                        name='main_collec_search__7ca832_gin'),
        ),
        migrations.RunPython(code=create_galaxy_repository,
                             reverse_code=delete_galaxy_repository)
    ]
예제 #15
0
 class Meta:
     indexes = (postgres_indexes.GinIndex(fields=["word"],
                                          name='words_idx',
                                          fastupdate=False), )
예제 #16
0
 class Meta:
     indexes = (postgres_indexes.GinIndex(fields=["description"],
                                          name='decription_fts_gin_idx'), )