django-restit 4.2.45__py3-none-any.whl → 4.2.46__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.
@@ -0,0 +1,20 @@
1
+ # Generated by Django 4.1.4 on 2024-02-23 20:55
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('location', '0004_remove_address_modified_by_address_group_and_more'),
11
+ ('account', '0018_userpasskey'),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AddField(
16
+ model_name='group',
17
+ name='location',
18
+ field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='location.address'),
19
+ ),
20
+ ]
account/models/group.py CHANGED
@@ -38,6 +38,10 @@ class Group(models.Model, RestModel, MetaDataModel):
38
38
  # this is the new model for groups having multiple parents
39
39
  children = models.ManyToManyField("self", related_name="parents", symmetrical=False)
40
40
 
41
+ location = models.ForeignKey(
42
+ "location.Address", default=None, null=True, blank=True,
43
+ related_name="+", on_delete=models.SET_NULL)
44
+
41
45
  class RestMeta:
42
46
  SEARCH_FIELDS = [
43
47
  "name"
@@ -76,7 +80,8 @@ class Group(models.Model, RestModel, MetaDataModel):
76
80
  "default": {
77
81
  "graphs": {
78
82
  "self": "basic",
79
- "parent": "basic"
83
+ "parent": "basic",
84
+ "location": "basic"
80
85
  },
81
86
  "fields": ["metadata"],
82
87
  },
@@ -84,9 +89,17 @@ class Group(models.Model, RestModel, MetaDataModel):
84
89
  "graphs": {
85
90
  "self": "basic",
86
91
  "parent": "basic",
87
- "children": "basic"
92
+ "children": "basic",
93
+ "location": "basic"
88
94
  },
89
- "fields": ["metadata"],
95
+ "extra": ["metadata"],
96
+ },
97
+ "location": {
98
+ "fields": ["name", "kind", "id"],
99
+ "extra": ["location"],
100
+ "graphs": {
101
+ "location": "basic"
102
+ }
90
103
  },
