Beispiel #1
0
class ForumPostIndex(CelerySearchIndex, Indexable):
    text = CharField(document=True, use_template=True)
    created = DateTimeField(model_attr='created')
    updated = DateTimeField(model_attr='updated', null=True)

    def get_model(self):
        return Post

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(on_moderation=False)
Beispiel #2
0
class NestedCommentIndex(CelerySearchIndex, Indexable):
    text = CharField(document=True, use_template=True)
    created = DateTimeField(model_attr='created')
    updated = DateTimeField(model_attr='updated')

    def get_model(self):
        return NestedComment

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(deleted=False,
                                               image__deleted=None)
Beispiel #3
0
class ForumTopicIndex(SearchIndex, Indexable):
    text = CharField(document=True, use_template=True)
    created = DateTimeField(model_attr='created')
    updated = DateTimeField(model_attr='updated', null=True)

    def get_model(self):
        return Topic

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(on_moderation=False,
                                               forum__hidden=False,
                                               forum__category__hidden=False)

    def get_updated_field(self):
        return "updated"
Beispiel #4
0
class DocumentoAcessorioIndex(CelerySearchIndex, Indexable):
    model = DocumentoAcessorio
    data = DateTimeField(model_attr='data', null=True)
    ano = IntegerField(model_attr='ano')

    text = TextExtractField(
        document=True, use_template=True,
        model_attr=(
            ('arquivo', 'file_extractor'),
            ('autor', 'string_extractor'),
            ('ementa', 'string_extractor'),
            ('indexacao', 'string_extractor'),
        )
    )

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.text.search_index = self

    def get_model(self):
        return self.model

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

    def get_updated_field(self):
        return 'data_ultima_atualizacao'
Beispiel #5
0
class DocumentoAdministrativoIndex(CelerySearchIndex, Indexable):
    model = DocumentoAdministrativo
    data = DateTimeField(model_attr='data', null=True)
    at = IntegerField(model_attr='workspace_id', null=True)
    ano = IntegerField(model_attr='ano', null=True)
    text = TextExtractField(document=True,
                            use_template=True,
                            model_attr=(
                                ('__str__', 'string_extractor'),
                                ('texto_integral', 'file_extractor'),
                                ('assunto', 'string_extractor'),
                                ('observacao', 'string_extractor'),
                            ))

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.text.search_index = self

    def get_model(self):
        return self.model

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

    def get_updated_field(self):
        return 'data_ultima_atualizacao'
Beispiel #6
0
class SessaoPlenariaIndex(CelerySearchIndex, Indexable):
    model = SessaoPlenaria
    data = DateTimeField(model_attr='data_inicio', null=True)
    ano = IntegerField(model_attr='ano')

    text = TextExtractField(document=True,
                            use_template=True,
                            model_attr=(
                                ('__str__', 'string_extractor'),
                                ('upload_pauta', 'file_extractor'),
                                ('upload_ata', 'file_extractor'),
                                ('upload_anexo', 'file_extractor'),
                            ))

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.text.search_index = self

    def get_model(self):
        return self.model

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

    def get_updated_field(self):
        return 'data_ultima_atualizacao'
Beispiel #7
0
class ProposalIndex(indexes.ModelSearchIndex, indexes.Indexable):
    text = CharField(document=True, use_template=True)
    active = BooleanField(model_attr='active')
    title = CharField(model_attr='title')
    community = IntegerField(model_attr='issue__community_id')
    status = IntegerField(model_attr='status')
    task_completed = BooleanField(model_attr='task_completed')
    type = IntegerField(model_attr='type')
    decided_at = DateTimeField()
    assignee = CharField()
    due_by = DateField(model_attr='due_by', null=True)
    is_confidential = BooleanField(model_attr='is_confidential')

    def get_model(self):
        return Proposal

    def prepare_assignee(self, obj):
        return u'' if not obj.assigned_to_user else \
                  obj.assigned_to_user.display_name

    def prepare_decided_at(self, obj):
        return obj.created_at if not obj.decided_at_meeting \
              else obj.decided_at_meeting.held_at

    # Note that regular ``SearchIndex`` methods apply.
    def index_queryset(self, using=None):
        "Used when the entire index for model is updated."
        return Proposal.objects.active()
Beispiel #8
0
class PostIndex(SearchIndex):
    text = CharField(document=True, model_attr='content', use_template=True)
    title = CharField(model_attr='title')
    slug = CharField(model_attr='slug')
    date_published = DateTimeField(model_attr='date_published')
    type = CharField(default='post')

    def get_queryset(self):
        return Post.objects.published()
