clear-skies 1.18.32__py3-none-any.whl → 1.19.1__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.18.32
3
+ Version: 1.19.1
4
4
  Summary: A framework for building backends in the cloud
5
5
  Home-page: https://github.com/cmancone/clearskies
6
6
  License: MIT
@@ -54,19 +54,21 @@ clearskies/backends/memory_backend.py,sha256=6Ts_NtP9S_QisvpNcQKO0CUqhCRAuL3d5LZ
54
54
  clearskies/backends/restful_api_advanced_search_backend.py,sha256=uiR4SEKhLNmczYJEAkVMIdPWxQc4YWSp-_WzcSL7DEo,5480
55
55
  clearskies/backends/secrets_backend.py,sha256=4lzrgdL_O_pgCT5HknV2gotFgp9GzjQ5_2n0-4H4kvs,2204
56
56
  clearskies/binding_config.py,sha256=bF8LBNEgJacwKCqToAtDqN9hv5omzU7zt_4qB9KPtE0,457
57
- clearskies/column_types/__init__.py,sha256=WAEB52v0m_Yzg_H3sSGMsRoKFcKkB1oEZXIONocYwy8,3747
57
+ clearskies/column_types/__init__.py,sha256=QHEFFd3wRXvaOR7uZk-bpVLlLoTiN3D4S8sBU9rFwCE,4330
58
58
  clearskies/column_types/audit.py,sha256=meDFV0s4u9i6UojN5f6EQk_kh-nGP8xPscCRa2Nd-yw,8102
59
59
  clearskies/column_types/belongs_to.py,sha256=a64yQ1kWRiljOfHToGsyKbAqdgNLvbRKBYEzrp1IWXo,10714
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/datetime.py,sha256=MuVaeI6FMgevTdgv6djZjlHogs72TC1HTuYdw_6MF2M,3824
69
+ clearskies/column_types/created_micro.py,sha256=EqeHB3ZHbi4nCa1rbrKy1TbooT9U3Kfw5z4jUvLi32U,636
70
+ clearskies/column_types/datetime.py,sha256=OEy5eMfqWp6KOqEHQa3Ga_tl0oawtcMRBafI1SPYDFk,4275
71
+ clearskies/column_types/datetime_micro.py,sha256=3DxtkeJZhWigdni7QEJFV3BJuCmXJMyFQjDZ9jyI144,328
70
72
  clearskies/column_types/email.py,sha256=rCaCFCxGhVzJcYVeGm98S6e7myJ6eQX9YznqAZIgwQI,606
71
73
  clearskies/column_types/float.py,sha256=j8jJeBueSOusPtAFCWgLHYBncfLnqT1U7bh1zcAkYiA,1332
72
74
  clearskies/column_types/has_many.py,sha256=Z4oM1g2dQx6H9171c52FLC41nLryCOKmh51I75mYmmY,5895
@@ -76,7 +78,8 @@ clearskies/column_types/many_to_many.py,sha256=Yu5wmMkVqRteMrH_8uSZK-bM_IrfDyv6A
76
78
  clearskies/column_types/many_to_many_with_data.py,sha256=NOYjZedeLIWVyDV4BTRyNmhkNHZzx6SkHLFbL-VqHQU,7769
77
79
  clearskies/column_types/select.py,sha256=1oBslTJ_7QCjlFeEcwJVRL-ED4sXwCESVFRAOonvG2I,297
78
80
  clearskies/column_types/string.py,sha256=XbHC31TmlW0k86cvdVJBDyowU8Xis6Te6R0rPLXgLpI,863
79
- clearskies/column_types/updated.py,sha256=ZAHTHZtKbZQE_JwZ2wMwAUSr4PUYNscy8SwzZGko8hU,290
81
+ clearskies/column_types/updated.py,sha256=FNyRK-PS6lgFQ9QN2VrcIZP2g5EHGhll6pf-MgqMH7s,566
82
+ clearskies/column_types/updated_micro.py,sha256=3geqsV4nsPB9xDKyvQDGniU-KMqM8WvoqHfUYcBqGJY,587
80
83
  clearskies/column_types/uuid.py,sha256=pA6Cd-1QSRuUpz0PxWAGRdG01hW7bpIicOhhJvAvDkQ,711