91
104
  "abstract": {
92
105
  "fields": [
@@ -157,7 +170,7 @@ class Group(models.Model, RestModel, MetaDataModel):
157
170
  raise PermissionDeniedException("invalid parent")
158
171
  qset = qset.filter(parent=parent)
159
172
  elif child_of:
160
- parent = parent = request.member.getGroup(child_of)
173
+ parent = request.member.getGroup(child_of)
161
174
  if parent:
162
175
  request.group = None
163
176
  return parent.getAllChildren(grand_children=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-restit
3
- Version: 4.2.45
3
+ Version: 4.2.46
4
4
  Summary: A Rest Framework for DJANGO
5
5
  License: MIT
6
6
  Author: Ian Starnes
@@ -18,11 +18,12 @@ account/migrations/0015_memberdevice_buid.py,sha256=O3M3mS_O1zn4gQahC3ebRu8tMySo
18
18
  account/migrations/0016_authsession_buid.py,sha256=wZdiH_87Ik3jAXYUgtafeAo9IbJq35xDVOlQ_UiTC8k,424
19
19
  account/migrations/0017_rename_requires_topt_member_requires_totp.py,sha256=GksGiF7OQDV2RihyC2OTBzSmDwzCzenThkNs6FKni4M,375
20
20
  account/migrations/0018_userpasskey.py,sha256=SdXYo4TkIeP5wLNfCza3Jq5-gKuUufzTHGBw0hFQOMY,1475
21
+ account/migrations/0019_group_location.py,sha256=EfMB_w4qWUGDqQeNc453PFZwpjpTeoA6xr6Qgo_YAOM,601
21
22
  account/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
23
  account/models/__init__.py,sha256=cV_lMnT2vL_mjiYtT4hlcIHo52ocFbGSNVkOIHHLXZY,385
23
24
  account/models/device.py,sha256=XipNpByreGubB5-d4ZBOoIV5Xw14b2Btcgn6fXz8HAc,4105
24
25
  account/models/feeds.py,sha256=FXqcZ1Qy4oYOLzai7-GL4WNd7iKPb5Y3ZqvKQunq1Yk,1861
25
- account/models/group.py,sha256=d9uYtLub7iABrQmsYg_L88xG3W7f7VRWvOpebD3XgQY,20684
26
+ account/models/group.py,sha256=l56gQxR1PQNae3TdtL5ytxdSCPP9miYZ2pBMLqA0d5E,21125
26
27
  account/models/legacy.py,sha256=zYdtv4LC0ooxPVqWM-uToPwV-lYWQLorSE6p6yn1xDw,2720
27
28
  account/models/member.py,sha256=XwT4evwN6_THL2bKb_TjtQg7NWNwQqtotMHLScplv1s,50188
28
29
  account/models/membership.py,sha256=K2fd0TJYhfv58HPyjQVlahlOPz3Q6ZwrxVkguG-2Ej8,7806
@@ -121,9 +122,10 @@ location/geolocate.py,sha256=UgV129vmSxnqYFBYJD2RQVOcC1-lJJ1zUaxDqOJRbG4,1694
121
122
  location/migrations/0001_initial.py,sha256=E0Kekah0vfp7VGKGYRHFEIFjFRTkd8QnFGSHNFllVv0,7000
122
123
  location/migrations/0002_geoip_subnet_alter_geoip_ip.py,sha256=n-oJrEnIqN9VnMhiZsr34LF-EXBluPm1lz1zusaMkx8,576
123
124
  location/migrations/0003_address_postalcode_suffix.py,sha256=DT8voJeMiSQyUhH-69NHK9YywaChAvIJn1ztL7fCI30,443
125
+ location/migrations/0004_remove_address_modified_by_address_group_and_more.py,sha256=Xq0q8oVoElVYbPC779empO4GIQKuRWOyBCUmWg9Wzo4,1270
124
126
  location/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
127
  location/models/__init__.py,sha256=rZhldkoKmoJQXjBAK1IIQn7K_OOJvFtIGOGVl_szqbE,230
126
- location/models/address.py,sha256=oTPQiLdg2QkfPorlm16re1OoR6TJf4Of2Ew1slun2r8,2596
128
+ location/models/address.py,sha256=5059tQZI4XDZJPywQPN0zXIJ8FTUQnONwBkc7DFgwng,3045
127
129
  location/models/ip.py,sha256=ZaBFdW1tL1Q3bnS5gIY9SseiQ5xeeP_oyP1hp3czFeA,5984
128
130
  location/models/legacy.py,sha256=8ROsUSZrjGQkUyXeJvoxPdKAWaKfUH-AL9TIeJb7krg,1994
129
131
  location/models/location.py,sha256=01dJPJecbp5orExsIGWOsBC_KkwFRIW0rGDIwyx1r0w,2316
@@ -141,7 +143,8 @@ location/providers/location/google.py,sha256=RXZoYXUcTerE3-7z2BciEuDJJB-f-0_F6jW
141
143
  location/providers/timezones/__init__.py,sha256=enslc1cVTju3GKrvpLoAxSHUKkLeREhed-eHkvHWdoM,46
142
144
  location/providers/timezones/google.py,sha256=HyATVCGJ3wHwfc47jQRLnwa8nPeBlmpHOGTxetfg7FU,619
143
145
  location/providers/zillow.py,sha256=nCV_q_9ULRkgxi4HTZHioP6nWDDmApvSf1DcwNLcOxk,1935
144
- location/rpc/__init__.py,sha256=74T2Y3Zw7ZOl_h67Gdb-tfkyKJAJFSDFHjv04FRKsjQ,123
146
+ location/rpc/__init__.py,sha256=MDs0Qntwff3d128BhjHEFcGTWSomshHQ1VToqMT0YVA,166
147
+ location/rpc/address.py,sha256=ivkdG5Oc8YnJowEQ8dmiOnZr5OOaIuiw9fuwbrC7gUQ,219
145
148
  location/rpc/ip.py,sha256=TbRRgh4_hykT_Z0PDQrMnCdp_x0nK0Zm_WnvzXuweF4,1305
146
149
  location/rpc/location.py,sha256=D5R54nnmmp8NaHQRkP_TF921Ej6j9nmTUNzX1K5WVPc,779
147
150
  location/rpc/track.py,sha256=jSS9_eiKayM_8iW_4Ldojg9a2_trjfXhnLe_a261x5E,3735
@@ -360,7 +363,7 @@ pushit/utils.py,sha256=IeTCGa-164nmB1jIsK1lu1O1QzUhS3BKfuXHGjCW-ck,2121
360
363
  rest/.gitignore,sha256=TbEvWRMnAiajCTOdhiNrd9eeCAaIjRp9PRjE_VkMM5g,118
361
364
  rest/README.md,sha256=V3ETc-cJu8PZIbKr9xSe_pA4JEUpC8Dhw4bQeVCDJPw,5460
362
365
  rest/RemoteEvents.py,sha256=nL46U7AuxIrlw2JunphR1tsXyqi-ep_gD9CYGpYbNgE,72
363
- rest/__init__.py,sha256=1X-W3BH6L-ujXvvzyMW1tIIeqHcQOhgRzb6isSAl9mY,121
366
+ rest/__init__.py,sha256=XeNEczGva6f-NCiOEuPB5xX3SPad8Q_MV-nviN1P2d0,121
364
367
  rest/arc4.py,sha256=y644IbF1ec--e4cUJ3KEYsewTCITK0gmlwa5mJruFC0,1967
365
368
  rest/cache.py,sha256=1Qg0rkaCJCaVP0-l5hZg2CIblTdeBSlj_0fP6vlKUpU,83
366
369
  rest/crypto/__init__.py,sha256=Tl0U11rgj1eBYqd6OXJ2_XSdNLumW_JkBZnaJqI6Ldw,72
@@ -392,7 +395,7 @@ rest/middleware/request.py,sha256=JchRNy5L-bGd-7h-KFYekGRvREe2eCkZXKOYqIkP2hI,41
392
395
  rest/middleware/session.py,sha256=zHSoQpIzRLmpqr_JvW406wzpvU3W3gDbm5JhtzLAMlE,10240
393
396
  rest/middleware/session_store.py,sha256=1nSdeXK8PyuYgGgIufqrS6j6QpIrQ7zbMNT0ol75e6U,1901
394
397
  rest/models/__init__.py,sha256=M8pvFDq-WCF-QcM58X7pMufYYe0aaQ3U0PwGe9TKbbY,130
395
- rest/models/base.py,sha256=vYs3dlI10VYbYiKMhqZ9XJXTHllrS9eQNzpPRyPBBHg,67303
398
+ rest/models/base.py,sha256=S6lLCPPEUQRVHn_4S2TwAVSQisdlKz3kqKI4dRKWUBY,67650
396
399
  rest/models/cacher.py,sha256=eKz8TINVhWEqKhJGMsRkKZTtBUIv5rN3NHbZwOC56Uk,578
397
400
  rest/models/metadata.py,sha256=ui0962oaWbYGIbkNs7oaUGKyaca9epsW2H-ywgyH7rg,12631
398
401
  rest/net.py,sha256=LcB2QV6VNRtsSdmiQvYZgwQUDwOPMn_VBdRiZ6OpI-I,2974
@@ -493,7 +496,7 @@ ws4redis/servers/uwsgi.py,sha256=VyhoCI1DnVFqBiJYHoxqn5Idlf6uJPHvfBKgkjs34mo,172
493
496
  ws4redis/settings.py,sha256=K0yBiLUuY81iDM4Yr-k8hbvjn5VVHu5zQhmMK8Dtz0s,1536
494
497
  ws4redis/utf8validator.py,sha256=S0OlfjeGRP75aO6CzZsF4oTjRQAgR17OWE9rgZdMBZA,5122
495
498
  ws4redis/websocket.py,sha256=R0TUyPsoVRD7Y_oU7w2I6NL4fPwiz5Vl94-fUkZgLHA,14848
496
- django_restit-4.2.45.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
497
- django_restit-4.2.45.dist-info/METADATA,sha256=sjprDnHaz3wHRJMOMfpI0y3UMinbPipZ0aB8mboJGdI,7594
498
- django_restit-4.2.45.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
499
- django_restit-4.2.45.dist-info/RECORD,,
499
+ django_restit-4.2.46.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
500
+ django_restit-4.2.46.dist-info/METADATA,sha256=lCBmmksn0kY3P_GgX1stSJMT0zykk8qDWbK9ipwYks4,7594
501
+ django_restit-4.2.46.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
502
+ django_restit-4.2.46.dist-info/RECORD,,
@@ -0,0 +1,36 @@
1
+ # Generated by Django 4.1.4 on 2024-02-23 19:15
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations, models
5
+ import django.db.models.deletion
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12
+ ('account', '0018_userpasskey'),
13
+ ('location', '0003_address_postalcode_suffix'),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.RemoveField(
18
+ model_name='address',
19
+ name='modified_by',
20
+ ),
21
+ migrations.AddField(
22
+ model_name='address',
23
+ name='group',
24
+ field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='addresses', to='account.group'),
25
+ ),
26
+ migrations.AddField(
27
+ model_name='address',
28
+ name='label',
29
+ field=models.CharField(blank=True, db_index=True, default=None, max_length=250, null=True),
30
+ ),
31
+ migrations.AddField(
32
+ model_name='address',
33
+ name='member',
34
+ field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='addresses', to=settings.AUTH_USER_MODEL),
35
+ ),
36
+ ]
@@ -6,6 +6,11 @@ from .. import geolocate
6
6
 
