velocity-python 0.0.116__py3-none-any.whl → 0.0.118__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 velocity-python might be problematic. Click here for more details.

Files changed (36) hide show
  1. velocity/__init__.py +3 -1
  2. velocity/aws/__init__.py +3 -0
  3. velocity/aws/amplify.py +10 -6
  4. velocity/aws/handlers/__init__.py +2 -0
  5. velocity/aws/handlers/base_handler.py +245 -0
  6. velocity/aws/handlers/context.py +58 -41
  7. velocity/aws/handlers/exceptions.py +16 -0
  8. velocity/aws/handlers/lambda_handler.py +15 -84
  9. velocity/aws/handlers/response.py +1 -1
  10. velocity/aws/handlers/sqs_handler.py +23 -144
  11. velocity/db/__init__.py +16 -1
  12. velocity/db/core/decorators.py +0 -1
  13. velocity/db/core/engine.py +33 -31
  14. velocity/db/core/exceptions.py +3 -0
  15. velocity/db/core/result.py +30 -24
  16. velocity/db/core/row.py +3 -1
  17. velocity/db/core/table.py +6 -5
  18. velocity/db/exceptions.py +35 -18
  19. velocity/db/servers/mysql.py +2 -3
  20. velocity/db/servers/postgres/__init__.py +10 -12
  21. velocity/db/servers/postgres/sql.py +36 -17
  22. velocity/db/servers/sqlite.py +2 -2
  23. velocity/db/servers/sqlserver.py +3 -3
  24. velocity/db/servers/tablehelper.py +117 -91
  25. velocity/db/utils.py +62 -47
  26. velocity/misc/conv/__init__.py +2 -0
  27. velocity/misc/conv/iconv.py +5 -4
  28. velocity/misc/export.py +1 -4
  29. velocity/misc/merge.py +1 -1
  30. velocity/misc/tools.py +0 -1
  31. {velocity_python-0.0.116.dist-info → velocity_python-0.0.118.dist-info}/METADATA +1 -1
  32. velocity_python-0.0.118.dist-info/RECORD +58 -0
  33. velocity_python-0.0.116.dist-info/RECORD +0 -56
  34. {velocity_python-0.0.116.dist-info → velocity_python-0.0.118.dist-info}/WHEEL +0 -0
  35. {velocity_python-0.0.116.dist-info → velocity_python-0.0.118.dist-info}/licenses/LICENSE +0 -0
  36. {velocity_python-0.0.116.dist-info → velocity_python-0.0.118.dist-info}/top_level.txt +0 -0
velocity/db/utils.py CHANGED
@@ -5,115 +5,123 @@ This module provides utility functions to handle common database operations
5
5
  safely, including sorting with None values and other edge cases.
6
6
  """
7
7
 
8
- from typing import Any, Callable, List, Optional, Union
8
+ from typing import Any, Callable, List
9
9
 
10
10
 
11
11
  def safe_sort_key_none_last(field_name: str) -> Callable[[dict], tuple]:
12
12
  """
13
13
  Create a sort key function that places None values at the end.
14
-
14
+
15
15
  Args:
16
16
  field_name: Name of the field to sort by
17
-
17
+
18
18
  Returns:
19
19
  A function suitable for use as a sort key that handles None values
20
-
20
+
21
21
  Example:
22
22
  rows = [{"date": "2024-01"}, {"date": None}, {"date": "2023-12"}]
23
23
  sorted_rows = sorted(rows, key=safe_sort_key_none_last("date"))
24
24
  # Result: [{"date": "2023-12"}, {"date": "2024-01"}, {"date": None}]
25
25
  """
26
+
26
27
  def sort_key(row: dict) -> tuple:
27
28
  value = row.get(field_name)
28
29
  if value is None:
29
30
  return (1, "") # None values sort last
30
31
  return (0, value)
31
-
32
+
32
33
  return sort_key
33
34
 
34
35
 
35
36
  def safe_sort_key_none_first(field_name: str) -> Callable[[dict], tuple]:
36
37
  """