81
84
  clearskies/columns.py,sha256=3PgLopL1l20vVWaUqOJkwXMr06a-gFHEsbExfOWVB4I,5925
82
85
  clearskies/condition_parser.py,sha256=IXl51-rDxws7-nAtTVu_m6gTegtpkDnoGAFX2MTPDIo,6589
@@ -189,7 +192,7 @@ clearskies/tests/simple_api/models/__init__.py,sha256=nUA0W6fgXw_Bxa9CudkaDkC80t
189
192
  clearskies/tests/simple_api/models/status.py,sha256=PEhPbaQh5qdUNHp8O0gz91LOLENAEBtqSaHxUPXchaM,699
190
193
  clearskies/tests/simple_api/models/user.py,sha256=5_P4Tp1tTdX7PkMJ__epPM5MA7JAeVYGas69vcWloLc,819
191
194
  clearskies/tests/simple_api/users_api.py,sha256=KYXCgEofDxHeRdQK67txN5oYUPvxxmB8JTku7L-apk4,2344
192
- clear_skies-1.18.32.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
193
- clear_skies-1.18.32.dist-info/METADATA,sha256=_HzZ08JOblFHCDkpP8QbG0Q7VKbqYBDRR962zrsorpQ,1367
194
- clear_skies-1.18.32.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
195
- clear_skies-1.18.32.dist-info/RECORD,,
195
+ clear_skies-1.19.1.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
196
+ clear_skies-1.19.1.dist-info/METADATA,sha256=DX_73NV_YKj9ZGgLCWUMttObuA9R60kC4_EQXfTVgqs,1366
197
+ clear_skies-1.19.1.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
198
+ clear_skies-1.19.1.dist-info/RECORD,,
@@ -9,7 +9,9 @@ from .created_by_header import CreatedByHeader
9
9
  from .created_by_ip import CreatedByIp
10
10
  from .created_by_routing_data import CreatedByRoutingData
11
11
  from .created_by_user_agent import CreatedByUserAgent
12
+ from .created_micro import CreatedMicro
12
13
  from .datetime import DateTime
14
+ from .datetime_micro import DateTimeMicro
13
15
  from .email import Email
14
16
  from .float import Float
15
17
  from .has_many import HasMany
@@ -20,6 +22,7 @@ from .many_to_many_with_data import ManyToManyWithData
20
22
  from .select import Select
21
23
  from .string import String
22
24
  from .updated import Updated
25
+ from .updated_micro import UpdatedMicro
23
26
  from .uuid import UUID
24
27
 
25
28
 
@@ -67,10 +70,18 @@ def created_by_user_agent(name, **kwargs):
67
70
  return build_column_config(name, CreatedByUserAgent, **kwargs)
68
71
 
69
72
 
73
+ def created_micro(name, **kwargs):
74
+ return build_column_config(name, CreatedMicro, **kwargs)
75
+
76
+
70
77
  def datetime(name, **kwargs):
71
78
  return build_column_config(name, DateTime, **kwargs)
72
79
 
73
80
 
81
+ def datetime_micro(name, **kwargs):
82
+ return build_column_config(name, DateTimeMicro, **kwargs)
83
+
84
+
74
85
  def email(name, **kwargs):
75
86
  return build_column_config(name, Email, **kwargs)
76
87
 
@@ -111,6 +122,10 @@ def updated(name, **kwargs):
111
122
  return build_column_config(name, Updated, **kwargs)
112
123
 
113
124
 
125
+ def updated_micro(name, **kwargs):
126
+ return build_column_config(name, UpdatedMicro, **kwargs)
127
+
128
+
114
129
  def uuid(name, **kwargs):
115
130
  return build_column_config(name, UUID, **kwargs)
116
131
 
