udata 7.0.6.dev28248__py2.py3-none-any.whl → 7.0.6.dev28263__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

@@ -37,7 +37,7 @@ activity_fields = api.model('Activity', {
37
37
  description='The key of the activity', required=True),
38
38
  'icon': fields.String(
39
39
  description='The icon of the activity', required=True),
40
- 'kwargs': fields.Raw(description='Some action specific context'),
40
+ 'extras': fields.Raw(description='Extras attributes as key-value pairs'),
41
41
  })
42
42
 
43
43
  activity_page_fields = api.model('ActivityPage', fields.pager(activity_fields))
@@ -37,7 +37,7 @@ class Activity(db.Document, metaclass=EmitNewActivityMetaClass):
37
37
  related_to = db.ReferenceField(db.DomainModel, required=True)
38
38
  created_at = db.DateTimeField(default=datetime.utcnow, required=True)
39
39
 
40
- kwargs = db.DictField()
40
+ extras = db.ExtrasField()
41
41
 
42
42
  on_new = Signal()
43
43
 
@@ -65,8 +65,9 @@ class Activity(db.Document, metaclass=EmitNewActivityMetaClass):
65
65
  return cls.on_new.connect(func, sender=cls)
66
66
 
67
67
  @classmethod
68
- def emit(cls, related_to, organization=None, **kwargs):
68
+ def emit(cls, related_to, organization=None, extras=None):
69
69
  new_activity.send(cls,
70
70
  related_to=related_to,
71
71
  actor=current_user._get_current_object(),
72
- organization=organization)
72
+ organization=organization,
73
+ extras=extras)
@@ -9,22 +9,23 @@ log = logging.getLogger(__name__)
9
9
 
10
10
 
11
11
  @new_activity.connect
12
- def delay_activity(cls, related_to, actor, organization=None):
12
+ def delay_activity(cls, related_to, actor, organization=None, extras=None):
13
13
  emit_activity.delay(
14
14
  cls.__name__,
15
15
  str(actor.id),
16
16
  related_to_cls=related_to.__class__.__name__,
17
17
  related_to_id=str(related_to.id),
18
18
  organization_id=str(organization.id) if organization else None,
19
+ extras=extras
19
20
  )
20
21
 
21
22
 
22
23
  @task
23
24
  def emit_activity(classname, actor_id, related_to_cls, related_to_id,
24
- organization_id=None):
25
- log.debug('Emit new activity: %s %s %s %s %s',
25
+ organization_id=None, extras=None):
26
+ log.debug('Emit new activity: %s %s %s %s %s %s',
26
27
  classname, actor_id, related_to_cls,
27
- related_to_id, organization_id)
28
+ related_to_id, organization_id, extras)
28
29
  cls = db.resolve_model(classname)
29
30
  actor = User.objects.get(pk=actor_id)
30
31
  related_to = db.resolve_model(related_to_cls).objects.get(pk=related_to_id)
@@ -33,4 +34,4 @@ def emit_activity(classname, actor_id, related_to_cls, related_to_id,
33
34
  else:
34
35
  organization = None
35
36
  cls.objects.create(actor=actor, related_to=related_to,
36
- organization=organization)
37
+ organization=organization, extras=extras)
@@ -0,0 +1,16 @@
1
+ """
2
+ Migrates `Activity.kwargs` to `Activity.extras`.
3
+ """
4
+ import logging
5
+
6
+ from mongoengine.connection import get_db
7
+
8
+ log = logging.getLogger(__name__)
9
+
10
+ def migrate(db):
11
+ log.info('Processing activity objects')
12
+
13
+ result = get_db().activity.update_many(filter={}, update={'$rename': {'kwargs': 'extras'}})
14
+
15
+ log.info(f'{result.modified_count} activity object(s) migrated')
16
+ log.info('Done')
@@ -27,6 +27,18 @@ class ActivityTest(WebTestMixin, DBTestMixin, TestCase):
27
27
  self.assertEqual(len(activities), 1)
28
28
  self.assertIsInstance(activities[0], FakeActivity)
29
29
 