Beispiel #9
0
class MateriaLegislativaIndex(DocumentoAcessorioIndex):
    model = MateriaLegislativa
    tipo = CharField(model_attr='tipo__sigla')
    ano = IntegerField(model_attr='ano')
    data = DateTimeField(model_attr='data_apresentacao')
    text = TextExtractField(document=True,
                            use_template=True,
                            model_attr=(
                                ('texto_original', 'file_extractor'),
                                ('texto_articulado', 'ta_extractor'),
                                ('ementa', 'string_extractor'),
                                ('indexacao', 'string_extractor'),
                                ('observacao', 'string_extractor'),
                            ))
Beispiel #10
0
class NormaJuridicaIndex(DocumentoAcessorioIndex):
    model = NormaJuridica
    data = DateTimeField(model_attr='data', null=True)
    tipo = CharField(model_attr='tipo__sigla')
    ano = IntegerField(model_attr='ano')
    text = TextExtractField(document=True,
                            use_template=True,
                            model_attr=(
                                ('texto_integral', 'file_extractor'),
                                ('texto_articulado', 'ta_extractor'),
                                ('ementa', 'string_extractor'),
                                ('indexacao', 'string_extractor'),
                                ('observacao', 'string_extractor'),
                            ))
class MultiDateTimeField(MultiValueField):

    convert_datetime = DateTimeField().convert

    field_type = 'datetime'

    def __init__(self, **kwargs):
        if kwargs.get('facet_class') is None:
            kwargs['facet_class'] = FacetMultiDateTimeField
        super(MultiDateTimeField, self).__init__(**kwargs)

    def convert(self, value):

        if value is None:
            return None

        return [self.convert_datetime(item) for item in value]
Beispiel #12
0
class DocumentoIndex(CelerySearchIndex, Indexable):
    model = Documento
    data = DateTimeField(model_attr='public_date')
    ano = IntegerField(model_attr='ano')

    text = SigadTextExtractField(document=True, use_template=True)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.text.search_index = self

    def get_model(self):
        return self.model

    def index_queryset(self, using=None):
        qs = self.get_model().objects.public_all_docs()
        return qs

    def get_updated_field(self):
        return 'modified'

    def should_update(self, instance):
        return instance.raiz is None