37
38
  Create a sort key function that places None values at the beginning.
38
-
39
+
39
40
  Args:
40
41
  field_name: Name of the field to sort by
41
-
42
+
42
43
  Returns:
43
44
  A function suitable for use as a sort key that handles None values
44
-
45
+
45
46
  Example:
46
47
  rows = [{"date": "2024-01"}, {"date": None}, {"date": "2023-12"}]
47
48
  sorted_rows = sorted(rows, key=safe_sort_key_none_first("date"))
48
49
  # Result: [{"date": None}, {"date": "2023-12"}, {"date": "2024-01"}]
49
50
  """
51
+
50
52
  def sort_key(row: dict) -> tuple:
51
53
  value = row.get(field_name)
52
54
  if value is None:
53
55
  return (0, "") # None values sort first
54
56
  return (1, value)
55
-
57
+
56
58
  return sort_key
57
59
 
58
60
 
59
- def safe_sort_key_with_default(field_name: str, default_value: Any = "") -> Callable[[dict], Any]:
61
+ def safe_sort_key_with_default(
62
+ field_name: str, default_value: Any = ""
63
+ ) -> Callable[[dict], Any]:
60
64
  """
61
65
  Create a sort key function that replaces None values with a default.
62
-
66
+
63
67
  Args:
64
68
  field_name: Name of the field to sort by
65
69
  default_value: Value to use for None entries
66
-
70
+
67
71
  Returns:
68
72
  A function suitable for use as a sort key that handles None values
69
-
73
+
70
74
  Example:
71
75
  rows = [{"date": "2024-01"}, {"date": None}, {"date": "2023-12"}]
72
76
  sorted_rows = sorted(rows, key=safe_sort_key_with_default("date", "1900-01"))
73
77
  # Result: [{"date": None}, {"date": "2023-12"}, {"date": "2024-01"}]
74
78
  """
79
+
75
80
  def sort_key(row: dict) -> Any:
76
81
  value = row.get(field_name)
77
82
  return default_value if value is None else value
78
-
83
+
79
84
  return sort_key
80
85
 
81
86
 
82
- def safe_sort_rows(rows: List[dict], field_name: str,
83
- none_handling: str = "last",
84
- default_value: Any = "",
85
- reverse: bool = False) -> List[dict]:
87
+ def safe_sort_rows(
88
+ rows: List[dict],
89
+ field_name: str,
90
+ none_handling: str = "last",
91
+ default_value: Any = "",
92
+ reverse: bool = False,
93
+ ) -> List[dict]:
86
94
  """
87
95
  Safely sort a list of dictionaries by a field that may contain None values.
88
-
96
+
89
97
  Args:
90
98
  rows: List of dictionaries to sort
91
99
  field_name: Name of the field to sort by
92
100
  none_handling: How to handle None values - "first", "last", or "default"
93
101
  default_value: Default value to use when none_handling is "default"
94
102
  reverse: Whether to reverse the sort order
95
-
103
+
96
104
  Returns:
97
105
  New list of dictionaries sorted by the specified field
98
-
106
+
99
107
  Raises:
100
108
  ValueError: If none_handling is not a valid option
101
-
109
+
102
110
  Example:
103
111
  rows = [
104
112
  {"name": "Alice", "date": "2024-01"},
105
113
  {"name": "Bob", "date": None},
106
114
  {"name": "Charlie", "date": "2023-12"}
107
115
  ]
108
-
116
+
109
117
  # None values last
110
118
  sorted_rows = safe_sort_rows(rows, "date")
111
-
112
- # None values first
119
+
120
+ # None values first
113
121
  sorted_rows = safe_sort_rows(rows, "date", none_handling="first")
114
-
122
+
115
123
  # Replace None with default
