clear-skies 1.19.31__py3-none-any.whl → 1.20.0__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 clear-skies might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: clear-skies
3
- Version: 1.19.31
3
+ Version: 1.20.0
4
4
  Summary: A framework for building backends in the cloud
5
5
  Home-page: https://github.com/cmancone/clearskies
6
6
  License: MIT
@@ -55,7 +55,7 @@ clearskies/backends/memory_backend.py,sha256=6Ts_NtP9S_QisvpNcQKO0CUqhCRAuL3d5LZ
55
55
  clearskies/backends/restful_api_advanced_search_backend.py,sha256=uiR4SEKhLNmczYJEAkVMIdPWxQc4YWSp-_WzcSL7DEo,5480
56
56
  clearskies/backends/secrets_backend.py,sha256=4lzrgdL_O_pgCT5HknV2gotFgp9GzjQ5_2n0-4H4kvs,2204
57
57
  clearskies/binding_config.py,sha256=bF8LBNEgJacwKCqToAtDqN9hv5omzU7zt_4qB9KPtE0,457
58
- clearskies/column_types/__init__.py,sha256=Z3HVDZeleZJQNnIrhQbvhzI09-v2ADNw0PQFYkoUwvE,4588
58
+ clearskies/column_types/__init__.py,sha256=wofhLfyW00I6tb6o9DMsMx7j9hlbbqefhDzWfw0Row0,4731
59
59
  clearskies/column_types/audit.py,sha256=2YcrZVVElpOUdmxYTQ_6CshL1HVou6fz65dOOs_b8Gw,9659
60
60
  clearskies/column_types/belongs_to.py,sha256=tH1tbTOfjifSNuVjO-KbMF7GiUIoLfcDItrrS3TGGM8,11044
61
61
  clearskies/column_types/boolean.py,sha256=1yyM1CUfgD84pPE65c1OP1Qjf_J0Z45hjPrDR51AUkQ,1878
@@ -73,6 +73,7 @@ clearskies/column_types/datetime_micro.py,sha256=3DxtkeJZhWigdni7QEJFV3BJuCmXJMy
73
73
  clearskies/column_types/email.py,sha256=qq0Yo_C3KxUqT68q2HWXocBBR4xwMqjxcIdgZRv218U,584
74
74
  clearskies/column_types/float.py,sha256=j8jJeBueSOusPtAFCWgLHYBncfLnqT1U7bh1zcAkYiA,1332
75
75
  clearskies/column_types/has_many.py,sha256=Z4oM1g2dQx6H9171c52FLC41nLryCOKmh51I75mYmmY,5895
76
+ clearskies/column_types/has_one.py,sha256=uphIPUuHLwwmhljLMaKKPujR6TYTT7onn-hHUF6S_IY,2230
76
77
  clearskies/column_types/integer.py,sha256=dGIluusPmhLRNg7PplOJLbQI2AXojqRBUHt8ekYWNVI,1386
77
78
  clearskies/column_types/json.py,sha256=TbZkdwCoZYhbALUxof2jENGfaq2i5TlcyBcmo7XzDGQ,652
78
79
  clearskies/column_types/many_to_many.py,sha256=Yu5wmMkVqRteMrH_8uSZK-bM_IrfDyv6AFb92iJ1FZs,11984
@@ -204,7 +205,7 @@ clearskies/tests/simple_api/models/__init__.py,sha256=nUA0W6fgXw_Bxa9CudkaDkC80t
204
205
  clearskies/tests/simple_api/models/status.py,sha256=PEhPbaQh5qdUNHp8O0gz91LOLENAEBtqSaHxUPXchaM,699
205
206
  clearskies/tests/simple_api/models/user.py,sha256=5_P4Tp1tTdX7PkMJ__epPM5MA7JAeVYGas69vcWloLc,819
206
207
  clearskies/tests/simple_api/users_api.py,sha256=KYXCgEofDxHeRdQK67txN5oYUPvxxmB8JTku7L-apk4,2344
