Skip to content

Commit

Permalink
Merge pull request GeoNode#102 from travislbrundage/BEX-331-1.4.x
Browse files Browse the repository at this point in the history
Bex 331 1.4.x
  • Loading branch information
Amiram Rahav authored Dec 14, 2017
2 parents 9779aa2 + 67a3cf0 commit 42e4ab6
Show file tree
Hide file tree
Showing 7 changed files with 422 additions and 0 deletions.
103 changes: 103 additions & 0 deletions geonode/documents/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@
from geonode.maps.models import Map
from geonode.security.models import remove_object_permissions

from agon_ratings.models import OverallRating
from dialogos.models import Comment
from django.db.models import Avg

IMGTYPES = ['jpg', 'jpeg', 'tif', 'tiff', 'png', 'gif']

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -138,6 +142,105 @@ def _render_thumbnail(self):
def class_name(self):
return self.__class__.__name__

# elasticsearch_dsl indexing
def indexing(self):
if settings.ES_SEARCH:
from elasticsearch_app.search import DocumentIndex
obj = DocumentIndex(
meta={'id': self.id},
id=self.id,
abstract=self.abstract,
category__gn_description=self.prepare_category_gn_description(),
csw_type=self.csw_type,
csw_wkt_geometry=self.csw_wkt_geometry,
detail_url=self.get_absolute_url(),
owner__username=self.prepare_owner(),
popular_count=self.popular_count,
share_count=self.share_count,
rating=self.prepare_rating(),
srid=self.srid,
supplemental_information=self.prepare_supplemental_information(),
thumbnail_url=self.thumbnail_url,
uuid=self.uuid,
title=self.title,
date=self.date,
type=self.prepare_type(),
title_sortable=self.prepare_title_sortable(),
category=self.prepare_category(),
bbox_left=self.bbox_x0,
bbox_right=self.bbox_x1,
bbox_bottom=self.bbox_y0,
bbox_top=self.bbox_y1,
temporal_extent_start=self.temporal_extent_start,
temporal_extent_end=self.temporal_extent_end,
keywords=self.keyword_slug_list(),
regions=self.region_name_list(),
num_ratings=self.prepare_num_ratings(),
num_comments=self.prepare_num_comments(),
)
obj.save()
return obj.to_dict(include_meta=True)

# elasticsearch_dsl indexing helper functions
def prepare_type(self):
return "document"

def prepare_rating(self):
ct = ContentType.objects.get_for_model(self)
try:
rating = OverallRating.objects.filter(
object_id=self.pk,
content_type=ct
).aggregate(r=Avg("rating"))["r"]
return float(str(rating or "0"))
except OverallRating.DoesNotExist:
return 0.0

def prepare_title_sortable(self):
return self.title.lower()

def prepare_num_ratings(self):
ct = ContentType.objects.get_for_model(self)
try:
return OverallRating.objects.filter(
object_id=self.pk,
content_type=ct
).all().count()
except OverallRating.DoesNotExist:
return 0

def prepare_num_comments(self):
ct = ContentType.objects.get_for_model(self)
try:
return Comment.objects.filter(
object_id=self.pk,
content_type=ct
).all().count()
except:
return 0

def prepare_category(self):
if self.category:
return self.category.identifier
else:
return None

def prepare_category_gn_description(self):
if self.category:
return self.category.gn_description
else:
return None

def prepare_owner(self):
if self.owner:
return self.owner.username
else:
return None

def prepare_supplemental_information(self):
# For some reason this isn't a string
return str(self.supplemental_information)

class Meta(ResourceBase.Meta):
pass

Expand Down
40 changes: 40 additions & 0 deletions geonode/groups/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@

from taggit.managers import TaggableManager
from guardian.shortcuts import get_objects_for_group
import json
from agon_ratings.models import OverallRating
from dialogos.models import Comment
from django.contrib.contenttypes.models import ContentType
from django.db.models import Avg


class GroupProfile(models.Model):
Expand Down Expand Up @@ -199,6 +204,41 @@ def get_absolute_url(self):
def class_name(self):
return self.__class__.__name__

# elasticsearch_dsl indexing
def indexing(self):
if settings.ES_SEARCH:
from elasticsearchapp.search import GroupIndex
obj = GroupIndex(
meta={'id': self.id},
id=self.id,
title=self.title,
title_sortable=self.prepare_title_sortable(),
description=self.description,
json=self.prepare_json(),
type=self.prepare_type(),
)
obj.save()
return obj.to_dict(include_meta=True)

# elasticsearch_dsl indexing helper functions
def prepare_type(self):
return "group"