7
7
  class Address(models.Model, rm.RestModel):
8
8
  class RestMeta:
9
+ VIEW_PERMS = [
10
+ "view_all_groups",
11
+ "manage_groups",
12
+ "manage_group",
13
+ "manage_settings"]
9
14
  GRAPHS = {
10
15
  "abstract": {
11
16
  "fields":[
@@ -18,7 +23,15 @@ class Address(models.Model, rm.RestModel):
18
23
  ]
19
24
  }
20
25
  }
21
- modified_by = models.ForeignKey("account.User", null=True, blank=True, default=None, on_delete=models.CASCADE)
26
+ label = models.CharField(
27
+ max_length=250, null=True, blank=True,
28
+ default=None, db_index=True)
29
+ member = models.ForeignKey(
30
+ "account.User", null=True, blank=True,
31
+ default=None, on_delete=models.SET_NULL, related_name="addresses")
32
+ group = models.ForeignKey(
33
+ "account.Group", null=True, blank=True,
34
+ default=None, on_delete=models.SET_NULL, related_name="addresses")
22
35
  modified = models.DateTimeField(auto_now=True)
23
36
  line1 = models.CharField(max_length=255, blank=True, null=True, default=None)
24
37
  line2 = models.CharField(max_length=255, blank=True, null=True, default=None)
