clear-skies 1.19.0__py3-none-any.whl → 1.19.2__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.0
3
+ Version: 1.19.2
4
4
  Summary: A framework for building backends in the cloud
5
5
  Home-page: https://github.com/cmancone/clearskies
6
6
  License: MIT
@@ -56,17 +56,17 @@ clearskies/backends/secrets_backend.py,sha256=4lzrgdL_O_pgCT5HknV2gotFgp9GzjQ5_2
56
56
  clearskies/binding_config.py,sha256=bF8LBNEgJacwKCqToAtDqN9hv5omzU7zt_4qB9KPtE0,457
57
57
  clearskies/column_types/__init__.py,sha256=QHEFFd3wRXvaOR7uZk-bpVLlLoTiN3D4S8sBU9rFwCE,4330
58
58
  clearskies/column_types/audit.py,sha256=meDFV0s4u9i6UojN5f6EQk_kh-nGP8xPscCRa2Nd-yw,8102
59
- clearskies/column_types/belongs_to.py,sha256=a64yQ1kWRiljOfHToGsyKbAqdgNLvbRKBYEzrp1IWXo,10714
59
+ clearskies/column_types/belongs_to.py,sha256=tH1tbTOfjifSNuVjO-KbMF7GiUIoLfcDItrrS3TGGM8,11044
60
60
  clearskies/column_types/boolean.py,sha256=1yyM1CUfgD84pPE65c1OP1Qjf_J0Z45hjPrDR51AUkQ,1878
61
61
  clearskies/column_types/category_tree.py,sha256=PgNmzZPyqYS5NADH_QTCxLvDXZFxzv5ESKTkvPrrLXo,9140
62
62
  clearskies/column_types/column.py,sha256=PUrFyA2KmSyAZTAiJPfHy5Dlc1YPEb62c7r0BOTkF1s,13541
63
- clearskies/column_types/created.py,sha256=R8P3egUb7JEHoU_NtbmN9OIwBUHQ0XFi1GoAb5RpSkI,339
63
+ clearskies/column_types/created.py,sha256=S78e1VuvvUPYiI79gWGqlPzMSLIbXMpaYQMw8as7l38,615
64
64
  clearskies/column_types/created_by_authorization_data.py,sha256=--1w1TOSo2CMwrpn6Y_iorl2RTqLgG8MbR8k27qreew,1108
65
65
  clearskies/column_types/created_by_header.py,sha256=5sY6vjtra-BrAgUE4zkuLhBtzCVWHNtJPwMozPw_7_s,520
66
66
  clearskies/column_types/created_by_ip.py,sha256=wwCUoEwHEVGN89x4xP7NJ6QR85Aum6v3JmxofoQrqtg,395
67
67
  clearskies/column_types/created_by_routing_data.py,sha256=EhVorRaGV2OhEb0YSPwPmrsK2NQycYgGEd4ab8-qI2I,569
68
68
  clearskies/column_types/created_by_user_agent.py,sha256=sSYDRrqSjsCwcYlhF_s9NO-iDww3PaH6aO2ATp_SKGQ,419
69
- clearskies/column_types/created_micro.py,sha256=QTDHq2KVqLNz1ggbfl3J5-Y1vYrkxOxYzcOJl_3aOUY,360
69
+ clearskies/column_types/created_micro.py,sha256=EqeHB3ZHbi4nCa1rbrKy1TbooT9U3Kfw5z4jUvLi32U,636
70
70
  clearskies/column_types/datetime.py,sha256=OEy5eMfqWp6KOqEHQa3Ga_tl0oawtcMRBafI1SPYDFk,4275
71
71
  clearskies/column_types/datetime_micro.py,sha256=3DxtkeJZhWigdni7QEJFV3BJuCmXJMyFQjDZ9jyI144,328
72
72
  clearskies/column_types/email.py,sha256=rCaCFCxGhVzJcYVeGm98S6e7myJ6eQX9YznqAZIgwQI,606
@@ -78,8 +78,8 @@ clearskies/column_types/many_to_many.py,sha256=Yu5wmMkVqRteMrH_8uSZK-bM_IrfDyv6A
78
78
  clearskies/column_types/many_to_many_with_data.py,sha256=NOYjZedeLIWVyDV4BTRyNmhkNHZzx6SkHLFbL-VqHQU,7769
79
79
  clearskies/column_types/select.py,sha256=1oBslTJ_7QCjlFeEcwJVRL-ED4sXwCESVFRAOonvG2I,297
80
80
  clearskies/column_types/string.py,sha256=XbHC31TmlW0k86cvdVJBDyowU8Xis6Te6R0rPLXgLpI,863