@@ -127,15 +142,21 @@ __all__ = [
127
142
  "CategoryTree",
128
143
  "Column",
129
144
  "created",
145
+ "created_micro",
130
146
  "Created",
147
+ "CreatdMicro",
131
148
  "created_by_authorization_data",
132
149
  "CreatedByAuthorizationData",
133
150
  "created_by_ip",
134
151
  "CreatedByIp",
135
152
  "created_by_user_agent",
136
153
  "CreatedByUserAgent",
154
+ "CreatedMicro",
155
+ "created_micro",
137
156
  "datetime",
157
+ "datetime_micro",
138
158
  "DateTime",
159
+ "DateTimeMicro",
139
160
  "email",
140
161
  "Email",
141
162
  "float",
@@ -155,7 +176,9 @@ __all__ = [
155
176
  "string",
156
177
  "String",
157
178
  "updated",
179
+ "updated_micro",
158
180
  "Updated",
181
+ "UpdatedMicro",
159
182
  "uuid",
160
183
  "UUID",
161
184
  ]
@@ -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}
@@ -0,0 +1,26 @@
1
+ from .datetime_micro import DateTimeMicro
2
+
3
+
4
+ class CreatedMicro(DateTimeMicro):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
12
+ super().__init__(di)
13
+ self.datetime = datetime
14
+
15
+ @property
16
+ def is_writeable(self):
17
+ return False
18
+
19
+ def pre_save(self, data, model):
20
+ if model.exists:
21
+ return data
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}
@@ -6,12 +6,28 @@ from ..autodoc.schema import DateTime as AutoDocDateTime
6
6
 
7
7
  class DateTime(Column):
8
8
  _auto_doc_class = AutoDocDateTime
9
+ _date_format = "%Y-%m-%d %H:%M:%S"
10
+ _default_date = "0000-00-00 00:00:00"
11
+
12
+ my_configs = [
13
+ "date_format",
14
+ "default_date",
15
+ ]
9
16
 
10
17
  def __init__(self, di):
11
18
  super().__init__(di)
12
19
 
20
+ def _finalize_configuration(self, configuration):
21
+ return {
22
+ **{
23
+ "date_format": self._date_format,
24
+ "default_date": self._default_date,
25
+ },
26
+ **super()._finalize_configuration(configuration),
27
+ }
28
+
13
29
  def from_backend(self, value):
14
- if not value or value == "0000-00-00 00:00:00":
30
+ if not value or value == self.config("default_date"):
15
31
  date = None
16
32
  elif type(value) == str:
17
33
  date = dateparser.parse(value)
@@ -24,14 +40,14 @@ class DateTime(Column):
24
40
  return data
25
41
 
26
42
  # hopefully this is a Python datetime object in UTC timezone...
27
- return {**data, **{self.name: data[self.name].strftime("%Y-%m-%d %H:%M:%S")}}
43
+ return {**data, **{self.name: data[self.name].strftime(self.config("date_format"))}}
28
44
 
29
45
  def to_json(self, model):
30
46
  datetime = model.get(self.name, silent=True)
31
47
  return {self.name: datetime.isoformat() if datetime else None}
32
48
 
33
49
  def build_condition(self, value, operator=None, column_prefix=""):
34
- date = dateparser.parse(value).astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
50
+ date = dateparser.parse(value).astimezone(timezone.utc).strftime(self.config("date_format"))
35
51
  if not operator:
36
52
  operator = "="
37
53
  return f"{column_prefix}{self.name}{operator}{date}"
@@ -0,0 +1,12 @@
1
+ from .datetime import DateTime
2
+ from datetime import datetime, timezone
3
+ import dateparser
4
+ from ..autodoc.schema import DateTime as AutoDocDateTime
5
+
6
+
7
+ class DateTimeMicro(DateTime):
8
+ _date_format = "%Y-%m-%d %H:%M:%S.%f"
9
+ _default_date = "0000-00-00 00:00:00.000000"
10
+
11
+ def __init__(self, di):
12
+ super().__init__(di)
@@ -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}
@@ -0,0 +1,24 @@
1
+ from .datetime_micro import DateTimeMicro
2
+
3
+
4
+ class UpdatedMicro(DateTimeMicro):
5
+ my_configs = [
6
+ "date_format",
7
+ "default_date",
8
+ "utc",
9
+ ]
10
+
11
+ def __init__(self, di, datetime):
12
+ super().__init__(di)
13
+ self.datetime = datetime
14
+
15
+ @property
16
+ def is_writeable(self):
17
+ return False
18
+
19
+ def pre_save(self, data, model):
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}