30
+ def test_create_and_retrieve_with_extras(self):
31
+ FakeActivity.objects.create(actor=self.user, related_to=self.fake, extras={'some_key': 'some_value',
32
+ 'other_key': 'other_value'})
33
+
34
+ activities = Activity.objects(actor=self.user)
35
+
36
+ self.assertEqual(len(activities), 1)
37
+ self.assertEqual(activities[0].extras['some_key'], 'some_value')
38
+ self.assertEqual(activities[0].extras['other_key'], 'other_value')
39
+ self.assertIsInstance(activities[0], FakeActivity)
40
+
41
+
30
42
  def test_create_and_retrieve_for_org(self):
31
43
  org = OrganizationFactory()
32
44
  FakeActivity.objects.create(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 7.0.6.dev28248
3
+ Version: 7.0.6.dev28263
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -141,6 +141,7 @@ It is collectively taken care of by members of the
141
141
  - Fix, do not fail on spatial coverage harvesting exception and allow literal spatial BBOX from Arcgis [2998](https://github.com/opendatateam/udata/pull/2998)
142
142
  - Mock calls to example.com [#3000](https://github.com/opendatateam/udata/pull/3000)
143
143
  - Fix duplicate logs in console commands [#2996](https://github.com/opendatateam/udata/pull/2996)
144
+ - Refactor `Activity.kwargs` into `Activity.extras` to facilitate its usage [#2999](https://github.com/opendatateam/udata/pull/2999)
144
145
 
145
146
  ## 7.0.5 (2024-03-20)
146
147
 
@@ -53,10 +53,10 @@ udata/commands/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
53
53
  udata/commands/tests/fixtures.py,sha256=h78grSpZDgOwvmezyD3qBpiSnpxaQ9tDeQOr3sB8EiY,1581
54
54
  udata/core/__init__.py,sha256=n7TBP0lkYJl-BLoc67V5fyaawrWmsrWG_mLIF49UFOY,385
55
55
  udata/core/activity/__init__.py,sha256=4vB92owvzwn2VVxbFWGNcfESb6izDzvbj6lmLH4ssrU,299
56
- udata/core/activity/api.py,sha256=CeVU0ZtQZwQZMLh8Yt13LRGUohFo7iRf1bogbIoiI_4,3268
57
- udata/core/activity/models.py,sha256=z5qe7Hu3IoGCGeGyI31WaFPCg4C6q9BpUrTKK_ik4XI,2073
56
+ udata/core/activity/api.py,sha256=ohDEbzhbsmJ6YHQh3Aa8wYctaDQGuwKdg0kjh3lC028,3276
57
+ udata/core/activity/models.py,sha256=oxv8U45WNbzyZy8hgm8OGSn1zcRobOkhvOYTKpBwmrs,2119
58
58
  udata/core/activity/signals.py,sha256=nplrZFDDuGVXwLWpI_Lhe64mBRMRtwooJG1KcCH6Ses,191
59
- udata/core/activity/tasks.py,sha256=vBmxD96-svZpuEwIdm7vwgqMIZq0JgUv8e8dH1YaKLU,1168
59
+ udata/core/activity/tasks.py,sha256=yKkDgBXYmVX-DS4P9hBgZcweEOU8mlihSj7pqQYOmkg,1242
60
60
  udata/core/badges/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  udata/core/badges/api.py,sha256=BVHULesVK3godViXVOFSjGPCLYmHqLXXywsf0EaJpr8,993
62
62
  udata/core/badges/commands.py,sha256=NMihQH6ABUlkYpR2lNFW4dkeaWOjpijW7voudww8zW4,1129
@@ -315,6 +315,7 @@ udata/migrations/2022-10-10-add-fs_uniquifier-to-user-model.py,sha256=ZKfrhPIeIr
315
315
  udata/migrations/2022-10-10-migrate-harvest-extras.py,sha256=HyBy7f1epYuBry68lUYTe7fMWoiyuIQ6xVwzwljtGqI,2254
316
316
  udata/migrations/2023-02-08-rename-internal-dates.py,sha256=AYewRwdVCfHsJ5APbhQWfihH-nerT3jOzQsSrXW9RQ0,1651
317
317
  udata/migrations/2024-01-29-fix-reuse-and-dataset-with-private-None.py,sha256=173Zf67G-oJgLwXeQUpzoCzcpAOu1ifcLb4eUMJ9nfU,590
318
+ udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py,sha256=n5-udd1IdaD-e3q5cZx9nC4uMUSyJyT1TkI6I4gFgh0,400
318
319
  udata/migrations/__init__.py,sha256=3YP8ppVG5Jx_u6fWJ099X6m3JDYsbd_wetpu4arl6_U,10882
319
320
  udata/models/__init__.py,sha256=1jVsYyZqtPKOuGgbhHmJd3rWJjAv5t7k51_j5C43m8c,5528
320
321
  udata/models/badges_field.py,sha256=NnHA6OT40UysQzO3qnxiDNLR-SCj19KlqD1c-p1DP2Q,984
@@ -545,7 +546,7 @@ udata/tests/helpers.py,sha256=aaifyevJ1Z8CZ8htRrl8OCG5hGcaHfj0lL8iMEKds9w,6022
545
546
  udata/tests/models.py,sha256=_V0smMb1Z6p3aZv6PorzNN-HiNt_B46Ox1fqXrTJEqk,238
546
547
  udata/tests/plugin.py,sha256=hI9Z5SIxUT8UhqZMLcNPzBqdM8-nUgtCW6Pbw2bnNsQ,11045
547
548
  udata/tests/schemas.json,sha256=ZRHijbvYaQBrKuTJzCY5ZeQXdIdaZkv3fo7VMbDjsNg,3483
548
- udata/tests/test_activity.py,sha256=4ZHRG9GYv5I2gtMYQAnhgONP9YBqwMdKKq9T2vua6-I,2674
549
+ udata/tests/test_activity.py,sha256=spWfhueuLze0kD-pAnegiL3_Kv5io155jQuFI4sjN7I,3258
549
550
  udata/tests/test_discussions.py,sha256=zPvKOdcTNGXrvHFp9zqjhKE2fqgUkhb_1F98egXYCL0,31036
550
551
  udata/tests/test_i18n.py,sha256=BU9E7OoIkJw5tv5JYGLjDGBDsti2HuQ_3OWDKnBxnaM,3191
551
552
  udata/tests/test_linkchecker.py,sha256=KxV1-PuuuqogkHf3jP6JhRsc2QG2dFmFB-vSHOiHkuU,10374
@@ -659,9 +660,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=zCVMB-a4-mLM1jNyYMk58rgVRaVIwQ
659
660
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=avfWczvlLBKSohyB55-4TLmUGMU_Rze4XmAo4OTk2v0,43513
660
661
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=ScuqdpaV4y1ZIpBAEfxeaKdzkyGZL0mJmKMoG6w0iRQ,28553
661
662
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=QpgEXh1eHjztPa7oNLXd_sds1DC95A-STTtZyTE4m-E,50093
662
- udata-7.0.6.dev28248.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
663
- udata-7.0.6.dev28248.dist-info/METADATA,sha256=cvPvj6V8F4fFMpGW4I6qftu6DenALP-KUuylkJ27cBA,119755
664
- udata-7.0.6.dev28248.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
665
- udata-7.0.6.dev28248.dist-info/entry_points.txt,sha256=ZqIUHhOth0MMQvMIeuhODbUCDwjR-Hvo7PaKrMwTKuQ,384
666
- udata-7.0.6.dev28248.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
667
- udata-7.0.6.dev28248.dist-info/RECORD,,
663
+ udata-7.0.6.dev28263.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
664
+ udata-7.0.6.dev28263.dist-info/METADATA,sha256=2zJTXq_j2szvACqYhZsB6GFJNzIZf1KQXM-EuVgcvvQ,119888
665
+ udata-7.0.6.dev28263.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
666
+ udata-7.0.6.dev28263.dist-info/entry_points.txt,sha256=ZqIUHhOth0MMQvMIeuhODbUCDwjR-Hvo7PaKrMwTKuQ,384
667
+ udata-7.0.6.dev28263.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
668
+ udata-7.0.6.dev28263.dist-info/RECORD,,