116
- sorted_rows = safe_sort_rows(rows, "date", none_handling="default",
124
+ sorted_rows = safe_sort_rows(rows, "date", none_handling="default",
117
125
  default_value="1900-01")
118
126
  """
119
127
  if none_handling == "last":
@@ -123,37 +131,39 @@ def safe_sort_rows(rows: List[dict], field_name: str,
123
131
  elif none_handling == "default":
124
132
  key_func = safe_sort_key_with_default(field_name, default_value)
125
133
  else:
126
- raise ValueError(f"Invalid none_handling option: {none_handling}. "
127
- "Must be 'first', 'last', or 'default'")
128
-
134
+ raise ValueError(
135
+ f"Invalid none_handling option: {none_handling}. "
136
+ "Must be 'first', 'last', or 'default'"
137
+ )
138
+
129
139
  return sorted(rows, key=key_func, reverse=reverse)
130
140
 
131
141
 
132
142
  def group_by_fields(rows: List[dict], *field_names: str) -> dict:
133
143
  """
134
144
  Group rows by one or more field values.
135
-
145
+
136
146
  Args:
137
147
  rows: List of dictionaries to group
138
148
  *field_names: Names of fields to group by
139
-
149
+
140
150
  Returns:
141
151
  Dictionary where keys are tuples of field values and values are lists of rows
142
-
152
+
143
153
  Example:
144
154
  rows = [
145
155
  {"email": "alice@example.com", "type": "premium", "amount": 100},
146
156
  {"email": "alice@example.com", "type": "basic", "amount": 50},
147
157
  {"email": "bob@example.com", "type": "premium", "amount": 100},
148
158
  ]
149
-
159
+
150
160
  # Group by email only
151
161
  groups = group_by_fields(rows, "email")
152
162
  # Result: {
153
163
  # ("alice@example.com",): [row1, row2],
154
164
  # ("bob@example.com",): [row3]
155
165
  # }
156
-
166
+
157
167
  # Group by email and type
158
168
  groups = group_by_fields(rows, "email", "type")
159
169
  # Result: {
@@ -168,34 +178,37 @@ def group_by_fields(rows: List[dict], *field_names: str) -> dict:
168
178
  if key not in groups:
169
179
  groups[key] = []
170
180
  groups[key].append(row)
171
-
181
+
172
182
  return groups
173
183
 
174
184
 
175
- def safe_sort_grouped_rows(grouped_rows: dict, field_name: str,
176
- none_handling: str = "last",
177
- default_value: Any = "",
178
- reverse: bool = False) -> dict:
185
+ def safe_sort_grouped_rows(
186
+ grouped_rows: dict,
187
+ field_name: str,
188
+ none_handling: str = "last",
189
+ default_value: Any = "",
190
+ reverse: bool = False,
191
+ ) -> dict:
179
192
  """
180
193
  Safely sort rows within each group of a grouped result.
181
-
194
+
182
195
  Args:
183
196
  grouped_rows: Dictionary of grouped rows (from group_by_fields)
184
197
  field_name: Name of the field to sort by within each group
185
198
  none_handling: How to handle None values - "first", "last", or "default"
186
199
  default_value: Default value to use when none_handling is "default"
187
200
  reverse: Whether to reverse the sort order
188
-
201
+
189
202
  Returns:
190
203
  Dictionary with the same keys but sorted lists as values
191
-
204
+
192
205
  Example:
193
206
  # After grouping payment profiles by email and card number
194
207
  groups = group_by_fields(payment_profiles, "email_address", "card_number")
195
-
208
+
196
209
  # Sort each group by expiration date, with None values last
197
210
  sorted_groups = safe_sort_grouped_rows(groups, "expiration_date")
198
-
211
+
199
212
  # Now process each sorted group
200
213
  for group_key, sorted_group in sorted_groups.items():
201
214
  for idx, row in enumerate(sorted_group):
@@ -204,6 +217,8 @@ def safe_sort_grouped_rows(grouped_rows: dict, field_name: str,
204
217
  """
205
218
  result = {}
206
219
  for key, rows in grouped_rows.items():
207
- result[key] = safe_sort_rows(rows, field_name, none_handling, default_value, reverse)
208
-
220
+ result[key] = safe_sort_rows(
221
+ rows, field_name, none_handling, default_value, reverse
222
+ )
223
+
209
224
  return result
@@ -1,2 +1,4 @@
1
1
  from . import iconv
2
2
  from . import oconv
3
+
4
+ __all__ = ["iconv", "oconv"]
@@ -1,6 +1,7 @@
1
1
  import re
2
2
  import ast
3
3
  import codecs
4
+ import decimal
4
5
  from decimal import Decimal, ROUND_HALF_UP
5
6
  from email.utils import parseaddr
6
7
  from datetime import datetime
@@ -224,7 +225,7 @@ def money(data: str) -> Optional[Decimal]:
224
225
  return None
225
226
  try:
226
227
  return Decimal(cleaned)
227
- except:
228
+ except (ValueError, TypeError, decimal.InvalidOperation):
228
229
  return None
229
230
 
230
231
 
@@ -246,7 +247,7 @@ def round_to(
246
247
  cleaned = re.sub(r"[^0-9\.\-+]", "", val_str)
247
248
  try:
248
249
  as_dec = Decimal(cleaned)
249
- except:
250
+ except (ValueError, TypeError, decimal.InvalidOperation):
250
251
  return None
251
252
  return as_dec.quantize(Decimal(10) ** -precision, rounding=ROUND_HALF_UP)
252
253
 
@@ -269,7 +270,7 @@ def decimal_val(data: str) -> Optional[Decimal]:
269
270
  return None
270
271
  try:
271
272
  return Decimal(cleaned)
272
- except:
273
+ except (ValueError, TypeError, decimal.InvalidOperation):
273
274
  return None
274
275
 
275
276
 
@@ -305,7 +306,7 @@ def to_list(data: Union[str, list, None]) -> Optional[list]:
305
306
  if data_str.startswith("[") and data_str.endswith("]"):
306
307
  try:
307
308
  return ast.literal_eval(data_str)
308
- except:
309
+ except (ValueError, SyntaxError):
309
310
  return [data_str] # fallback: treat as a single string
310
311
  return [data_str]
311
312
 
velocity/misc/export.py CHANGED
@@ -1,7 +1,4 @@
1
- import decimal
2
- import json
3
- from datetime import datetime, date, time, timedelta
4
- from typing import Union, List, Dict
1
+ from typing import List, Dict
5
2
  from io import BytesIO
6
3
  import base64
7
4
  import openpyxl
velocity/misc/merge.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from copy import deepcopy
2
2
  from functools import reduce
3
- from typing import Dict, List, Any
3
+ from typing import Dict, Any
4
4
 
5
5
 
6
6
  def deep_merge(*dicts: Dict[str, Any], update: bool = False) -> Dict[str, Any]:
velocity/misc/tools.py CHANGED
@@ -1,5 +1,4 @@
1
1
  import os
2
- import inspect
3
2
  import hashlib
4
3
 
5
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: velocity-python
3
- Version: 0.0.116
3
+ Version: 0.0.118
4
4
  Summary: A rapid application development library for interfacing with data storage
5
5
  Author-email: Velocity Team <info@codeclubs.org>
6
6
  License-Expression: MIT
@@ -0,0 +1,58 @@
1
+ velocity/__init__.py,sha256=DmSkPb91YEgRa7GbGjG39khWmXgqyJj5fc5fWt1-D0Y,147
2
+ velocity/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ velocity/app/invoices.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ velocity/app/orders.py,sha256=W-HAXEwY8-IFXbKh82HnMeRVZM7P-TWGEQOWtkLIzI4,6298
5
+ velocity/app/payments.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ velocity/app/purchase_orders.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ velocity/aws/__init__.py,sha256=0nEsX68Q4I7Z7ybECJnNWsC8QhWOijn4NpaFgyzyfXA,685
8
+ velocity/aws/amplify.py,sha256=VgSgon0XxboIozz0tKyUohgLIigelhe4W7EH8kwbnLg,15330
9
+ velocity/aws/handlers/__init__.py,sha256=4-NKj8dBzjYEdIlNdfm_Ip5mI0oOGcpjjBcMwU42yhQ,227
10
+ velocity/aws/handlers/base_handler.py,sha256=rnEX5X4a5P-FO9Va0-9ZJYCqfqtjvuf101UTz1Vfqyg,7822
11
+ velocity/aws/handlers/context.py,sha256=WWnEDbUOuTC2Khu-2s2Ago10jRYGPPvrXmHXVRKvYDw,8353
12
+ velocity/aws/handlers/exceptions.py,sha256=i4wcB8ZSWUHglX2xnesDlWLsU9AMYU72cHCWRBDmjQ8,361
13
+ velocity/aws/handlers/lambda_handler.py,sha256=yyO42yPgCyp79mzYc3RNGjDwkOV_NTNQQmG7oXyWvpo,4043
14
+ velocity/aws/handlers/response.py,sha256=s2Kw7yv5zAir1mEmfv6yBVIvRcRQ__xyryf1SrvtiRc,9317
15
+ velocity/aws/handlers/sqs_handler.py,sha256=wx1fugE-uSallIapeNbtDEbvB7ydetn6MvhFZ3mXk-0,3149
16
+ velocity/db/__init__.py,sha256=2_6b3cdInPZDtya8kkW_7xyAullwneF-ll5RZaNawq8,845
17
+ velocity/db/exceptions.py,sha256=XHREJvzNctrtYE-ScBRLnbk7thxTswkfWojKhMmBmd8,2185
18
+ velocity/db/utils.py,sha256=IoXeAL_0wZE15gbxlb2TtNdHzUSV9bIvw8jNkqjz38o,7020
19
+ velocity/db/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ velocity/db/core/column.py,sha256=tAr8tL3a2nyaYpNHhGl508FrY_pGZTzyYgjAV5CEBv4,4092
21
+ velocity/db/core/database.py,sha256=3zNGItklu9tZCKsbx2T2vCcU1so8AL9PPL0DLjvaz6s,3554
22
+ velocity/db/core/decorators.py,sha256=OjWnuvneObKx0RBYlC4_4QrdzwQY6lJ4H0eIMqPBl0s,4557
23
+ velocity/db/core/engine.py,sha256=xDjlfDvdQ0A3Ug3w-isgnVAVkKSg0KX0iChhRyPvNJw,18463
24
+ velocity/db/core/exceptions.py,sha256=9jhPtxagHZtGdMcSwa2uRe82Gqydla5fWCqs4v-Ah8U,1030
25
+ velocity/db/core/result.py,sha256=b0ie3yZAOj9S57x32uFFGKZ95zhImmZ0iXl0X1qYszc,12813
26
+ velocity/db/core/row.py,sha256=yqxm03uEDy3oSbnkCtKyiqFdSqG3zXTq2HIHYKOvPY4,7291
27
+ velocity/db/core/sequence.py,sha256=VMBc0ZjGnOaWTwKW6xMNTdP8rZ2umQ8ml4fHTTwuGq4,3904
28
+ velocity/db/core/table.py,sha256=EVoZZ6s21ZVqqT7VgH9Rr0SsFbsLLk6gtwvKwgbcWTQ,34708
29
+ velocity/db/core/transaction.py,sha256=unjmVkkfb7D8Wow6V8V8aLaxUZo316i--ksZxc4-I1Q,6613
30
+ velocity/db/servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ velocity/db/servers/mysql.py,sha256=UGsHOpbRwDDI1o7LnkDeIZ5IgQ48vQEae_Bd8E0nv64,20880
32
+ velocity/db/servers/mysql_reserved.py,sha256=CYdZJBOpS-ptImaRZcmVLumdUdbFuf9Tfdzu_mUT5wY,3507
33
+ velocity/db/servers/sqlite.py,sha256=en1whjOE98JINXTHPsAA-qUqS_ts_eQP5ImqeLamk4U,33234
34
+ velocity/db/servers/sqlite_reserved.py,sha256=-xmjl-Hgu6lKqkCAXq_6U8_aJX6gvaMgLMLdCt-Ej7o,3006
35
+ velocity/db/servers/sqlserver.py,sha256=Lz8H4dg1ql34J3ufSM9o7by4wguJXACsWESp_zxgAFU,29914
36
+ velocity/db/servers/sqlserver_reserved.py,sha256=3LGQYU0qfvk6AbKety96gbzzfLbZ0dNHDPLxKGvvi4Q,4596
37
+ velocity/db/servers/tablehelper.py,sha256=Q48ObN5KD_U2sBP0GUcjaQjKeE4Hr351sPQirwQ0_1s,22163
38
+ velocity/db/servers/postgres/__init__.py,sha256=saeE5iySVYMHCwlKMsHFYdPJmuLy33I9BpPUE0czUas,457
39
+ velocity/db/servers/postgres/operators.py,sha256=A2T1qFwhzPl0fdXVhLZJhh5Qfx-qF8oZsDnxnq2n_V8,389
40
+ velocity/db/servers/postgres/reserved.py,sha256=5tKLaqFV-HrWRj-nsrxl5KGbmeM3ukn_bPZK36XEu8M,3648
41
+ velocity/db/servers/postgres/sql.py,sha256=kHGiJv2KCmdL4LnyPnbd1PZH3J0smTWpRF2EuUMsBnw,41796
42
+ velocity/db/servers/postgres/types.py,sha256=Wa45ppVf_pdWul-jYWFRGMl6IdSq8dAp10SKnhL7osQ,3757
43
+ velocity/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ velocity/misc/db.py,sha256=MPgt-kkukKR_Wh_S_5W-MyDgaeoZ4YLoDJ54wU2ppm4,2830
45
+ velocity/misc/export.py,sha256=jm-NKI0r-d0fS8B7axW0zHf4Qx0RgEJXCTMKRMdeaps,5110
46
+ velocity/misc/format.py,sha256=jwZDEniBMTyh4UysiOdy14OWyd7-hseBNKFRZDckuQM,3214
47
+ velocity/misc/mail.py,sha256=BrxDqeVsOd0epyJKwrHA-owzs6di2oLA_qJskoTux-c,2553
48
+ velocity/misc/merge.py,sha256=Mv42G9SGi5WEiiAyzdSRNJq-byrx72WI9MSISq4edVU,1879
49
+ velocity/misc/timer.py,sha256=cN3aS0t6HLlhYfF2Ir6ihJehxNrWf9ebaLzXUaWRKEA,1637
50
+ velocity/misc/tools.py,sha256=4TWa-ja2gMZJr1EhqTKsJNirvDclCruyRGMttPhCIGw,1487
51
+ velocity/misc/conv/__init__.py,sha256=qhHFl_UqW5tjPm--6shO171IysWIdH3mmp3uwiQVyqY,70
52
+ velocity/misc/conv/iconv.py,sha256=16aPWtreHCxmpl5ufku0KWWZj8PIUFI5J1dP0aXyM3o,10794
53
+ velocity/misc/conv/oconv.py,sha256=h5Lo05DqOQnxoD3y6Px_MQP_V-pBbWf8Hkgkb9Xp1jk,6032
54
+ velocity_python-0.0.118.dist-info/licenses/LICENSE,sha256=aoN245GG8s9oRUU89KNiGTU4_4OtnNmVi4hQeChg6rM,1076
55
+ velocity_python-0.0.118.dist-info/METADATA,sha256=0A2e7hzaAk3f6djTEfF1hur_ZQiBHYXs-cufMApAQMU,34262
56
+ velocity_python-0.0.118.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
57
+ velocity_python-0.0.118.dist-info/top_level.txt,sha256=JW2vJPmodgdgSz7H6yoZvnxF8S3fTMIv-YJWCT1sNW0,9
58
+ velocity_python-0.0.118.dist-info/RECORD,,
@@ -1,56 +0,0 @@
1
- velocity/__init__.py,sha256=9HZOcPjfok_APV3xMWucAvFzJMi0ieQU4-E1pepEZZs,107
2
- velocity/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- velocity/app/invoices.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- velocity/app/orders.py,sha256=W-HAXEwY8-IFXbKh82HnMeRVZM7P-TWGEQOWtkLIzI4,6298
5
- velocity/app/payments.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- velocity/app/purchase_orders.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- velocity/aws/__init__.py,sha256=tj9-NliYxRVPYLnnDuA4FMwBHbbH4ed8gtHgwRskNgY,647
8
- velocity/aws/amplify.py,sha256=n6ttzHmbF8tc0ZDN8LIA6s_fnkZ3ylu3AAUAYyD9MzE,15048
9
- velocity/aws/handlers/__init__.py,sha256=xnpFZJVlC2uoeeFW4zuPST8wA8ajaQDky5Y6iXZzi3A,172
10
- velocity/aws/handlers/context.py,sha256=tLGpMJ0i1KQZAiOPHO1GGn9KKZ_Z8gzZmc0bWp97VG8,8200
11
- velocity/aws/handlers/lambda_handler.py,sha256=k8ZTj4vhuDbB9xinQ1-s7hKgx5JznldTNT3-udfMw04,6391
12
- velocity/aws/handlers/response.py,sha256=LXhtizLKnVBWjtHyE0h0bk-NYDrRpj7CHa7tRz9KkC4,9324
13
- velocity/aws/handlers/sqs_handler.py,sha256=nqt8NMOc5yO-L6CZo7NjgR8Q4KPKTDFBO-0eHu6oxkY,7149
14
- velocity/db/__init__.py,sha256=t7YJT42U19Vkd4MMz5MhU8IFryKfblNPLJcPqzpb4HQ,566
15
- velocity/db/exceptions.py,sha256=oTXzdxP0GrraGrqRD1JgIVP5urO5yNN7A3IzTiAtNJ0,2173
16
- velocity/db/utils.py,sha256=3uUTLjMUC6g18bn7jRGBajYlXNFlBDZkGxIwQSBK_Y8,7298
17
- velocity/db/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- velocity/db/core/column.py,sha256=tAr8tL3a2nyaYpNHhGl508FrY_pGZTzyYgjAV5CEBv4,4092
19
- velocity/db/core/database.py,sha256=3zNGItklu9tZCKsbx2T2vCcU1so8AL9PPL0DLjvaz6s,3554
20
- velocity/db/core/decorators.py,sha256=76Jkr9XptXt8cvcgp1zbHfuL8uHzWy8lwfR29u-DVu4,4574
21
- velocity/db/core/engine.py,sha256=Yy6uwxT44a4oEHrFF312ChzFO01cR2W79BTryFgTe-s,18635
22
- velocity/db/core/exceptions.py,sha256=tuDniRqTX8Opc2d033LPJOI3Ux4NSwUcHqW729n-HXA,1027
23
- velocity/db/core/result.py,sha256=dgiOXH-iJXuDH4PbSTWVkn-heAkJQcXCC-gs0ZuqF94,12814
24
- velocity/db/core/row.py,sha256=zZ3zZbWjZkZfYAYuZJLHFJ8jdXc7dYv8Iyv9Ut8W8tE,7261
25
- velocity/db/core/sequence.py,sha256=VMBc0ZjGnOaWTwKW6xMNTdP8rZ2umQ8ml4fHTTwuGq4,3904
26
- velocity/db/core/table.py,sha256=oQFam6DwLnGiqa6v8Wys_yD_N4iWwfxGBwgLB5VUQSQ,34682
27
- velocity/db/core/transaction.py,sha256=unjmVkkfb7D8Wow6V8V8aLaxUZo316i--ksZxc4-I1Q,6613
28
- velocity/db/servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- velocity/db/servers/mysql.py,sha256=qHwlB_Mg02R7QFjD5QvJCorYYiP50CqEiQyZVl3uYns,20914
30
- velocity/db/servers/mysql_reserved.py,sha256=CYdZJBOpS-ptImaRZcmVLumdUdbFuf9Tfdzu_mUT5wY,3507
31
- velocity/db/servers/sqlite.py,sha256=X210a5pENT9PiVK7f16fxXzFwEsq8fSe58Vouv2xqlk,33234
32
- velocity/db/servers/sqlite_reserved.py,sha256=-xmjl-Hgu6lKqkCAXq_6U8_aJX6gvaMgLMLdCt-Ej7o,3006
33
- velocity/db/servers/sqlserver.py,sha256=0uGLEWRXiUhrOVTpEA1zvaKq1mcfiaCDp9r7gX-N71g,29914
34
- velocity/db/servers/sqlserver_reserved.py,sha256=3LGQYU0qfvk6AbKety96gbzzfLbZ0dNHDPLxKGvvi4Q,4596
35
- velocity/db/servers/tablehelper.py,sha256=qOHHKgQgUC0t_AUcY5oaPfjkRJS9wnMI4YJCDIb9Rew,22583
36
- velocity/db/servers/postgres/__init__.py,sha256=FUvXO3R5CtKCTGRim1geisIxXbiG_aQ_VFSQX9HGsjw,529
37
- velocity/db/servers/postgres/operators.py,sha256=A2T1qFwhzPl0fdXVhLZJhh5Qfx-qF8oZsDnxnq2n_V8,389
38
- velocity/db/servers/postgres/reserved.py,sha256=5tKLaqFV-HrWRj-nsrxl5KGbmeM3ukn_bPZK36XEu8M,3648
39
- velocity/db/servers/postgres/sql.py,sha256=vcdzj5PtlF3Qnt4Lh3y2OtaSuq4iLIUKyGP5F9vULE8,41576
40
- velocity/db/servers/postgres/types.py,sha256=Wa45ppVf_pdWul-jYWFRGMl6IdSq8dAp10SKnhL7osQ,3757
41
- velocity/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- velocity/misc/db.py,sha256=MPgt-kkukKR_Wh_S_5W-MyDgaeoZ4YLoDJ54wU2ppm4,2830
43
- velocity/misc/export.py,sha256=lATvwTe-Of6X7ZtzvJZiFghh9QlyMYZfDfQ_GJyt5yg,5197
44
- velocity/misc/format.py,sha256=jwZDEniBMTyh4UysiOdy14OWyd7-hseBNKFRZDckuQM,3214
45
- velocity/misc/mail.py,sha256=BrxDqeVsOd0epyJKwrHA-owzs6di2oLA_qJskoTux-c,2553
46
- velocity/misc/merge.py,sha256=EYtqwnckBllPO60tRALxFRuzmUQ7Wl0qZC6sCgyiZDA,1885
47
- velocity/misc/timer.py,sha256=cN3aS0t6HLlhYfF2Ir6ihJehxNrWf9ebaLzXUaWRKEA,1637
48
- velocity/misc/tools.py,sha256=_bGneHHA_BV-kUonzw5H3hdJ5AOJRCKfzhgpkFbGqIo,1502
49
- velocity/misc/conv/__init__.py,sha256=MLYF58QHjzfDSxb1rdnmLnuEQCa3gnhzzZ30CwZVvQo,40
50
- velocity/misc/conv/iconv.py,sha256=d4_BucW8HTIkGNurJ7GWrtuptqUf-9t79ObzjJ5N76U,10603
51
- velocity/misc/conv/oconv.py,sha256=h5Lo05DqOQnxoD3y6Px_MQP_V-pBbWf8Hkgkb9Xp1jk,6032
52
- velocity_python-0.0.116.dist-info/licenses/LICENSE,sha256=aoN245GG8s9oRUU89KNiGTU4_4OtnNmVi4hQeChg6rM,1076
53
- velocity_python-0.0.116.dist-info/METADATA,sha256=781PKVf_fl9PmnetFsRQ7ZbdyhPVhqeFZ5i-gIsMqn8,34262
54
- velocity_python-0.0.116.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
- velocity_python-0.0.116.dist-info/top_level.txt,sha256=JW2vJPmodgdgSz7H6yoZvnxF8S3fTMIv-YJWCT1sNW0,9
56
- velocity_python-0.0.116.dist-info/RECORD,,