Skip to content

Commit cfe9ba8

Browse files
committed
[Fixes #13645] Multilang: update API output payload
1 parent 8fe1224 commit cfe9ba8

File tree

15 files changed

+176
-103
lines changed

15 files changed

+176
-103
lines changed

geonode/base/api/filters.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from geonode.base.models import ThesaurusKeyword
3434
from geonode.favorite.models import Favorite
3535
from geonode.indexing.models import ResourceIndex
36-
from geonode.metadata.multilang import get_2letters_languages, get_pg_language
36+
from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language
3737

3838
logger = logging.getLogger(__name__)
3939

@@ -183,3 +183,29 @@ def validate_lang(search_lang):
183183

184184
logger.debug(queryset.query)
185185
return queryset
186+
187+
188+
class AdvertisedFilter(BaseFilterBackend):
189+
def filter_queryset(self, request, queryset, view):
190+
# advertised
191+
# if superuser, all resources will be visible, otherwise only the advertised one and
192+
# the resource which the user is owner will be returned
193+
user = request.user
194+
try:
195+
_filter = request.query_params.get("advertised", "None")
196+
advertised = strtobool(_filter) if _filter.lower() != "all" else "all"
197+
except Exception:
198+
advertised = None
199+
200+
if advertised == "all":
201+
pass
202+
elif advertised is not None:
203+
queryset = queryset.filter(advertised=advertised)
204+
else:
205+
is_admin = user.is_superuser if user and user.is_authenticated else False
206+
if not is_admin and user and not user.is_anonymous:
207+
queryset = (queryset.filter(advertised=True) | queryset.filter(owner=user)).distinct()
208+
elif not user or user.is_anonymous:
209+
queryset = queryset.filter(advertised=True)
210+
211+
return queryset

geonode/base/api/mixins.py

Lines changed: 0 additions & 55 deletions
This file was deleted.

geonode/base/api/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from django.contrib.auth import get_user_model
3030
from django.db.models.query import QuerySet
3131
from geonode.assets.utils import get_default_asset, is_asset_deletable
32+
from geonode.metadata.multilang.serializers import MultiLangOutputMixin
3233
from geonode.people import Roles
3334
from django.http import QueryDict
3435
from deprecated import deprecated
@@ -597,7 +598,7 @@ def to_representation(self, instance):
597598
return ret
598599

599600

600-
class ResourceBaseSerializer(DynamicModelSerializer):
601+
class ResourceBaseSerializer(MultiLangOutputMixin, DynamicModelSerializer):
601602
pk = serializers.CharField(read_only=True)
602603
uuid = serializers.CharField(read_only=True)
603604
resource_type = serializers.CharField(required=False)

geonode/base/api/views.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import ast
2020
import functools
2121
import json
22+
import logging
2223
import re
2324
import os
2425

@@ -53,19 +54,29 @@
5354
from geonode.maps.models import Map
5455
from geonode.layers.models import Dataset
5556
from geonode.favorite.models import Favorite
56-
from geonode.base.models import Configuration, ExtraMetadata, LinkedResource
57+
from geonode.metadata.multilang.views import MultiLangViewMixin
5758
from geonode.thumbs.exceptions import ThumbnailError
5859
from geonode.thumbs.thumbnails import create_thumbnail
5960
from geonode.thumbs.utils import _decode_base64, BASE64_PATTERN, remove_thumb
6061
from geonode.groups.conf import settings as groups_settings
61-
from geonode.base.models import HierarchicalKeyword, Region, ResourceBase, TopicCategory, ThesaurusKeyword
62+
from geonode.base.models import (
63+
HierarchicalKeyword,
64+
Region,
65+
ResourceBase,
66+
TopicCategory,
67+
ThesaurusKeyword,
68+
Configuration,
69+
ExtraMetadata,
70+
LinkedResource,
71+
)
6272
from geonode.base.api.filters import (
6373
DynamicSearchFilter,
6474
ExtentFilter,
6575
FacetVisibleResourceFilter,
6676
FavoriteFilter,
6777
TKeywordsFilter,
6878
ResourceIndexFilter,
79+
AdvertisedFilter,
6980
)
7081
from geonode.groups.models import GroupProfile, Group
7182
from geonode.security.permissions import get_compact_perms_list, PermSpec
@@ -75,13 +86,10 @@
7586
get_user_visible_groups,
7687
)
7788
from geonode.security.registry import permissions_registry
78-
7989
from geonode.resource.models import ExecutionRequest
8090
from geonode.resource.api.tasks import resouce_service_dispatcher
8191
from geonode.resource.manager import resource_manager
8292