81
- clearskies/column_types/updated.py,sha256=ZAHTHZtKbZQE_JwZ2wMwAUSr4PUYNscy8SwzZGko8hU,290
82
- clearskies/column_types/updated_micro.py,sha256=P8WICdUf--Z9Rzt8fDAa3w1PfHGJWiXIKXjf4pNFIlE,311
81
+ clearskies/column_types/updated.py,sha256=FNyRK-PS6lgFQ9QN2VrcIZP2g5EHGhll6pf-MgqMH7s,566
82
+ clearskies/column_types/updated_micro.py,sha256=3geqsV4nsPB9xDKyvQDGniU-KMqM8WvoqHfUYcBqGJY,587
83
83
  clearskies/column_types/uuid.py,sha256=pA6Cd-1QSRuUpz0PxWAGRdG01hW7bpIicOhhJvAvDkQ,711
84
84
  clearskies/columns.py,sha256=3PgLopL1l20vVWaUqOJkwXMr06a-gFHEsbExfOWVB4I,5925
85
85
  clearskies/condition_parser.py,sha256=IXl51-rDxws7-nAtTVu_m6gTegtpkDnoGAFX2MTPDIo,6589
@@ -153,12 +153,12 @@ clearskies/handlers/simple_search.py,sha256=bSfq8rzdqkBj-dTGUBSZ1EkfjzUWHID7mKD2
153
153
  clearskies/handlers/update.py,sha256=VCZkoID7i5VHq78fkIpjbRdXQ4Z3IuXEE5dfC8z4RZI,4088
154
154
  clearskies/handlers/write.py,sha256=VduGtjnFMQOvo3l0t-tUP4PExPJ9JEpuziHsquF08rE,9344
155
155
  clearskies/input_outputs/__init__.py,sha256=mQWL-u41FRTrPGuHe8FhLmcHjAEaUxjFwUf7RgDcbAs,182
156
- clearskies/input_outputs/cli.py,sha256=snIfLFakIqDXm-AXVN6qes0tZsg2IM7T1riFzDdHlMM,6254
156
+ clearskies/input_outputs/cli.py,sha256=F54wues9cNESE8FhQP3mDWrgrZyFouDIN-ZZ3-KJjks,6258
157
157
  clearskies/input_outputs/exceptions/__init__.py,sha256=bc5Tc1XBZnqA1fKbk7pk5hyx102vqx3sDE19E03xGk4,82
158
158
  clearskies/input_outputs/exceptions/cli_input_error.py,sha256=kOFU8aLTLmeTL_AKDshxMu8_ufildg6p8ndhE1xHfb0,41
159
159
  clearskies/input_outputs/exceptions/cli_not_found.py,sha256=JBBuZA9ZwdkPhd3a0qaGgEPQrxh1fehy4R3ZaV2gWXU,39
160
160
  clearskies/input_outputs/input_output.py,sha256=vYKn9SE5erS4LuOhhAsXqaOEsGXwZ1NJ4v85KN1Xg6A,4501
161
- clearskies/input_outputs/wsgi.py,sha256=bqRzzJLifAVXgXw1Lsg0lQ0uwZ8SLSn-NSbD5dKrSw4,3138
161
+ clearskies/input_outputs/wsgi.py,sha256=9p82eJP5FUAI6jbIojvydG3_9gncX7vcUACQMyRN9x4,3142
162
162
  clearskies/input_requirements/__init__.py,sha256=MpR-oEn1aLHdWHI60Y0QN2q6FyqqySCxcEaHR51aKpk,602
163
163
  clearskies/input_requirements/maximum_length.py,sha256=7hdGVq914BtZQwiGOLOU-t5QTDNQtCPT4TOnYTUo3Wo,689
164
164
  clearskies/input_requirements/minimum_length.py,sha256=qSpLjNBu6AKRoBZi3jvCMYKsHwsknbkUk86C8CMIOEU,987
@@ -192,7 +192,7 @@ clearskies/tests/simple_api/models/__init__.py,sha256=nUA0W6fgXw_Bxa9CudkaDkC80t
192
192
  clearskies/tests/simple_api/models/status.py,sha256=PEhPbaQh5qdUNHp8O0gz91LOLENAEBtqSaHxUPXchaM,699
193
193
  clearskies/tests/simple_api/models/user.py,sha256=5_P4Tp1tTdX7PkMJ__epPM5MA7JAeVYGas69vcWloLc,819
194
194
  clearskies/tests/simple_api/users_api.py,sha256=KYXCgEofDxHeRdQK67txN5oYUPvxxmB8JTku7L-apk4,2344
195
- clear_skies-1.19.0.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
196
- clear_skies-1.19.0.dist-info/METADATA,sha256=y9Uu7j3uXEBanug_NuB_ghR0yb3inZI6hsEH3ruUM6A,1366
197
- clear_skies-1.19.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
198
- clear_skies-1.19.0.dist-info/RECORD,,
195
+ clear_skies-1.19.2.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
196
+ clear_skies-1.19.2.dist-info/METADATA,sha256=oViYadXM8eLgTlXMKz7jhbRDUbWB2gBwxtztzicv9ZA,1366
197
+ clear_skies-1.19.2.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
198
+ clear_skies-1.19.2.dist-info/RECORD,,
@@ -98,7 +98,15 @@ class BelongsTo(String):
98
98
  return integer_check