Beispiel #13
0
class ImageIndex(CelerySearchIndex, Indexable):
    text = CharField(document=True, use_template=True)

    title = CharField(model_attr='title')
    description = CharField(model_attr='description', null=True)
    published = DateTimeField(model_attr='published')
    uploaded = DateTimeField(model_attr='uploaded')
    imaging_telescopes = CharField()
    guiding_telescopes = CharField()
    mounts = CharField()
    imaging_cameras = CharField()
    guiding_cameras = CharField()
    pixel_scale = FloatField()
    field_radius = FloatField()
    countries = CharField()

    animated = BooleanField(model_attr='animated')

    likes = IntegerField()
    integration = FloatField()
    moon_phase = FloatField()
    first_acquisition_date = DateTimeField()
    last_acquisition_date = DateTimeField()
    views = IntegerField()

    solar_system_main_subject = IntegerField()

    is_deep_sky = BooleanField()
    is_solar_system = BooleanField()
    is_sun = BooleanField()
    is_moon = BooleanField()
    is_planets = BooleanField()
    is_comets = BooleanField()

    is_iotd = BooleanField()
    is_top_pick = BooleanField()

    license = IntegerField(model_attr='license')

    min_aperture = IntegerField()
    max_aperture = IntegerField()

    min_pixel_size = IntegerField()
    max_pixel_size = IntegerField()

    bookmarks = IntegerField()

    telescope_types = MultiValueField()
    camera_types = MultiValueField()

    comments = IntegerField()

    is_commercial = BooleanField()

    subject_type = IntegerField(model_attr='subject_type')

    acquisition_type = CharField(model_attr='acquisition_type')

    data_source = CharField(model_attr='data_source')

    remote_source = CharField(model_attr='remote_source', null=True)

    username = CharField(model_attr='user__username')

    objects_in_field = CharField()

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(moderator_decision=1).exclude(
            corrupted=True)

    def get_model(self):
        return Image

    def get_updated_field(self):
        return "updated"

    def prepare_imaging_telescopes(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.imaging_telescopes.all().values('make', 'name')
        ]

    def prepare_guiding_telescopes(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.guiding_telescopes.all().values('make', 'name')
        ]

    def prepare_mounts(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.mounts.all().values('make', 'name')
        ]

    def prepare_imaging_cameras(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.imaging_cameras.all().values('make', 'name')
        ]

    def prepare_guiding_cameras(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.guiding_cameras.all().values('make', 'name')
        ]

    def prepare_pixel_scale(self, obj):
        return obj.solution.pixscale if obj.solution else None

    def prepare_field_radius(self, obj):
        return obj.solution.radius if obj.solution else None

    def prepare_likes(self, obj):
        return _prepare_likes(obj)

    def prepare_integration(self, obj):
        return _get_integration(obj)

    def prepare_moon_phase(self, obj):
        return _prepare_moon_phase(obj)

    def prepare_first_acquisition_date(self, obj):
        return _prepare_first_acquisition_date(obj)

    def prepare_last_acquisition_date(self, obj):
        return _prepare_last_acquisition_date(obj)

    def prepare_views(self, obj):
        return _prepare_views(obj, 'image')

    def prepare_bookmarks(self, obj):
        return _prepare_bookmarks(obj)

    def prepare_telescope_types(self, obj):
        return _prepare_telescope_types(obj)

    def prepare_camera_types(self, obj):
        return _prepare_camera_types(obj)

    def prepare_comments(self, obj):
        return _prepare_comments(obj)

    def prepare_is_commercial(self, obj):
        commercial_gear = CommercialGear.objects.filter(image=obj)
        return commercial_gear.count() > 0

    def prepare_is_iotd(self, obj):
        return hasattr(obj, 'iotd')

    def prepare_is_top_pick(self, obj):
        return obj.iotdvote_set.count() > 0 and not hasattr(obj, 'iotd')

    def prepare_objects_in_field(self, obj):
        return obj.solution.objects_in_field.join(", ") \
            if obj.solution and obj.solution.objects_in_field \
            else None

    def prepare_countries(self, obj):
        return ' '.join([x.country for x in obj.locations.all() if x.country])
Beispiel #14
0
class TrapLocationIndex(indexes.SearchIndex, indexes.Indexable):
    text = CharField(document=True, use_template=True)

    species_id = CharField(faceted=True)

    habitat = CharField(faceted=True)
    school = CharField(faceted=True)
    observer_name = CharField(faceted=True)

    species_label = CharField(faceted=True)
    habitat_label = CharField(faceted=True)
    school_label = CharField(faceted=True)

    lat = CharField(faceted=True)
    lon = CharField(faceted=True)
    date = DateTimeField(faceted=True)
    trapped_and_released = BooleanField(faceted=True)
    observed = BooleanField(faceted=True)
    camera = BooleanField(faceted=True)
    tracks_and_signs = BooleanField(faceted=True)
    unsuccessful = BooleanField(faceted=True)
    real = BooleanField(faceted=True)

    asset_type = CharField(faceted=True)

    def get_model(self):
        return TrapLocation

    def prepare_species_id(self, obj):
        if obj.animal:
            return obj.animal.species.id
        else:
            return None

    def prepare_habitat(self, obj):
        if obj.habitat:
            return obj.habitat.id
        else:
            return None

    def prepare_school(self, obj):
        if obj.expedition.school:
            return obj.expedition.school.id
        else:
            return None

    def prepare_habitat_label(self, obj):
        if obj.habitat:
            return obj.habitat.label
        else:
            return None

    def prepare_species_label(self, obj):
        if obj.animal:
            return obj.animal.species.common_name
        else:
            return None

    def prepare_school_label(self, obj):
        if obj.expedition.school:
            return obj.expedition.school.name
        else:
            return None

    def prepare_date(self, obj):
        return obj.date_for_solr()

    def prepare_trapped_and_released(self, obj):
        if obj.animal:
            return True
        else:
            return False

    def prepare_unsuccessful(self, obj):
        if obj.animal:
            return False
        else:
            return True

    def prepare_real(self, obj):
        return obj.expedition.real

    def prepare_observer_name(self, obj):
        return obj.student_names

    # these are not sightings, so none of these three is applicable:
    def prepare_observed(self, obj):
        return None

    def prepare_camera(self, obj):
        return None

    def prepare_tracks_and_signs(self, obj):
        return None

    def prepare_lat(self, obj):
        return obj.actual_lat()

    def prepare_lon(self, obj):
        return obj.actual_lon()

    def prepare_asset_type(self, obj):
        return obj._meta.object_name
