Skip to content

Commit

Permalink
- Defaulting uuids to uuid4
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Apr 6, 2022
1 parent 5267b8c commit 2ebc986
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 64 deletions.
4 changes: 2 additions & 2 deletions geonode/base/migrations/0068_auto_20220403_1334.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Generated by Django 2.2.24 on 2022-04-03 13:34

from django.db import migrations, models
import uuid
import geonode.base.models


class Migration(migrations.Migration):
Expand All @@ -14,6 +14,6 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='resourcebase',
name='uuid',
field=models.CharField(max_length=36, unique=True, default=str(uuid.uuid4)),
field=models.CharField(max_length=36, unique=True, default=geonode.base.models.ResourceBase.gen_uuid),
),
]
18 changes: 10 additions & 8 deletions geonode/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,10 @@
import re
import html
import math
import uuid
import shutil
import logging
import traceback

from uuid import uuid4
from django.db import models, transaction
from django.conf import settings
from django.utils.functional import cached_property
Expand Down Expand Up @@ -745,7 +744,11 @@ class ResourceBase(PolymorphicModel, PermissionLevelMixin, ItemBase):
extra_metadata_help_text = _(
'Additional metadata, must be in format [ {"metadata_key": "metadata_value"}, {"metadata_key": "metadata_value"} ]')
# internal fields
uuid = models.CharField(max_length=36, unique=True, default=str(uuid.uuid4))

def gen_uuid():
return str(uuid4())

uuid = models.CharField(max_length=36, unique=True, default=gen_uuid)
title = models.CharField(_('title'), max_length=255, help_text=_(
'name by which the cited resource is known'))
abstract = models.TextField(
Expand Down Expand Up @@ -1128,6 +1131,8 @@ def save(self, notify=False, *args, **kwargs):
recipients = get_notification_recipients(notice_type_label, resource=self)
send_notification(recipients, notice_type_label, {'resource': self})

# if not self.uuid or len(self.uuid) == 0 or callable(self.uuid):
# self.uuid = str(uuid4())
super().save(*args, **kwargs)

# Update workflow permissions
Expand Down Expand Up @@ -1648,10 +1653,10 @@ def get_thumbnail_url(self):
remote_thumbnails = self.link_set.filter(name='Remote Thumbnail')
if local_thumbnails.exists():
_thumbnail_url = add_url_params(
local_thumbnails[0].url, {'v': str(uuid.uuid4())[:8]})
local_thumbnails[0].url, {'v': str(uuid4())[:8]})
elif remote_thumbnails.exists():
_thumbnail_url = add_url_params(
remote_thumbnails[0].url, {'v': str(uuid.uuid4())[:8]})
remote_thumbnails[0].url, {'v': str(uuid4())[:8]})
return _thumbnail_url

def has_thumbnail(self):
Expand Down Expand Up @@ -2091,9 +2096,6 @@ def resourcebase_post_save(instance, *args, **kwargs):
if license and len(license) > 0:
instance.license = license[0]

if instance.uuid is None or instance.uuid == '':
instance.uuid = str(uuid.uuid4)