def prepare_title_sortable(self):
return self.title.lower()

def prepare_json(self):
data = {
"_type": self.prepare_type(),
"title": self.title,
"description": self.description,
"keywords": [keyword.name for keyword in self.keywords.all()] if self.keywords else [],
"thumb": settings.STATIC_URL + "static/img/contact.png",
"detail": None,
}

return json.dumps(data)


class GroupMember(models.Model):

Expand Down
144 changes: 144 additions & 0 deletions geonode/layers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
from geonode.utils import check_shp_columnnames
from geonode.security.models import remove_object_permissions

from dialogos.models import Comment
from django.db.models import Avg

logger = logging.getLogger("geonode.layers.models")

shp_exts = ['.shp', ]
Expand Down Expand Up @@ -278,6 +281,147 @@ def geogig_link(self):
return getattr(self.link_set.filter(name__icontains='clone in geogig').first(), 'url', None)
return None

# elasticsearch_dsl indexing
def indexing(self):
if settings.ES_SEARCH:
from elasticsearch_app.search import LayerIndex
obj = LayerIndex(
meta={'id': self.id},
id=self.id,
abstract=self.abstract,
category__gn_description=self.prepare_category_gn_description(),
csw_type=self.csw_type,
csw_wkt_geometry=self.csw_wkt_geometry,
detail_url=self.get_absolute_url(),
owner__username=self.prepare_owner(),
owner__first_name=self.prepare_owner_first(),
owner__last_name=self.prepare_owner_last(),
is_published=self.is_published,
featured=self.featured,
popular_count=self.popular_count,
share_count=self.share_count,
rating=self.prepare_rating(),
srid=self.srid,
supplemental_information=self.prepare_supplemental_information(),
thumbnail_url=self.thumbnail_url,
uuid=self.uuid,
title=self.title,
date=self.date,
type=self.prepare_type(),
subtype=self.prepare_subtype(),
typename=self.typename,
title_sortable=self.prepare_title_sortable(),
category=self.prepare_category(),
bbox_left=self.bbox_x0,
bbox_right=self.bbox_x1,
bbox_bottom=self.bbox_y0,
bbox_top=self.bbox_y1,
temporal_extent_start=self.temporal_extent_start,
temporal_extent_end=self.temporal_extent_end,
keywords=self.keyword_slug_list(),
regions=self.region_name_list(),
num_ratings=self.prepare_num_ratings(),
num_comments=self.prepare_num_comments(),
geogig_link=self.geogig_link,
has_time=self.prepare_has_time()
)
obj.save()
return obj.to_dict(include_meta=True)

# elasticsearch_dsl indexing helper functions
def prepare_type(self):
return "layer"

def prepare_subtype(self):
if self.storeType == "dataStore":
return "vector"
elif self.storeType == "coverageStore":
return "raster"
elif self.storeType == "remoteStore":
return "remote"
else:
return None

def prepare_rating(self):
ct = ContentType.objects.get_for_model(self)
try:
rating = OverallRating.objects.filter(
object_id=self.pk,
content_type=ct
).aggregate(r=Avg("rating"))["r"]
return float(str(rating or "0"))
except OverallRating.DoesNotExist:
return 0.0

def prepare_num_ratings(self):
ct = ContentType.objects.get_for_model(self)
try:
return OverallRating.objects.filter(
object_id=self.pk,
content_type=ct
).all().count()
except OverallRating.DoesNotExist:
return 0

def prepare_num_comments(self):
ct = ContentType.objects.get_for_model(self)
try:
return Comment.objects.filter(
object_id=self.pk,
content_type=ct
).all().count()
except:
return 0

def prepare_title_sortable(self):
return self.title.lower()

# Check to see if either time extent is set on the object,
# if so, then it is time enabled.
def prepare_has_time(self):
try:
# if either time field is set to a value then time is enabled.
if (self.temporal_extent_start is not None or
self.temporal_extent_end is not None):
return True
except:
# when in doubt, it's false.
return False

def prepare_category(self):
if self.category:
return self.category.identifier
else:
return None

def prepare_category_gn_description(self):
if self.category:
return self.category.gn_description
else:
return None

def prepare_supplemental_information(self):
# For some reason this isn't a string
return str(self.supplemental_information)

def prepare_owner(self):
if self.owner:
return self.owner.username
else:
return None

def prepare_owner_first(self):
if self.owner.first_name:
return self.owner.first_name
else:
return None

def prepare_owner_last(self):
if self.owner.last_name:
return self.owner.last_name
else:
return None


class UploadSession(models.Model):

Expand Down
Loading

0 comments on commit 42e4ab6

Please sign in to comment.