Beispiel #15
0
class SightingIndex(indexes.SearchIndex, indexes.Indexable):
    text = CharField(document=True, use_template=True)

    species_id = CharField(faceted=True)
    habitat = CharField(faceted=True)
    school = CharField(faceted=True)

    species_label = CharField(faceted=True)
    habitat_label = CharField(faceted=True)
    school_label = CharField(faceted=True)
    observer_name = CharField(faceted=True)

    date = DateTimeField(faceted=True)
    lat = CharField(faceted=True)
    lon = CharField(faceted=True)
    trapped_and_released = BooleanField(faceted=True)
    unsuccessful = BooleanField(faceted=True)
    observed = BooleanField(faceted=True)
    camera = BooleanField(faceted=True)
    tracks_and_signs = BooleanField(faceted=True)
    real = BooleanField(faceted=True)

    asset_type = CharField(faceted=True)

    def get_model(self):
        return Sighting

    def prepare_name(self, obj):
        return obj.__unicode__()

    def prepare_species_id(self, obj):
        if obj.species:
            return obj.species.id
        else:
            return None

    def prepare_habitat(self, obj):
        if obj.habitat:
            return obj.habitat.id
        else:
            return None

    def prepare_school(self, obj):
        return None

    def prepare_habitat_label(self, obj):
        if obj.habitat:
            return obj.habitat.label
        else:
            return None

    def prepare_species_label(self, obj):
        if obj.species:
            return obj.species.common_name
        else:
            return None

    def prepare_school_label(self, obj):
        return None

    def prepare_date(self, obj):
        return obj.date_for_solr()

    # these are not traps, so neither of these is applicable:
    def prepare_trapped_and_released(self, obj):
        return None

    def prepare_unsuccessful(self, obj):
        return None

    def prepare_real(self, obj):
        return True

    def prepare_observed(self, obj):
        if obj.observation_type and obj.observation_type.label in ['Sighting']:
            return True
        else:
            return False

    def prepare_camera(self, obj):
        if (obj.observation_type
                and obj.observation_type.label in ['Camera-trapped']):
            return True
        else:
            return False

    def prepare_tracks_and_signs(self, obj):
        if (obj.observation_type and obj.observation_type.label
                not in ['Sighting', 'Camera-trapped']):
            return True
        else:
            return False

    def prepare_asset_type(self, obj):
        return obj._meta.object_name

    def prepare_lat(self, obj):
        return obj.lat()

    def prepare_lon(self, obj):
        return obj.lon()

    def prepare_observer_name(self, obj):
        return "Black Rock Forest staff"