ResourceBase.objects.filter(id=instance.id).update(
thumbnail_url=instance.get_thumbnail_url(),
detail_url=instance.get_absolute_url(),
Expand Down
32 changes: 16 additions & 16 deletions geonode/base/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import requests

from PIL import Image
from uuid import uuid4
from io import BytesIO
from urllib.parse import urlparse
from unittest.mock import patch, Mock
Expand Down Expand Up @@ -81,7 +82,7 @@ class ThumbnailTests(GeoNodeBaseTestSupport):

def setUp(self):
super().setUp()
self.rb = ResourceBase.objects.create(owner=get_user_model().objects.get(username='admin'))
self.rb = ResourceBase.objects.create(uuid=str(uuid4()), owner=get_user_model().objects.get(username='admin'))

def tearDown(self):
super().tearDown()
Expand Down Expand Up @@ -142,7 +143,7 @@ class TestThumbnailUrl(GeoNodeBaseTestSupport):

def setUp(self):
super().setUp()
rb = ResourceBase.objects.create(owner=get_user_model().objects.get(username='admin'))
rb = ResourceBase.objects.create(uuid=str(uuid4()), owner=get_user_model().objects.get(username='admin'))
f = BytesIO(test_image.tobytes())
f.name = 'test_image.jpeg'
self.curated_thumbnail = CuratedThumbnail.objects.create(resource=rb, img=File(f))
Expand Down Expand Up @@ -670,11 +671,10 @@ def setUp(self):
User = get_user_model()
self.user = User.objects.create(username='test', email='[email protected]')
self.admin = User.objects.create(username='admin', email='[email protected]', is_superuser=True)
self.d = Document.objects.create(owner=self.user, title='test', is_approved=True)
self.la = Layer.objects.create(owner=self.user, title='test', is_approved=True)
self.s = Service.objects.create(owner=self.user, title='test', is_approved=True)
self.m = Map.objects.create(owner=self.user, title='test', is_approved=True, zoom=0, center_x=0.0,
center_y=0.0)
self.d = Document.objects.create(uuid=str(uuid4()), owner=self.user, title='test', is_approved=True)
self.la = Layer.objects.create(uuid=str(uuid4()), owner=self.user, title='test', is_approved=True)
self.s = Service.objects.create(uuid=str(uuid4()), owner=self.user, title='test', is_approved=True)
self.m = Map.objects.create(uuid=str(uuid4()), owner=self.user, title='test', is_approved=True, zoom=0, center_x=0.0, center_y=0.0)

def test_get_concrete_resource(self):
self.assertTrue(isinstance(
Expand Down Expand Up @@ -722,7 +722,7 @@ class TestGetVisibleResource(TestCase):
def setUp(self):
self.user = get_user_model().objects.create(username='mikel_arteta')
self.category = TopicCategory.objects.create(identifier='biota')
self.rb = ResourceBase.objects.create(category=self.category, owner=self.user)
self.rb = ResourceBase.objects.create(uuid=str(uuid4()), category=self.category, owner=self.user)

def test_category_data_not_shown_for_missing_resourcebase_permissions(self):
"""
Expand Down Expand Up @@ -917,29 +917,29 @@ class TestFacets(TestCase):
def setUp(self):
self.user = get_user_model().objects.create(username='test', email='[email protected]')
Layer.objects.create(
owner=self.user, title='test_boxes', abstract='nothing', storeType='dataStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_boxes', abstract='nothing', storeType='dataStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_1', abstract='contains boxes', storeType='dataStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_1', abstract='contains boxes', storeType='dataStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_2', purpose='contains boxes', storeType='dataStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_2', purpose='contains boxes', storeType='dataStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_3', storeType='dataStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_3', storeType='dataStore', is_approved=True
)

Layer.objects.create(
owner=self.user, title='test_boxes', abstract='nothing', storeType='coverageStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_boxes', abstract='nothing', storeType='coverageStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_1', abstract='contains boxes', storeType='coverageStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_1', abstract='contains boxes', storeType='coverageStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_2', purpose='contains boxes', storeType='coverageStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_2', purpose='contains boxes', storeType='coverageStore', is_approved=True
)
Layer.objects.create(
owner=self.user, title='test_boxes', storeType='coverageStore', is_approved=True
uuid=str(uuid4()), owner=self.user, title='test_boxes', storeType='coverageStore', is_approved=True
)

self.request_mock = Mock(spec=requests.Request, GET=Mock())
Expand Down
20 changes: 13 additions & 7 deletions geonode/documents/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io
import json
import gisdata
from uuid import uuid4
from django.urls import reverse
from django.conf import settings
from django.contrib.auth.models import Group
Expand Down Expand Up @@ -124,6 +125,7 @@ def test_create_document_with_no_rel(self):

superuser = get_user_model().objects.get(pk=2)
c = Document.objects.create(
uuid=str(uuid4()),
doc_file=f,
owner=superuser,
title='theimg')
Expand All @@ -140,6 +142,7 @@ def test_create_document_with_rel(self):
superuser = get_user_model().objects.get(pk=2)

c = Document.objects.create(
uuid=str(uuid4()),
doc_file=f,
owner=superuser,
title='theimg')
Expand All @@ -158,10 +161,11 @@ def test_create_document_url(self):
"""Tests creating an external document instead of a file."""

superuser = get_user_model().objects.get(pk=2)
c = Document.objects.create(doc_url="http://geonode.org/map.pdf",
owner=superuser,
title="GeoNode Map",
)
c = Document.objects.create(
uuid=str(uuid4()),
doc_url="http://geonode.org/map.pdf",
owner=superuser,
title="GeoNode Map")
doc = Document.objects.get(pk=c.id)
self.assertEqual(doc.title, "GeoNode Map")
self.assertEqual(doc.extension, "pdf")
Expand Down Expand Up @@ -364,6 +368,7 @@ def test_ajax_document_permissions(self):

superuser = get_user_model().objects.get(pk=2)
document = Document.objects.create(
uuid=str(uuid4()),
doc_file=f,
owner=superuser,
title='theimg')
Expand Down Expand Up @@ -650,6 +655,7 @@ def testDocumentsNotifications(self):
self.clear_notifications_queue()
self.client.login(username=self.user, password=self.passwd)
_d = Document.objects.create(
uuid=str(uuid4()),
title='test notifications',
owner=self.norman)
self.assertTrue(self.check_notification_out('document_created', self.u))
Expand Down Expand Up @@ -708,10 +714,10 @@ def test_create_document_with_links(self):
superuser = get_user_model().objects.get(pk=2)

d = Document.objects.create(
uuid=str(uuid4()),
doc_file=f,
owner=superuser,
title='theimg'
)
title='theimg')

self.assertEqual(Document.objects.get(pk=d.id).title, 'theimg')

Expand Down Expand Up @@ -784,7 +790,7 @@ def setUp(self):
'test_img_file.gif',
self.imgfile.read(),
'image/gif')
self.test_doc = Document.objects.create(doc_file=f, owner=self.not_admin, title='test', is_approved=True)
self.test_doc = Document.objects.create(uuid=str(uuid4()), doc_file=f, owner=self.not_admin, title='test', is_approved=True)
self.perm_spec = {"users": {"AnonymousUser": []}}
self.doc_link_url = reverse('document_link', args=(self.test_doc.pk,))

Expand Down
6 changes: 3 additions & 3 deletions geonode/favorite/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from geonode.tests.base import GeoNodeBaseTestSupport

import json

from uuid import uuid4
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse
Expand Down Expand Up @@ -62,10 +62,10 @@ def setUp(self):
self.adm_pw = "admin"
self.admin = get_user_model().objects.get(username="admin")
self.geoapp = GeoApp.objects.create(
uuid=str(uuid4()),
resource_type='geoapp',
name="test geoapp1",
owner=self.admin
)
owner=self.admin)

# tests of Favorite and FavoriteManager methods.
def test_favorite(self):
Expand Down
5 changes: 4 additions & 1 deletion geonode/geoapps/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################

import json
import logging

from uuid import uuid4
from django.contrib.auth import get_user_model
from dynamic_rest.fields.fields import DynamicRelationField
from dynamic_rest.serializers import DynamicModelSerializer
Expand Down Expand Up @@ -105,6 +106,8 @@ def extra_update_checks(self, validated_data):
raise ValidationError(f"The specified '{_key}' does not exist!")

def extra_create_checks(self, validated_data):
if 'uuid' not in validated_data:
validated_data['uuid'] = str(uuid4())
if 'name' not in validated_data or \
'owner' not in validated_data:
raise ValidationError("No valid data: 'name' and 'owner' are mandatory fields!")
Expand Down
7 changes: 4 additions & 3 deletions geonode/geoapps/api/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################

import json
import logging

from uuid import uuid4
from django.urls import reverse
from django.conf.urls import url
from django.contrib.auth import get_user_model
Expand Down Expand Up @@ -60,9 +61,9 @@ def setUp(self):
self.bobby = get_user_model().objects.get(username='bobby')
self.norman = get_user_model().objects.get(username='norman')
self.gep_app = GeoApp.objects.create(
uuid=str(uuid4()),
title="Test GeoApp",
owner=self.bobby
)
owner=self.bobby)
self.gep_app_data = GeoAppData.objects.create(
blob='{"test_data": {"test": ["test_1","test_2","test_3"]}}',
resource=self.gep_app
Expand Down
11 changes: 7 additions & 4 deletions geonode/geoapps/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################

from uuid import uuid4

from django.test import override_settings
from django.urls import reverse
from django.contrib.auth import get_user_model
Expand All @@ -30,20 +33,20 @@ class TestGeoAppViews(GeoNodeBaseTestSupport):
def setUp(self) -> None:
self.user = get_user_model().objects.get(username='admin')
self.geoapp = GeoApp.objects.create(
uuid=str(uuid4()),
name="name",
title="geoapp_titlte",
thumbnail_url='initial',
owner=self.user
)
owner=self.user)
self.sut = GeoAppForm

def test_update_geoapp_metadata(self):
bobby = get_user_model().objects.get(username='admin')
gep_app = GeoApp.objects.create(
uuid=str(uuid4()),
title="App",
thumbnail_url='initial',
owner=bobby
)
owner=bobby)
gep_app.set_default_permissions()
url = reverse('geoapp_metadata', args=(gep_app.id,))
data = {
Expand Down
Loading

0 comments on commit 2ebc986

Please sign in to comment.