Skip to content

Commit

Permalink
- Returns referencing infos on Layers Upload
Browse files Browse the repository at this point in the history
 - Returns referencing infos on Layers Upload

 - Returns referencing infos on Layers Upload

 - Returns referencing infos on Layers Upload
  • Loading branch information
Alessio Fabiani committed Sep 4, 2017
1 parent c140c77 commit b3f9389
Show file tree
Hide file tree
Showing 20 changed files with 1,358 additions and 637 deletions.
7 changes: 7 additions & 0 deletions flake8.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Check formatting with

flake8 --config=setup.cfg

# Auto-fix formatting with

autopep8 --global-config setup.cfg -i -a -a [files [files ...]]
62 changes: 37 additions & 25 deletions geonode/api/resourcebase_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ class CommonModelApi(ModelResource):
null=True,
full=True)
owner = fields.ToOneField(OwnersResource, 'owner', full=True)
tkeywords = fields.ToManyField(ThesaurusKeywordResource, 'tkeywords', null=True)
tkeywords = fields.ToManyField(
ThesaurusKeywordResource, 'tkeywords', null=True)
VALUES = [
# fields in the db
'id',
Expand Down Expand Up @@ -186,21 +187,23 @@ def filter_group(self, queryset, request):

try:
anonymous_group = Group.objects.get(name='anonymous')
except:
except BaseException:
anonymous_group = None

if is_admin:
filtered = queryset
elif request.user:
groups = request.user.groups.all()
if anonymous_group:
filtered = queryset.filter(
Q(group__isnull=True) | Q(group__in=groups) | Q(group=anonymous_group))
filtered = queryset.filter(Q(group__isnull=True) | Q(
group__in=groups) | Q(group=anonymous_group))
else:
filtered = queryset.filter(Q(group__isnull=True) | Q(group__in=groups))
filtered = queryset.filter(
Q(group__isnull=True) | Q(group__in=groups))
else:
if anonymous_group:
filtered = queryset.filter(Q(group__isnull=True) | Q(group=anonymous_group))
filtered = queryset.filter(
Q(group__isnull=True) | Q(group=anonymous_group))
else:
filtered = queryset.filter(Q(group__isnull=True))
return filtered
Expand Down Expand Up @@ -432,7 +435,8 @@ def get_search(self, request, **kwargs):
is_staff = request.user.is_staff if request.user else False

# Get the list of objects the user has access to
filter_set = get_objects_for_user(request.user, 'base.view_resourcebase')
filter_set = get_objects_for_user(
request.user, 'base.view_resourcebase')
if settings.ADMIN_MODERATE_UPLOADS:
if not is_admin and not is_staff:
filter_set = filter_set.filter(is_published=True)
Expand All @@ -442,7 +446,7 @@ def get_search(self, request, **kwargs):

try:
anonymous_group = Group.objects.get(name='anonymous')
except:
except BaseException:
anonymous_group = None

if settings.GROUP_PRIVATE_RESOURCES:
Expand All @@ -451,22 +455,24 @@ def get_search(self, request, **kwargs):
elif request.user:
groups = request.user.groups.all()
if anonymous_group:
filter_set = filter_set.filter(
Q(group__isnull=True) | Q(group__in=groups) | Q(group=anonymous_group))
filter_set = filter_set.filter(Q(group__isnull=True) | Q(
group__in=groups) | Q(group=anonymous_group))
else:
filter_set = filter_set.filter(Q(group__isnull=True) | Q(group__in=groups))
filter_set = filter_set.filter(
Q(group__isnull=True) | Q(group__in=groups))
else:
if anonymous_group:
filter_set = filter_set.filter(Q(group__isnull=True) | Q(group=anonymous_group))
filter_set = filter_set.filter(
Q(group__isnull=True) | Q(group=anonymous_group))
else:
filter_set = filter_set.filter(Q(group__isnull=True))

filter_set_ids = filter_set.values_list('id')
# Do the query using the filterset and the query term. Facet the
# results
if len(filter_set) > 0:
sqs = sqs.filter(id__in=filter_set_ids).facet('type').facet('subtype').facet('owner')\
.facet('keywords').facet('regions').facet('category')
sqs = sqs.filter(id__in=filter_set_ids).facet('type').facet('subtype').facet(
'owner') .facet('keywords').facet('regions').facet('category')
else:
sqs = None
else:
Expand Down Expand Up @@ -509,23 +515,24 @@ def get_search(self, request, **kwargs):
objects = []

object_list = {
"meta": {
"meta": {
"limit": settings.API_LIMIT_PER_PAGE,
"next": next_page,
"offset": int(getattr(request.GET, 'offset', 0)),
"previous": previous_page,
"total_count": total_count,
"facets": facets,
},
"objects": map(lambda x: self.get_haystack_api_fields(x), objects),
"objects": map(lambda x: self.get_haystack_api_fields(x), objects),
}

self.log_throttled_access(request)
return self.create_response(request, object_list)

def get_haystack_api_fields(self, haystack_object):
object_fields = dict((k, v) for k, v in haystack_object.get_stored_fields().items()
if not re.search('_exact$|_sortable$', k))
object_fields = dict(
(k, v) for k, v in haystack_object.get_stored_fields().items() if not re.search(
'_exact$|_sortable$', k))
return object_fields

def get_list(self, request, **kwargs):
Expand Down Expand Up @@ -558,7 +565,8 @@ def get_list(self, request, **kwargs):
request,
to_be_serialized)

return self.create_response(request, to_be_serialized, response_objects=objects)
return self.create_response(
request, to_be_serialized, response_objects=objects)

def format_objects(self, objects):
"""
Expand All @@ -579,20 +587,24 @@ def create_response(
Mostly a useful shortcut/hook.
"""

# If an user does not have at least view permissions, he won't be able to see the resource at all.
# If an user does not have at least view permissions, he won't be able
# to see the resource at all.
filtered_objects_ids = None
if response_objects:
filtered_objects_ids = [item.id for item in response_objects if
request.user.has_perm('view_resourcebase', item.get_self_resource())]
filtered_objects_ids = [
item.id for item in response_objects if request.user.has_perm(
'view_resourcebase', item.get_self_resource())]

if isinstance(
data,
dict) and 'objects' in data and not isinstance(
data['objects'],
list):
if filtered_objects_ids:
data['objects'] = [x for x in list(self.format_objects(data['objects']))
if x['id'] in filtered_objects_ids]
data['objects'] = [
x for x in list(
self.format_objects(
data['objects'])) if x['id'] in filtered_objects_ids]
else:
data['objects'] = list(self.format_objects(data['objects']))

Expand All @@ -609,7 +621,7 @@ def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/search%s$" % (
self._meta.resource_name, trailing_slash()
),
),
self.wrap_view('get_search'), name="api_get_search"),
]
else:
Expand Down
Loading

0 comments on commit b3f9389

Please sign in to comment.