83-
84-
from geonode.base.api.mixins import AdvertisedListMixin
8593
from .permissions import (
8694
IsOwnerOrAdmin,
8795
IsManagerEditOrAdmin,
@@ -112,7 +120,6 @@
112120
from geonode.utils import get_supported_datasets_file_types
113121
from geonode.base.utils import patch_perms
114122

115-
import logging
116123

117124
logger = logging.getLogger(__name__)
118125

@@ -301,7 +308,7 @@ def replace_presets(self, request):
301308
request.GET._mutable = False
302309

303310

304-
class ResourceBaseViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin):
311+
class ResourceBaseViewSet(ApiPresetsInitializer, MultiLangViewMixin, DynamicModelViewSet):
305312
"""
306313
API endpoint that allows base resources to be viewed or edited.
307314
"""
@@ -310,6 +317,7 @@ class ResourceBaseViewSet(ApiPresetsInitializer, DynamicModelViewSet, Advertised
310317
filter_backends = [
311318
TKeywordsFilter,
312319
ResourceIndexFilter,
320+
AdvertisedFilter,
313321
DynamicFilterBackend,
314322
DynamicSortingFilter,
315323
DynamicSearchFilter,

geonode/documents/api/views.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,15 @@
2727
from geonode import settings
2828

2929
from geonode.assets.utils import create_asset_and_link
30-
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter
31-
from geonode.base.api.mixins import AdvertisedListMixin
30+
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter, AdvertisedFilter
3231
from geonode.base.api.pagination import GeoNodeApiPagination
3332
from geonode.base.api.permissions import UserHasPerms
33+
from geonode.base.api.serializers import ResourceBaseSerializer
3434
from geonode.base.api.views import base_linked_resources, ApiPresetsInitializer
3535
from geonode.base import enumerations
3636
from geonode.documents.api.exceptions import DocumentException
3737
from geonode.documents.models import Document
38-
39-
from geonode.base.api.serializers import ResourceBaseSerializer
38+
from geonode.metadata.multilang.views import MultiLangViewMixin
4039
from geonode.resource.utils import resourcebase_post_save
4140
from geonode.storage.manager import StorageManager
4241
from geonode.resource.manager import resource_manager
@@ -50,7 +49,7 @@
5049
logger = logging.getLogger(__name__)
5150

5251

53-
class DocumentViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin):
52+
class DocumentViewSet(ApiPresetsInitializer, MultiLangViewMixin, DynamicModelViewSet):
5453
"""
5554
API endpoint that allows documents to be viewed or edited.
5655
"""
@@ -64,6 +63,7 @@ class DocumentViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedList
6463
DynamicFilterBackend,
6564
DynamicSortingFilter,
6665
DynamicSearchFilter,
66+
AdvertisedFilter,
6767
ExtentFilter,
6868
DocumentPermissionsFilter,
6969
]

geonode/geoapps/api/views.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,24 @@
2121

2222
from rest_framework.permissions import IsAuthenticatedOrReadOnly
2323

24-
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter
25-
from geonode.base.api.mixins import AdvertisedListMixin
24+
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter, AdvertisedFilter
2625
from geonode.base.api.pagination import GeoNodeApiPagination
2726
from geonode.base.api.permissions import UserHasPerms
2827
from geonode.base.api.views import ApiPresetsInitializer
2928
from geonode.geoapps.models import GeoApp
29+
from geonode.metadata.multilang.views import MultiLangViewMixin
30+
3031

3132
from .serializers import GeoAppSerializer
3233
from .permissions import GeoAppPermissionsFilter
3334

3435
import logging
3536

37+
3638
logger = logging.getLogger(__name__)
3739

3840

39-
class GeoAppViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin):
41+
class GeoAppViewSet(ApiPresetsInitializer, MultiLangViewMixin, DynamicModelViewSet):
4042
"""
4143
API endpoint that allows geoapps to be viewed or edited.
4244
"""
@@ -50,6 +52,7 @@ class GeoAppViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMi
5052
DynamicFilterBackend,
5153
DynamicSortingFilter,
5254
DynamicSearchFilter,
55+
AdvertisedFilter,
5356
ExtentFilter,
5457
GeoAppPermissionsFilter,
5558
]

