cloudoll 2.2.17__tar.gz → 2.2.18__tar.gz
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.
- {cloudoll-2.2.17 → cloudoll-2.2.18}/PKG-INFO +1 -1
- cloudoll-2.2.18/cloudoll/__init__.py +1 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/field.py +67 -1
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/PKG-INFO +1 -1
- cloudoll-2.2.17/cloudoll/__init__.py +0 -1
- {cloudoll-2.2.17 → cloudoll-2.2.18}/LICENSE +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/README.md +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/__main__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/cli.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/error/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/error/errors.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/logging/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/mail/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/mail/smtp.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/base.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/err.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/model.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/mysql.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/parse.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/orm/postgres.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/robot/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/robot/dingtalk.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/robot/feishu.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/robot/slack.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/utils/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/utils/common.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/utils/m2d.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/utils/patch_loop.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/utils/watch.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/__init__.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/exception.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/html.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/http.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/jwt.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll/web/settings.py +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/SOURCES.txt +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/dependency_links.txt +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/entry_points.txt +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/requires.txt +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/cloudoll.egg-info/top_level.txt +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/setup.cfg +0 -0
- {cloudoll-2.2.17 → cloudoll-2.2.18}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.2.18"
|
|
@@ -31,6 +31,17 @@ OP = objdict(
|
|
|
31
31
|
AVG="AVG",
|
|
32
32
|
AS="AS",
|
|
33
33
|
SUM="SUM",
|
|
34
|
+
IS_TODAY="IS_TODAY",
|
|
35
|
+
IS_THIS_WEEK="THIS_WEEK",
|
|
36
|
+
IS_THIS_MONTH="THIS_MONTH",
|
|
37
|
+
IS_THIS_YEAR="THIS_YEAR",
|
|
38
|
+
BEFORE_DAYS="BEFORE_DAYS",
|
|
39
|
+
BEFORE_HOURS="BEFORE_HOURS",
|
|
40
|
+
BEFORE_MINUTES="BEFORE_MINUTES",
|
|
41
|
+
BEFORE_YEARS="BEFORE_YEARS",
|
|
42
|
+
AFTER_YEARS="AFTER_YEARS",
|
|
43
|
+
AFTER_MONTHS="AFTER_MONTHS",
|
|
44
|
+
BEFORE_MONTHS="BEFORE_MONTHS",
|
|
34
45
|
DATE_FORMAT="DATE_FORMAT",
|
|
35
46
|
JSON_CONTAINS_OBJECT="JSON_CONTAINS_OBJECT",
|
|
36
47
|
JSON_CONTAINS_ARRAY="JSON_CONTAINS_ARRAY",
|
|
@@ -115,6 +126,39 @@ class FieldBase(object):
|
|
|
115
126
|
def date_format(self, args):
|
|
116
127
|
return Function(self, OP.DATE_FORMAT, args)
|
|
117
128
|
|
|
129
|
+
def is_today(self):
|
|
130
|
+
return Function(self, OP.IS_TODAY)
|
|
131
|
+
|
|
132
|
+
def is_this_week(self):
|
|
133
|
+
return Function(self, OP.IS_THIS_WEEK)
|
|
134
|
+
|
|
135
|
+
def is_this_month(self):
|
|
136
|
+
return Function(self, OP.IS_THIS_MONTH)
|
|
137
|
+
|
|
138
|
+
def is_this_year(self):
|
|
139
|
+
return Function(self, OP.IS_THIS_YEAR)
|
|
140
|
+
|
|
141
|
+
def before_days(self, args):
|
|
142
|
+
return Function(self, OP.BEFORE_DAYS, args)
|
|
143
|
+
|
|
144
|
+
def before_hours(self, args):
|
|
145
|
+
return Function(self, OP.BEFORE_HOURS, args)
|
|
146
|
+
|
|
147
|
+
def before_minutes(self, args):
|
|
148
|
+
return Function(self, OP.BEFORE_MINUTES, args)
|
|
149
|
+
|
|
150
|
+
def before_years(self, args):
|
|
151
|
+
return Function(self, OP.BEFORE_YEARS, args)
|
|
152
|
+
|
|
153
|
+
def before_months(self, args):
|
|
154
|
+
return Function(self, OP.BEFORE_MONTHS, args)
|
|
155
|
+
|
|
156
|
+
def after_months(self, args):
|
|
157
|
+
return Function(self, OP.AFTER_MONTHS, args)
|
|
158
|
+
|
|
159
|
+
def after_years(self, args):
|
|
160
|
+
return Function(self, OP.AFTER_YEARS, args)
|
|
161
|
+
|
|
118
162
|
def json_contains_object(self, key, value):
|
|
119
163
|
return Function(self, OP.JSON_CONTAINS_OBJECT, (key, value))
|
|
120
164
|
|
|
@@ -186,6 +230,28 @@ class Function(FieldBase):
|
|
|
186
230
|
# todo:
|
|
187
231
|
if op == OP.DATE_FORMAT:
|
|
188
232
|
return f"{op}({col_name},?)", [self.rpt]
|
|
233
|
+
elif op == OP.IS_TODAY:
|
|
234
|
+
return f"DATE({col_name}) = CURDATE()", None
|
|
235
|
+
elif op == OP.IS_THIS_WEEK:
|
|
236
|
+
return f"WEEK({col_name}, 1) = WEEK(CURDATE(), 1)", None
|
|
237
|
+
elif op == OP.IS_THIS_MONTH:
|
|
238
|
+
return f"MONTH({col_name}) = MONTH(CURDATE())", None
|
|
239
|
+
elif op == OP.IS_THIS_YEAR:
|
|
240
|
+
return f"YEAR({col_name}) = YEAR(CURDATE())", None
|
|
241
|
+
elif op == OP.BEFORE_DAYS:
|
|
242
|
+
return f"DATE({col_name}) >= CURDATE() - INTERVAL {self.rpt} DAY", None
|
|
243
|
+
elif op == OP.BEFORE_HOURS:
|
|
244
|
+
return f"{col_name} >= NOW() - INTERVAL {self.rpt} HOUR", None
|
|
245
|
+
elif op == OP.BEFORE_MINUTES:
|
|
246
|
+
return f"{col_name} >= NOW() - INTERVAL {self.rpt} MINUTE", None
|
|
247
|
+
elif op == OP.BEFORE_YEARS:
|
|
248
|
+
return f"{col_name} >= DATE_SUB(NOW(), INTERVAL {self.rpt} YEAR)", None
|
|
249
|
+
elif op == OP.BEFORE_MONTHS:
|
|
250
|
+
return f"{col_name} >= DATE_SUB(NOW(), INTERVAL {self.rpt} MONTH)", None
|
|
251
|
+
elif op == OP.AFTER_YEARS:
|
|
252
|
+
return f"{col_name} < DATE_SUB(NOW(), INTERVAL {self.rpt} YEAR)", None
|
|
253
|
+
elif op == OP.AFTER_MONTHS:
|
|
254
|
+
return f"{col_name} < DATE_SUB(NOW(), INTERVAL {self.rpt} MONTH)", None
|
|
189
255
|
elif op == OP.JSON_CONTAINS_OBJECT:
|
|
190
256
|
_k, _v = self.rpt
|
|
191
257
|
key = _k.full_name if isinstance(_k, Field) else f"'{_k}'"
|
|
@@ -328,4 +394,4 @@ class Field(FieldBase):
|
|
|
328
394
|
|
|
329
395
|
@value.setter
|
|
330
396
|
def value(self, value):
|
|
331
|
-
self._value = value
|
|
397
|
+
self._value = value
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.2.17"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|