207
- clear_skies-1.19.31.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
208
- clear_skies-1.19.31.dist-info/METADATA,sha256=J3n3vqiDQIaaf0i6Q5pTTsumlb_1D0_iR0ai2iHDzwU,1712
209
- clear_skies-1.19.31.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
210
- clear_skies-1.19.31.dist-info/RECORD,,
208
+ clear_skies-1.20.0.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
209
+ clear_skies-1.20.0.dist-info/METADATA,sha256=s3CfL8eRPixLfFoHgKH3lq4AL0T3rYcwPhO48EKp0Do,1711
210
+ clear_skies-1.20.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
211
+ clear_skies-1.20.0.dist-info/RECORD,,
@@ -15,6 +15,7 @@ from .datetime_micro import DateTimeMicro
15
15
  from .email import Email
16
16
  from .float import Float
17
17
  from .has_many import HasMany
18
+ from .has_one import HasOne
18
19
  from .integer import Integer
19
20
  from .json import JSON
20
21
  from .many_to_many import ManyToMany
@@ -96,6 +97,10 @@ def has_many(name, **kwargs):
96
97
  return build_column_config(name, HasMany, **kwargs)
97
98
 
98
99
 
100
+ def has_one(name, **kwargs):
101
+ return build_column_config(name, HasOne, **kwargs)
102
+
103
+
99
104
  def integer(name, **kwargs):
100
105
  return build_column_config(name, Integer, **kwargs)
101
106
 
@@ -173,6 +178,8 @@ __all__ = [
173
178
  "Float",
174
179
  "has_many",
175
180
  "HasMany",
181
+ "has_one",
182
+ "HasOne",
176
183
  "integer",
177
184
  "Integer",
178
185
  "json",
@@ -0,0 +1,58 @@
1
+ from .has_many import HasMany
2
+ import re
3
+ from collections import OrderedDict
4
+ from ..autodoc.schema import Array as AutoDocArray
5
+ from ..autodoc.schema import Object as AutoDocObject
6
+ from ..autodoc.schema import String as AutoDocString
7
+
8
+
9
+ class HasOne(HasMany):
10
+ """
11
+ Controls a has-one relationship.
12
+
13
+ This is a readonly column. When used in a model context it will return the related record.
14
+ When used in an API context, it will convert the child record into an object.
15
+
16
+ It assumes that the foreign id in the child table is `[parent_model_class_name]_id` in all lower case.
17
+ e.g., if the parent model class is named Status, then it assumes an id in the child class called `status_id`.
18
+ """
19
+
20
+ def can_provide(self, column_name):
21
+ return column_name == self.name
22
+
23
+ def provide(self, data, column_name):
24
+ foreign_column_name = self.config("foreign_column_name")
25
+ id_column_name = self.config("parent_id_column_name")
26
+ return self.child_models.find(f"{foreign_column_name}={data[id_column_name]}")
27
+
28
+ def to_json(self, model):
29
+ json = OrderedDict()
30
+ columns = self.get_child_columns()
31
+ child = model.__getattr__(self.name)
32
+ child_id_column_name = child.id_column_name
33
+ json = {
34
+ **json,
35
+ **columns[child_id_column_name].to_json(child),
36
+ }
37
+ for column_name in self.config("readable_child_columns"):
38
+ json = {
39
+ **json,
40
+ **columns[column_name].to_json(child),
41
+ }
42
+ return {self.name: json}
43
+
44
+ def documentation(self, name=None, example=None, value=None):
45
+ columns = self.get_child_columns()
46
+ child_id_column_name = self.child_models.get_id_column_name()
47
+ child_properties = [columns[child_id_column_name].documentation()]
48
+
49
+ for column_name in self.config("readable_child_columns"):
50
+ child_docs = columns[column_name].documentation()
51
+ if type(child_docs) != list:
52
+ child_docs = [child_docs]
53
+ child_properties.extend(child_docs)
54
+
55
+ return AutoDocObject(
56
+ self.camel_to_nice(self.child_models.model_class().__name__),
57
+ child_properties,
58
+ )