99
99
  parent_models = self.parent_models
100
100
  id_column_name = parent_models.get_id_column_name()
101
- if not len(parent_models.where(f"{id_column_name}={value}")):
101
+ matching_parents = parent_models.where(f"{id_column_name}={value}")
102
+ input_output = self.di.build("input_output", cache=True)
103
+ matching_parents = matching_parents.where_for_request(
104
+ matching_parents,
105
+ input_output.routing_data(),
106
+ input_output.get_authorization_data(),
107
+ input_output,
108
+ )
109
+ if not len(matching_parents):
102
110
  return f"Invalid selection for {self.name}: record does not exist"
103
111
  return ""
104
112
 
@@ -2,9 +2,15 @@ from .datetime import DateTime
2
2
 
3
3
 
4
4
  class Created(DateTime):
5
- def __init__(self, di, now):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
6
12
  super().__init__(di)
7
- self.now = now
13
+ self.datetime = datetime
8
14
 
9
15
  @property
10
16
  def is_writeable(self):
@@ -13,4 +19,8 @@ class Created(DateTime):
13
19
  def pre_save(self, data, model):
14
20
  if model.exists:
15
21
  return data
16
- return {**data, self.name: self.now}
22
+ if self.config("utc", silent=True):
23
+ now = self.datetime.datetime.now(self.datetime.timezone.utc)
24
+ else:
25
+ now = self.datetime.datetime.now()
26
+ return {**data, self.name: now}
@@ -2,9 +2,15 @@ from .datetime_micro import DateTimeMicro
2
2
 
3
3
 
4
4
  class CreatedMicro(DateTimeMicro):
5
- def __init__(self, di, now):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
6
12
  super().__init__(di)
7
- self.now = now
13
+ self.datetime = datetime
8
14
 
9
15
  @property
10
16
  def is_writeable(self):
@@ -13,4 +19,8 @@ class CreatedMicro(DateTimeMicro):
13
19
  def pre_save(self, data, model):
14
20
  if model.exists:
15
21
  return data
16
- return {**data, self.name: self.now}
22
+ if self.config("utc", silent=True):
23
+ now = self.datetime.datetime.now(self.datetime.timezone.utc)
24
+ else:
25
+ now = self.datetime.datetime.now()
26
+ return {**data, self.name: now}
@@ -2,13 +2,23 @@ from .datetime import DateTime
2
2
 
3
3
 
4
4
  class Updated(DateTime):
5
- def __init__(self, di, now):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
6
12
  super().__init__(di)
7
- self.now = now
13
+ self.datetime = datetime
8
14
 
9
15
  @property
10
16
  def is_writeable(self):
11
17
  return False
12
18
 
13
19
  def pre_save(self, data, model):
14
- return {**data, self.name: self.now}
20
+ if self.config("utc", silent=True):
21
+ now = self.datetime.datetime.now(self.datetime.timezone.utc)
22
+ else:
23
+ now = self.datetime.datetime.now()
24
+ return {**data, self.name: now}
@@ -2,13 +2,23 @@ from .datetime_micro import DateTimeMicro
2
2
 
3
3
 
4
4
  class UpdatedMicro(DateTimeMicro):
5
- def __init__(self, di, now):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
6
12
  super().__init__(di)
7
- self.now = now
13
+ self.datetime = datetime
8
14
 
9
15
  @property
10
16
  def is_writeable(self):
11
17
  return False
12
18
 
13
19
  def pre_save(self, data, model):
14
- return {**data, self.name: self.now}
20
+ if self.config("utc", silent=True):
21
+ now = self.datetime.datetime.now(self.datetime.timezone.utc)
22
+ else:
23
+ now = self.datetime.datetime.now()
24
+ return {**data, self.name: now}
@@ -21,7 +21,7 @@ class CLI:
21
21
  self._request_method = None
22
22
  self._parse_args(self._sys.argv)
23
23
 
24
- def respond(self, response, status_code):
24
+ def respond(self, response, status_code=200):
25
25
  if status_code == 404:
26
26
  raise exceptions.CLINotFound()
27
27
  if status_code != 200:
@@ -21,7 +21,7 @@ class WSGI(InputOutput):
21
21
  def _from_environment(self, key):
22
22
  return self._environment[key] if key in self._environment else ""
23
23
 
24
- def respond(self, body, status_code):
24
+ def respond(self, body, status_code=200):
25
25
  if not self.has_header("content-type"):
26
26
  self.set_header("content-type", "application/json; charset=UTF-8")
27
27