location/rpc/__init__.py CHANGED
@@ -1,3 +1,4 @@
1
1
  from .ip import * # noqa: F401, F403
2
2
  from .track import * # noqa: F401, F403
3
3
  from .location import * # noqa: F401, F403
4
+ from .address import * # noqa: F401, F403
@@ -0,0 +1,8 @@
1
+ from rest import decorators as rd
2
+ from location import models as location
3
+
4
+
5
+ @rd.url('address')
6
+ @rd.url('address/<int:pk>')
7
+ def rest_on_address(request, pk=None):
8
+ return location.Address.on_rest_request(request, pk)
rest/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  from .uberdict import UberDict # noqa: F401
2
2
  from .settings_helper import settings # noqa: F401
3
3
 
4
- __version__ = "4.2.45"
4
+ __version__ = "4.2.46"
rest/models/base.py CHANGED
@@ -321,6 +321,16 @@ class RestModel(object):
321
321
  def getModel(app_name, model_name):
322
322
  return apps.get_model(app_name, model_name)
323
323
 
324
+ @staticmethod
325
+ def getModelInstance(app_name, model_name, **kwargs):
326
+ Model = apps.get_model(app_name, model_name)
327
+ return Model.objects.filter(**kwargs).last()
328
+
329
+ @staticmethod
330
+ def createModelInstance(app_name, model_name, **kwargs):
331
+ Model = apps.get_model(app_name, model_name)
332
+ return Model(**kwargs)
333
+
324
334
  def restGetGenericModel(self, field):
325
335
  # called by the rest module to magically parse
326
336
  # a component that is marked genericr elation in a graph