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()
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'
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'
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'
class IssueIndex(indexes.ModelSearchIndex, indexes.Indexable): community = IntegerField(model_attr='community_id') is_confidential = BooleanField(model_attr='is_confidential') class Meta: model = Issue fields = ['title', 'abstract'] # Note that regular ``SearchIndex`` methods apply. def index_queryset(self, using=None): "Used when the entire index for model is updated." return Issue.objects.active()
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'), ))
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 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
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])
class UserIndex(CelerySearchIndex, Indexable): text = CharField(document=True, use_template=True) images_6m = IntegerField() images_1y = IntegerField() images = IntegerField() avg_integration = FloatField() # Total likes of all user's images. likes = IntegerField() # Total likes of all user's images. average_likes_6m = FloatField() average_likes_1y = FloatField() average_likes = FloatField() # Normalized likes (best images only) normalized_likes_6m = FloatField() normalized_likes_1y = FloatField() normalized_likes = FloatField() # Number of followers followers_6m = IntegerField() followers_1y = IntegerField() followers = IntegerField() # Total user ingegration. integration_6m = FloatField() integration_1y = FloatField() integration = FloatField() # Average moon phase under which this user has operated. moon_phase = FloatField() # Total views from all images. views = IntegerField() # Number of bookmarks on own images bookmarks = IntegerField() comments = IntegerField() comments_written = IntegerField() username = CharField(model_attr='username') def index_queryset(self, using=None): return self.get_model().objects.all() def get_model(self): return User def get_updated_field(self): return "userprofile__updated" def prepare_images_6m(self, obj): return Image.objects.filter(user=obj).filter( uploaded__gte=_6m_ago()).count() def prepare_images_1y(self, obj): return Image.objects.filter(user=obj).filter( uploaded__gte=_1y_ago()).count() def prepare_images(self, obj): return Image.objects.filter(user=obj).count() def prepare_avg_integration(self, obj): integration = 0 images = 0 for i in Image.objects.filter(user=obj): image_integration = _get_integration(i) if image_integration: images += 1 integration += image_integration return (integration / 3600.0) / images if images else 0 def prepare_likes(self, obj): likes = 0 for i in Image.objects.filter(user=obj): likes += ToggleProperty.objects.toggleproperties_for_object( "like", i).count() return likes def prepare_likes_6m(self, obj): likes = 0 for i in Image.objects.filter(user=obj, uploaded__gte=_6m_ago()): likes += ToggleProperty.objects.toggleproperties_for_object( "like", i).count() return likes def prepare_likes_1y(self, obj): likes = 0 for i in Image.objects.filter(user=obj, uploaded__gte=_1y_ago()): likes += ToggleProperty.objects.toggleproperties_for_object( "like", i).count() return likes def prepare_average_likes_6m(self, obj): likes = self.prepare_likes_6m(obj) images = Image.objects.filter(user=obj, uploaded__gte=_6m_ago()).count() return likes / float(images) if images > 0 else 0 def prepare_average_likes_1y(self, obj): likes = self.prepare_likes_1y(obj) images = Image.objects.filter(user=obj, uploaded__gte=_1y_ago()).count() return likes / float(images) if images > 0 else 0 def prepare_average_likes(self, obj): likes = self.prepare_likes(obj) images = self.prepare_images(obj) return likes / float(images) if images > 0 else 0 def prepare_normalized_likes_6m(self, obj): def average(values): if len(values): return sum(values) / float(len(values)) return 0 def index(values): import math return average(values) * math.log(len(values) + 1, 10) avg = self.prepare_average_likes_6m(obj) norm = [] for i in Image.objects.filter(user=obj).filter( uploaded__gte=_6m_ago()): likes = i.likes() if likes >= avg: norm.append(likes) if len(norm) == 0: return 0 return index(norm) def prepare_normalized_likes_1y(self, obj): def average(values): if len(values): return sum(values) / float(len(values)) return 0 def index(values): import math return average(values) * math.log(len(values) + 1, 10) avg = self.prepare_average_likes_1y(obj) norm = [] for i in Image.objects.filter(user=obj).filter( uploaded__gte=_1y_ago()): likes = i.likes() if likes >= avg: norm.append(likes) if len(norm) == 0: return 0 return index(norm) def prepare_normalized_likes(self, obj): def average(values): if len(values): return sum(values) / float(len(values)) return 0 def index(values): import math return average(values) * math.log(len(values) + 1, 10) avg = self.prepare_average_likes(obj) norm = [] for i in Image.objects.filter(user=obj): likes = i.likes() if likes >= avg: norm.append(likes) if len(norm) == 0: return 0 return index(norm) def prepare_followers_6m(self, obj): return ToggleProperty.objects.filter( property_type="follow", content_type=ContentType.objects.get_for_model(User), object_id=obj.pk).filter(created_on__gte=_6m_ago()).count() def prepare_followers_1y(self, obj): return ToggleProperty.objects.filter( property_type="follow", content_type=ContentType.objects.get_for_model(User), object_id=obj.pk).filter(created_on__gte=_1y_ago()).count() def prepare_followers(self, obj): return ToggleProperty.objects.filter( property_type="follow", content_type=ContentType.objects.get_for_model(User), object_id=obj.pk).count() def prepare_integration_6m(self, obj): integration = 0 for i in Image.objects.filter(user=obj, uploaded__gte=_6m_ago()): integration += _get_integration(i) return integration / 3600.0 def prepare_integration_1y(self, obj): integration = 0 for i in Image.objects.filter(user=obj, uploaded__gte=_1y_ago()): integration += _get_integration(i) return integration / 3600.0 def prepare_integration(self, obj): integration = 0 for i in Image.objects.filter(user=obj): integration += _get_integration(i) return integration / 3600.0 def prepare_moon_phase(self, obj): l = [] for i in Image.objects.filter(user=obj): l.append(_prepare_moon_phase(i)) if len(l) == 0: return 0 return reduce(lambda x, y: x + y, l) / len(l) def prepare_views(self, obj): views = 0 for i in Image.objects.filter(user=obj): views += _prepare_views(i, 'image') return views def prepare_bookmarks(self, obj): bookmarks = 0 for i in Image.objects.filter(user=obj): bookmarks += _prepare_bookmarks(i) return bookmarks def prepare_comments(self, obj): comments = 0 for i in Image.objects.filter(user=obj): comments += _prepare_comments(i) return comments def prepare_comments_written(self, obj): return NestedComment.objects.filter(author=obj, deleted=False).count()
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
class UserIndex(SearchIndex, Indexable): text = CharField(document=True, use_template=True) username = CharField(model_attr='username') exclude_from_competitions = BooleanField( model_attr='userprofile__exclude_from_competitions') avg_integration = FloatField() images = IntegerField() # Total likes of all user's images. likes = IntegerField() # Total likes given to images. likes_given = IntegerField() # Average likes of all user's images. average_likes = FloatField() # Normalized likes (Image Index) normalized_likes = FloatField() # Total likes received on comments. comment_likes_received = IntegerField() # Total likes received on forum posts. forum_post_likes_received = IntegerField() # Total number of likes on all "likeable" elements that can be associated to a user. total_likes_received = IntegerField() # User reputation based on text content # DEPRECATED: remove once contribution_index is populated reputation = FloatField() # Index based on text content contribution_index = FloatField() # Number of followers followers = IntegerField() # Total user integration. integration = FloatField() # Average moon phase under which this user has operated. moon_phase = FloatField() # Total views from all images. views = IntegerField() # Number of bookmarks on own images bookmarks = IntegerField() # Comments received on on own images comments = IntegerField() comments_written = IntegerField() forum_posts = IntegerField() top_pick_nominations = IntegerField() top_picks = IntegerField() iotds = IntegerField() def index_queryset(self, using=None): return self.get_model().objects.all() def get_model(self): return User def get_updated_field(self): return "userprofile__updated" def prepare_images(self, obj): logger.info('Updating UserIndex: %d' % obj.pk) return Image.objects.filter(user=obj).count() def prepare_avg_integration(self, obj): integration = 0 images = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_INTEGRATION_CACHE_KEY % i.pk) image_integration = cached if cached is not None else _prepare_integration( i) if image_integration: images += 1 integration += image_integration return (integration / 3600.0) / images if images else 0 def prepare_likes(self, obj): likes = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_LIKES_CACHE_KEY % i.pk) likes += cached if cached is not None else _prepare_likes(i) return likes def prepare_likes_given(self, obj): return ToggleProperty.objects.toggleproperties_for_model( 'like', Image, obj).count() def prepare_average_likes(self, obj): likes = self.prepared_data.get('likes') if likes is None: likes = self.prepare_likes(obj) images = self.prepared_data.get('images') if images is None: images = self.prepare_images(obj) return likes / float(images) if images > 0 else 0 def prepare_normalized_likes(self, obj): average = self.prepared_data.get('average_likes') if average is None: average = self.prepare_average_likes(obj) normalized = [] for i in Image.objects.filter(user=obj).iterator(): cached = cache.get(PREPARED_LIKES_CACHE_KEY % i.pk) likes = cached if cached is not None else i.likes() if likes >= average: normalized.append(likes) if len(normalized) == 0: result = 0 else: result = _astrobin_index(normalized) if obj.userprofile.astrobin_index_bonus is not None: result += obj.userprofile.astrobin_index_bonus return result def prepare_comment_likes_received(self, obj): comments = NestedComment.objects.filter(author=obj) likes = 0 for comment in comments.iterator(): likes += ToggleProperty.objects.toggleproperties_for_object( 'like', comment).count() return likes def prepare_forum_post_likes_received(self, obj): posts = Post.objects.filter(user=obj) likes = 0 for post in posts.iterator(): likes += ToggleProperty.objects.toggleproperties_for_object( 'like', post).count() return likes def prepare_total_likes_received(self, obj): likes = self.prepared_data.get('likes') if likes is None: likes = self.prepare_likes(obj) comment_likes_received = self.prepared_data.get( 'comment_likes_received') if comment_likes_received is None: comment_likes_received = self.prepare_comment_likes_received(obj) forum_post_likes_received = self.prepared_data.get( 'forum_post_likes_received') if forum_post_likes_received is None: forum_post_likes_received = self.prepare_forum_post_likes_received( obj) return likes + comment_likes_received + forum_post_likes_received # DEPRECATED: remove once contribution_index is populated def prepare_reputation(self, obj): comments_contribution_index = _prepare_comment_contribution_index( NestedComment.objects.filter(author=obj)) forum_post_contribution_index = _prepare_forum_post_contribution_index( Post.objects.filter(user=obj)) return comments_contribution_index + forum_post_contribution_index def prepare_contribution_index(self, obj): comments_contribution_index = _prepare_comment_contribution_index( NestedComment.objects.filter(author=obj)) forum_post_contribution_index = _prepare_forum_post_contribution_index( Post.objects.filter(user=obj)) return comments_contribution_index + forum_post_contribution_index def prepare_followers(self, obj): return ToggleProperty.objects.filter( property_type="follow", content_type=ContentType.objects.get_for_model(User), object_id=obj.pk).count() def prepare_integration(self, obj): integration = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_INTEGRATION_CACHE_KEY % i.pk) integration += cached if cached is not None else _prepare_integration( i) return integration / 3600.0 def prepare_moon_phase(self, obj): l = [] for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_MOON_PHASE_CACHE_KEY % i.pk) l.append(cached if cached is not None else _prepare_moon_phase(i)) if len(l) == 0: return 0 return reduce(lambda x, y: x + y, l) / len(l) def prepare_views(self, obj): views = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_VIEWS_CACHE_KEY % i.pk) views += cached if cached is not None else _prepare_views( i, 'image') return views def prepare_bookmarks(self, obj): bookmarks = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_BOOKMARKS_CACHE_KEY % i.pk) bookmarks += cached if cached is not None else _prepare_bookmarks( i) return bookmarks def prepare_comments(self, obj): comments = 0 for i in Image.objects.filter(user=obj): cached = cache.get(PREPARED_COMMENTS_CACHE_KEY % i.pk) comments += cached if cached is not None else _prepare_comments(i) return comments def prepare_comments_written(self, obj): return NestedComment.objects.filter(author=obj, deleted=False).count() def prepare_forum_posts(self, obj): return Post.objects.filter(user=obj).count() def prepare_top_pick_nominations(self, obj): return IotdService().get_top_pick_nominations().filter( image__user=obj).count() def prepare_top_picks(self, obj): return IotdService().get_top_picks().filter(image__user=obj).count() def prepare_iotds(self, obj): return IotdService().get_iotds().filter(image__user=obj).count()
class UserProfileIndex(SearchIndex, Indexable): profile_id = IntegerField(indexed=False, model_attr="id") # used for preparing url text = CharField(document=True) name = CharField(model_attr="get_full_name") course = FacetMultiValueField() branch = FacetMultiValueField() year_of_graduation = FacetMultiValueField() city = FacetCharField() state = FacetCharField() country = FacetCharField() higher_education_degree = FacetMultiValueField() higher_education_college = FacetMultiValueField() higher_education_college_synonyms = FacetMultiValueField() higher_education_college_groups = FacetMultiValueField() company = FacetMultiValueField() tags = FacetMultiValueField() def get_model(self): return UserProfile def index_queryset(self, using=None): """Used when the entire index for model is updated.""" return UserProfile.objects.all() def prepare_course(self, object): return [sc.branch.course.name for sc in object.studentsection_set.all() if sc.branch] def prepare_branch(self, object): return [sc.branch.name for sc in object.studentsection_set.all() if sc.branch] def prepare_year_of_graduation(self, object): return [sc.year_of_graduation for sc in object.studentsection_set.all()] def prepare_higher_education_degree(self, object): return [he.degree.name for he in object.highereducationdetail_set.all() if he.degree] def prepare_higher_education_college_synonyms(self, object): retval = [] for he in object.highereducationdetail_set.all(): if he.college: retval.extend([hes.value for hes in Synonym.objects.filter(parent_id=he.college.id, resourcetype=RT_COLLEGE, aliastype=SYNONYM)]) return retval def prepare_higher_education_college_groups(self, object): retval = [] for he in object.highereducationdetail_set.all(): if he.college: retval.extend([hes.value for hes in Synonym.objects.filter(parent_id=he.college.id, resourcetype=RT_COLLEGE, aliastype=GROUP)]) return retval def prepare_higher_education_college(self, object): return [he.college.name for he in object.highereducationdetail_set.all() if he.college] def prepare_company(self, object): return [ed.employer.name for ed in object.employmentdetail_set.all() if ed.employer] def prepare_tags(self, object): return [tag.name for tag in object.tags.all()] def prepare(self, obj): prepared_data = super(UserProfileIndex, self).prepare(obj) searchable_text = [] searchable_text.extend( [prepared_data['name'], prepared_data['city'], prepared_data['state'], prepared_data['country'], ]) searchable_text.extend([" ".join(prepared_data['course'])]) searchable_text.extend([" ".join(prepared_data['branch'])]) searchable_text.extend([" ".join([str(x) for x in prepared_data['year_of_graduation']])]) searchable_text.extend([" ".join(prepared_data['higher_education_degree'])]) searchable_text.extend([" ".join(prepared_data['higher_education_college'])]) searchable_text.extend([" ".join(prepared_data['higher_education_degree'])]) searchable_text.extend([" ".join(prepared_data['higher_education_college_synonyms'])]) searchable_text.extend([" ".join(prepared_data['higher_education_college_groups'])]) searchable_text.extend([" ".join(prepared_data['higher_education_college'])]) searchable_text.extend([" ".join(prepared_data['company'])]) searchable_text.extend([" ".join(prepared_data['tags'])]) prepared_data['text'] = "\n".join([x for x in searchable_text if x is not None]) print obj.id return prepared_data
def _get_dynamic_fields(self): fs = self._fields.copy() fs.update({'dynamic_field': IntegerField()}) return fs