geonode/indexing/manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.conf import settings
55

66
from geonode.indexing.models import ResourceIndex
7-
import geonode.metadata.multilang as multi
7+
import geonode.metadata.multilang.utils as multi
88

99
logger = logging.getLogger(__name__)
1010

geonode/layers/api/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAuthenticated
2626
from rest_framework.response import Response
2727

28-
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter
29-
from geonode.base.api.mixins import AdvertisedListMixin
28+
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter, AdvertisedFilter
3029
from geonode.base.api.pagination import GeoNodeApiPagination
3130
from geonode.base.api.permissions import UserHasPerms
3231
from geonode.base.api.views import ApiPresetsInitializer
3332
from geonode.layers.api.exceptions import GeneralDatasetException, InvalidDatasetException, InvalidMetadataException
3433
from geonode.layers.metadata import parse_metadata
3534
from geonode.layers.models import Dataset
3635
from geonode.maps.api.serializers import SimpleMapLayerSerializer, SimpleMapSerializer
36+
from geonode.metadata.multilang.views import MultiLangViewMixin
3737
from geonode.resource.utils import update_resource
3838
from geonode.resource.manager import resource_manager
3939
from rest_framework.exceptions import NotFound
@@ -61,7 +61,7 @@
6161
logger = logging.getLogger(__name__)
6262

6363

64-
class DatasetViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin):
64+
class DatasetViewSet(ApiPresetsInitializer, MultiLangViewMixin, DynamicModelViewSet):
6565
"""
6666
API endpoint that allows layers to be viewed or edited.
6767
"""
@@ -75,6 +75,7 @@ class DatasetViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListM
7575
DynamicFilterBackend,
7676
DynamicSortingFilter,
7777
DynamicSearchFilter,
78+
AdvertisedFilter,
7879
ExtentFilter,
7980
DatasetPermissionsFilter,
8081
]

geonode/maps/api/views.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828
from rest_framework.response import Response
2929

3030
from geonode.base import register_event
31-
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter
32-
from geonode.base.api.mixins import AdvertisedListMixin
31+
from geonode.base.api.filters import DynamicSearchFilter, ExtentFilter, AdvertisedFilter
3332
from geonode.base.api.pagination import GeoNodeApiPagination
3433
from geonode.base.api.permissions import UserHasPerms
3534
from geonode.base.api.views import ApiPresetsInitializer
@@ -41,13 +40,14 @@
4140
from geonode.maps.contants import _PERMISSION_MSG_SAVE
4241
from geonode.maps.models import Map
4342
from geonode.maps.signals import map_changed_signal
43+
from geonode.metadata.multilang.views import MultiLangViewMixin
4444
from geonode.resource.manager import resource_manager
4545
from geonode.utils import resolve_object
4646

4747
logger = logging.getLogger(__name__)
4848

4949

50-
class MapViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin):
50+
class MapViewSet(ApiPresetsInitializer, MultiLangViewMixin, DynamicModelViewSet):
5151
"""
5252
API endpoint that allows maps to be viewed or edited.
5353
"""
@@ -61,6 +61,7 @@ class MapViewSet(ApiPresetsInitializer, DynamicModelViewSet, AdvertisedListMixin
6161
DynamicFilterBackend,
6262
DynamicSortingFilter,
6363
DynamicSearchFilter,
64+
AdvertisedFilter,
6465
ExtentFilter,
6566
MapPermissionsFilter,
6667
]

geonode/metadata/api/views.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from geonode.metadata.handlers.abstract import MetadataHandler
4040
from geonode.metadata.i18n import get_localized_label
4141
from geonode.metadata.manager import metadata_manager
42+
from geonode.metadata.multilang import utils as multi
4243
from geonode.people.utils import get_available_users
4344

4445
logger = logging.getLogger(__name__)
@@ -66,12 +67,7 @@ def list(self, request, *args, **kwargs):
6667
# A pk argument is set for futured multiple schemas
6768
@action(detail=False, methods=["get"], url_path=r"schema(?:/(?P<pk>\d+))?", url_name="schema")
6869
def schema(self, request, pk=None):
69-
"""
70-
The user is able to export her/his keys with
71-
resource scope.
72-
"""
73-
74-
lang = request.query_params.get("lang", get_language_from_request(request)[:2])
70+
lang = multi.get_language(request)
7571
schema = metadata_manager.get_schema(lang)
7672

7773
if schema:

0 commit comments

Comments
 (0)