Beispiel #16
0
class ImageIndex(SearchIndex, Indexable):
    text = CharField(document=True, use_template=True)

    title = CharField(model_attr='title')
    description = CharField(model_attr='description', null=True)
    published = DateTimeField(model_attr='published')
    uploaded = DateTimeField(model_attr='uploaded')
    imaging_telescopes = CharField()
    guiding_telescopes = CharField()
    mounts = CharField()
    imaging_cameras = CharField()
    guiding_cameras = CharField()
    coord_ra_min = FloatField()
    coord_ra_max = FloatField()
    coord_dec_min = FloatField()
    coord_dec_max = FloatField()
    pixel_scale = FloatField()
    field_radius = FloatField()
    countries = CharField()

    animated = BooleanField(model_attr='animated')

    likes = IntegerField()
    integration = FloatField()
    moon_phase = FloatField()
    first_acquisition_date = DateTimeField()
    last_acquisition_date = DateTimeField()
    views = IntegerField()

    solar_system_main_subject_char = CharField(
        model_attr='solar_system_main_subject', null=True)

    is_deep_sky = BooleanField()
    is_solar_system = BooleanField()
    is_sun = BooleanField()
    is_moon = BooleanField()
    is_planets = BooleanField()
    is_comets = BooleanField()
    constellation = CharField()

    is_iotd = BooleanField()
    is_top_pick = BooleanField()
    is_top_pick_nomination = BooleanField()

    license = IntegerField()
    license_name = CharField()

    min_aperture = IntegerField()
    max_aperture = IntegerField()

    min_pixel_size = IntegerField()
    max_pixel_size = IntegerField()

    bookmarks = IntegerField()

    telescope_types = MultiValueField()
    camera_types = MultiValueField()

    comments = IntegerField()

    subject_type_char = CharField(model_attr='subject_type')

    acquisition_type = CharField(model_attr='acquisition_type')

    data_source = CharField(model_attr='data_source')

    remote_source = CharField(model_attr='remote_source', null=True)

    username = CharField(model_attr='user__username')

    objects_in_field = CharField()

    bortle_scale = FloatField()

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(moderator_decision=1).exclude(
            corrupted=True)

    def get_model(self):
        return Image

    def get_updated_field(self):
        return "updated"

    def prepare_imaging_telescopes(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.imaging_telescopes.all().values('make', 'name')
        ]

    def prepare_guiding_telescopes(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.guiding_telescopes.all().values('make', 'name')
        ]

    def prepare_mounts(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.mounts.all().values('make', 'name')
        ]

    def prepare_imaging_cameras(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.imaging_cameras.all().values('make', 'name')
        ]

    def prepare_guiding_cameras(self, obj):
        return [
            "%s, %s" % (x.get("make"), x.get("name"))
            for x in obj.guiding_cameras.all().values('make', 'name')
        ]

    def prepare_coord_ra_min(self, obj):
        if obj.solution is not None and obj.solution.ra is not None and obj.solution.radius is not None:
            return obj.solution.ra - obj.solution.radius
        return None

    def prepare_coord_ra_max(self, obj):
        if obj.solution is not None and obj.solution.ra is not None and obj.solution.radius is not None:
            return obj.solution.ra + obj.solution.radius
        return None

    def prepare_coord_dec_min(self, obj):
        if obj.solution is not None and obj.solution.dec is not None and obj.solution.radius is not None:
            return obj.solution.dec - obj.solution.radius
        return None

    def prepare_coord_dec_max(self, obj):
        if obj.solution is not None and obj.solution.dec is not None and obj.solution.radius is not None:
            return obj.solution.dec + obj.solution.radius
        return None

    def prepare_pixel_scale(self, obj):
        return obj.solution.pixscale if obj.solution else None

    def prepare_field_radius(self, obj):
        return obj.solution.radius if obj.solution else None

    def prepare_likes(self, obj):
        return _prepare_likes(obj)

    def prepare_integration(self, obj):
        return _prepare_integration(obj)

    def prepare_moon_phase(self, obj):
        return _prepare_moon_phase(obj)

    def prepare_first_acquisition_date(self, obj):
        return _prepare_first_acquisition_date(obj)

    def prepare_last_acquisition_date(self, obj):
        return _prepare_last_acquisition_date(obj)

    def prepare_views(self, obj):
        return _prepare_views(obj, 'image')

    def prepare_license(self, obj):
        return License.to_deprecated_integer(obj.license)

    def prepare_license_name(self, obj):
        return obj.license

    def prepare_bookmarks(self, obj):
        return _prepare_bookmarks(obj)

    def prepare_constellation(self, obj):
        constellation = ImageService.get_constellation(obj.solution)
        # Escape with __ because And (Andromeda) is not searchable, due to it being the same word as the AND operator.
        return "__%s__" % constellation.get(
            'abbreviation') if constellation else None

    def prepare_telescope_types(self, obj):
        return _prepare_telescope_types(obj)

    def prepare_camera_types(self, obj):
        return _prepare_camera_types(obj)

    def prepare_comments(self, obj):
        return _prepare_comments(obj)

    def prepare_is_iotd(self, obj):
        return IotdService().is_iotd(obj)

    def prepare_is_top_pick(self, obj):
        return IotdService().is_top_pick(
            obj) and not IotdService().is_iotd(obj)

    def prepare_is_top_pick_nomination(self, obj):
        return IotdService().is_top_pick_nomination(obj) and \
               not IotdService().is_top_pick(obj) and \
               not IotdService().is_iotd(obj)

    def prepare_objects_in_field(self, obj):
        return SolutionService(
            obj.solution).get_objects_in_field() if obj.solution else None

    def prepare_countries(self, obj):
        return ' '.join([x.country for x in obj.locations.all() if x.country])

    def prepare_bortle_scale(self, obj):
        deep_sky_acquisitions = DeepSky_Acquisition.objects.filter(
            image=obj, bortle__isnull=False)

        if deep_sky_acquisitions.exists():
            return sum([x.bortle for x in deep_sky_acquisitions]) / float(
                deep_sky_acquisitions.count())

        return None