jaseci 1.4.2.5__py3-none-any.whl → 2.0.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 jaseci might be problematic. Click here for more details.

Files changed (186) hide show
  1. jaseci/__init__.py +3 -37
  2. jaseci-2.0.0.dist-info/METADATA +65 -0
  3. jaseci-2.0.0.dist-info/RECORD +4 -0
  4. {jaseci-1.4.2.5.dist-info → jaseci-2.0.0.dist-info}/WHEEL +1 -2
  5. jaseci/VERSION +0 -1
  6. jaseci/cli_tools/__init__.py +0 -0
  7. jaseci/cli_tools/book_tools.py +0 -457
  8. jaseci/cli_tools/jsctl.py +0 -500
  9. jaseci/cli_tools/tests/__init__.py +0 -0
  10. jaseci/cli_tools/tests/test_jsctl.py +0 -556
  11. jaseci/extens/__init__.py +0 -0
  12. jaseci/extens/act_lib/__init__.py +0 -0
  13. jaseci/extens/act_lib/date.py +0 -117
  14. jaseci/extens/act_lib/elastic.py +0 -87
  15. jaseci/extens/act_lib/file.py +0 -76
  16. jaseci/extens/act_lib/file_handler.py +0 -189
  17. jaseci/extens/act_lib/internal.py +0 -18
  18. jaseci/extens/act_lib/jaseci.py +0 -61
  19. jaseci/extens/act_lib/mail.py +0 -10
  20. jaseci/extens/act_lib/maths.py +0 -168
  21. jaseci/extens/act_lib/net.py +0 -191
  22. jaseci/extens/act_lib/rand.py +0 -82
  23. jaseci/extens/act_lib/regex.py +0 -85
  24. jaseci/extens/act_lib/request.py +0 -169
  25. jaseci/extens/act_lib/std.py +0 -235
  26. jaseci/extens/act_lib/storage.py +0 -53
  27. jaseci/extens/act_lib/stripe.py +0 -337
  28. jaseci/extens/act_lib/task.py +0 -13
  29. jaseci/extens/act_lib/tests/__init__.py +0 -0
  30. jaseci/extens/act_lib/tests/std_test_code.py +0 -37
  31. jaseci/extens/act_lib/tests/test_date.py +0 -26
  32. jaseci/extens/act_lib/tests/test_elastic.py +0 -159
  33. jaseci/extens/act_lib/tests/test_file.py +0 -116
  34. jaseci/extens/act_lib/tests/test_file_lib.py +0 -40
  35. jaseci/extens/act_lib/tests/test_mail_lib.py +0 -33
  36. jaseci/extens/act_lib/tests/test_maths.py +0 -147
  37. jaseci/extens/act_lib/tests/test_net_lib.py +0 -62
  38. jaseci/extens/act_lib/tests/test_regex.py +0 -61
  39. jaseci/extens/act_lib/tests/test_std.py +0 -51
  40. jaseci/extens/act_lib/tests/test_std_lib.py +0 -36
  41. jaseci/extens/act_lib/tests/test_url.py +0 -32
  42. jaseci/extens/act_lib/tests/test_vector.py +0 -36
  43. jaseci/extens/act_lib/tests/test_webtool.py +0 -44
  44. jaseci/extens/act_lib/tests/test_zlib.py +0 -24
  45. jaseci/extens/act_lib/url.py +0 -79
  46. jaseci/extens/act_lib/vector.py +0 -157
  47. jaseci/extens/act_lib/webtool.py +0 -28
  48. jaseci/extens/act_lib/zip.py +0 -33
  49. jaseci/extens/api/__init__.py +0 -0
  50. jaseci/extens/api/actions_api.py +0 -170
  51. jaseci/extens/api/alias_api.py +0 -139
  52. jaseci/extens/api/architype_api.py +0 -196
  53. jaseci/extens/api/config_api.py +0 -129
  54. jaseci/extens/api/global_api.py +0 -84
  55. jaseci/extens/api/graph_api.py +0 -167
  56. jaseci/extens/api/health_api.py +0 -20
  57. jaseci/extens/api/interface.py +0 -268
  58. jaseci/extens/api/jac_api.py +0 -171
  59. jaseci/extens/api/jsorc_api.py +0 -316
  60. jaseci/extens/api/logger_api.py +0 -89
  61. jaseci/extens/api/master_api.py +0 -133
  62. jaseci/extens/api/object_api.py +0 -101
  63. jaseci/extens/api/prometheus_api.py +0 -74
  64. jaseci/extens/api/queue_api.py +0 -140
  65. jaseci/extens/api/sentinel_api.py +0 -270
  66. jaseci/extens/api/super_api.py +0 -64
  67. jaseci/extens/api/tests/__init__.py +0 -0
  68. jaseci/extens/api/tests/test_architype_api.py +0 -66
  69. jaseci/extens/api/tests/test_global_api.py +0 -179
  70. jaseci/extens/api/tests/test_graph_api.py +0 -64
  71. jaseci/extens/api/tests/test_logger_api.py +0 -43
  72. jaseci/extens/api/tests/test_object_api.py +0 -20
  73. jaseci/extens/api/tests/test_sentinel_api.py +0 -66
  74. jaseci/extens/api/tests/test_uncommon.py +0 -107
  75. jaseci/extens/api/tests/test_user_api.py +0 -32
  76. jaseci/extens/api/tests/test_walker_api.py +0 -316
  77. jaseci/extens/api/user_api.py +0 -144
  78. jaseci/extens/api/walker_api.py +0 -298
  79. jaseci/extens/api/webhook_api.py +0 -74
  80. jaseci/extens/svc/__init__.py +0 -0
  81. jaseci/extens/svc/elastic_svc.py +0 -366
  82. jaseci/extens/svc/kube_svc.py +0 -432
  83. jaseci/extens/svc/mail_svc.py +0 -156
  84. jaseci/extens/svc/prome_svc.py +0 -378
  85. jaseci/extens/svc/redis_svc.py +0 -63
  86. jaseci/extens/svc/storage_svc.py +0 -193
  87. jaseci/extens/svc/stripe_svc.py +0 -51
  88. jaseci/extens/svc/task_svc.py +0 -155
  89. jaseci/extens/svc/tasks.py +0 -302
  90. jaseci/jac/__init__.py +0 -0
  91. jaseci/jac/interpreter/__init__.py +0 -0
  92. jaseci/jac/interpreter/architype_interp.py +0 -214
  93. jaseci/jac/interpreter/interp.py +0 -1783
  94. jaseci/jac/interpreter/sentinel_interp.py +0 -257
  95. jaseci/jac/interpreter/tests/__init__.py +0 -0
  96. jaseci/jac/interpreter/tests/test_interp.py +0 -42
  97. jaseci/jac/interpreter/walker_interp.py +0 -248
  98. jaseci/jac/ir/__init__.py +0 -0
  99. jaseci/jac/ir/ast.py +0 -73
  100. jaseci/jac/ir/ast_builder.py +0 -249
  101. jaseci/jac/ir/jac_code.py +0 -152
  102. jaseci/jac/ir/passes/__init__.py +0 -6
  103. jaseci/jac/ir/passes/ast_prune_pass.py +0 -9
  104. jaseci/jac/ir/passes/codegen_pass.py +0 -244
  105. jaseci/jac/ir/passes/ir_pass.py +0 -29
  106. jaseci/jac/ir/passes/printer_pass.py +0 -23
  107. jaseci/jac/ir/passes/pt_prune_pass.py +0 -29
  108. jaseci/jac/ir/passes/schedule.py +0 -23
  109. jaseci/jac/ir/passes/stats_pass.py +0 -16
  110. jaseci/jac/jac.g4 +0 -450
  111. jaseci/jac/jac_parse/__init__.py +0 -0
  112. jaseci/jac/jac_parse/jacLexer.py +0 -809
  113. jaseci/jac/jac_parse/jacListener.py +0 -853
  114. jaseci/jac/jac_parse/jacParser.py +0 -9192
  115. jaseci/jac/jac_set.py +0 -119
  116. jaseci/jac/jsci_vm/__init__.py +0 -0
  117. jaseci/jac/jsci_vm/disasm.py +0 -94
  118. jaseci/jac/jsci_vm/inst_ptr.py +0 -31
  119. jaseci/jac/jsci_vm/machine.py +0 -188
  120. jaseci/jac/jsci_vm/op_codes.py +0 -82
  121. jaseci/jac/jsci_vm/tests/__init__.py +0 -0
  122. jaseci/jac/jsci_vm/tests/test_codegen.py +0 -31
  123. jaseci/jac/machine/__init__.py +0 -0
  124. jaseci/jac/machine/jac_scope.py +0 -85
  125. jaseci/jac/machine/jac_value.py +0 -226
  126. jaseci/jac/machine/machine_state.py +0 -383
  127. jaseci/jac/tests/__init__.py +0 -0
  128. jaseci/jac/tests/book_code.py +0 -624
  129. jaseci/jac/tests/test_book.py +0 -380
  130. jaseci/jac/tests/test_lang_14.py +0 -49
  131. jaseci/jsorc/__init__.py +0 -7
  132. jaseci/jsorc/jsorc.py +0 -642
  133. jaseci/jsorc/jsorc_settings.py +0 -211
  134. jaseci/jsorc/jsorc_utils.py +0 -298
  135. jaseci/jsorc/live_actions.py +0 -364
  136. jaseci/jsorc/manifests/__init__.py +0 -0
  137. jaseci/jsorc/manifests/database.yaml +0 -109
  138. jaseci/jsorc/manifests/elastic.yaml +0 -6024
  139. jaseci/jsorc/manifests/prometheus.yaml +0 -1383
  140. jaseci/jsorc/manifests/redis.yaml +0 -64
  141. jaseci/jsorc/memory.py +0 -258
  142. jaseci/jsorc/redis.py +0 -139
  143. jaseci/jsorc/remote_actions.py +0 -157
  144. jaseci/jsorc/tests/__init__.py +0 -0
  145. jaseci/jsorc/tests/test_actions.py +0 -542
  146. jaseci/jsorc/tests/test_jsorc.py +0 -112
  147. jaseci/prim/__init__.py +0 -0
  148. jaseci/prim/ability.py +0 -93
  149. jaseci/prim/architype.py +0 -89
  150. jaseci/prim/edge.py +0 -172
  151. jaseci/prim/element.py +0 -233
  152. jaseci/prim/graph.py +0 -26
  153. jaseci/prim/master.py +0 -64
  154. jaseci/prim/node.py +0 -532
  155. jaseci/prim/obj_mixins.py +0 -235
  156. jaseci/prim/sentinel.py +0 -281
  157. jaseci/prim/super_master.py +0 -31
  158. jaseci/prim/walker.py +0 -261
  159. jaseci/svc/__init__.py +0 -0
  160. jaseci/tests/__init__.py +0 -0
  161. jaseci/tests/infer.py +0 -39
  162. jaseci/tests/jac_test_code.py +0 -1293
  163. jaseci/tests/jac_test_progs.py +0 -774
  164. jaseci/tests/test_core.py +0 -153
  165. jaseci/tests/test_jac.py +0 -824
  166. jaseci/tests/test_node.py +0 -89
  167. jaseci/tests/test_progs.py +0 -702
  168. jaseci/tests/test_stack.py +0 -220
  169. jaseci/tests/test_stripe.py +0 -225
  170. jaseci/utils/__init__.py +0 -0
  171. jaseci/utils/actions/__init__.py +0 -0
  172. jaseci/utils/actions/actions_manager.py +0 -254
  173. jaseci/utils/actions/actions_optimizer.py +0 -516
  174. jaseci/utils/actions/actions_state.py +0 -95
  175. jaseci/utils/file_handler.py +0 -171
  176. jaseci/utils/gprof2dot.py +0 -3786
  177. jaseci/utils/id_list.py +0 -168
  178. jaseci/utils/json_handler.py +0 -70
  179. jaseci/utils/log_utils.py +0 -57
  180. jaseci/utils/test_core.py +0 -62
  181. jaseci/utils/utils.py +0 -387
  182. jaseci-1.4.2.5.dist-info/LICENSE +0 -21
  183. jaseci-1.4.2.5.dist-info/METADATA +0 -39
  184. jaseci-1.4.2.5.dist-info/RECORD +0 -184
  185. jaseci-1.4.2.5.dist-info/entry_points.txt +0 -3
  186. jaseci-1.4.2.5.dist-info/top_level.txt +0 -1
jaseci/prim/walker.py DELETED
@@ -1,261 +0,0 @@
1
- """
2
- Walker class for Jaseci
3
-
4
- Each walker has an id, name, timestamp and it's parent sentinel.
5
- TODO: Perhaps I should have walker state (context ids) in mem only with
6
- default hooks to save db read/writes
7
- """
8
-
9
- from jaseci.utils.utils import (
10
- logger,
11
- perf_test_start,
12
- perf_test_stop,
13
- exc_stack_as_str_list,
14
- )
15
- from jaseci.prim.element import Element
16
- from jaseci.prim.obj_mixins import Anchored
17
- from jaseci.utils.id_list import IdList
18
- from jaseci.jac.machine.machine_state import TryException
19
- from jaseci.jac.interpreter.walker_interp import WalkerInterp
20
- import uuid
21
- import hashlib
22
-
23
- from jaseci.jsorc.jsorc import JsOrc
24
- from jaseci.extens.svc.task_svc import TaskService
25
- from jaseci.utils.utils import format_jac_profile
26
-
27
-
28
- class Walker(Element, WalkerInterp, Anchored):
29
- """Walker class for Jaseci"""
30
-
31
- def __init__(self, is_async=False, **kwargs):
32
- self.yielded = False
33
- self.namespaces = []
34
- self.profile = {}
35
- # Process state
36
- self.current_node_id = None
37
- self.next_node_ids = IdList(self)
38
- self.destroy_node_ids = IdList(self)
39
- self.current_step = 0
40
- self.in_entry_exit = False
41
- self.step_limit = 10000
42
- self.is_async = is_async
43
- self._to_await = False
44
- if "persist" not in kwargs: # Default walker persistence to is_async
45
- kwargs["persist"] = is_async
46
- Element.__init__(self, **kwargs)
47
- WalkerInterp.__init__(self)
48
- Anchored.__init__(self)
49
-
50
- @property
51
- def current_node(self):
52
- if not self.current_node_id:
53
- return None
54
- elif not self._h.has_obj(self.current_node_id):
55
- self.current_node_id = None
56
- return None
57
- else:
58
- return self._h.get_obj(self._m_id, self.current_node_id)
59
-
60
- @current_node.setter
61
- def current_node(self, obj):
62
- if obj:
63
- self.current_node_id = obj.jid
64
- else:
65
- self.current_node_id = None
66
-
67
- def namespace_keys(self):
68
- """Return list of md5 keys for namespaces"""
69
- ret = {}
70
- for i in self.namespaces:
71
- ret[i] = hashlib.md5((self._m_id + i).encode()).hexdigest()
72
- return ret
73
-
74
- def for_queue(self):
75
- return self.is_async and not (self._to_await)
76
-
77
- def step(self):
78
- """
79
- Take single step through program
80
- if no ast provided, will be generated from code
81
- """
82
- if not self.next_node_ids:
83
- logger.debug(str(f"Walker {self.name} is disengaged"))
84
- return False
85
- if self.current_step > self.step_limit:
86
- logger.error(
87
- str(
88
- f"Walker {self.name} walked too many steps "
89
- + f"- {self.step_limit}"
90
- )
91
- )
92
- return False
93
-
94
- self.current_node = self.next_node_ids.pop_first_obj()
95
- self.run_walker(jac_ast=self.get_architype().get_jac_ast())
96
- if self.current_step < 200:
97
- self.log_history("visited", self.current_node.id)
98
- self.current_step += 1
99
- self.profile["steps"] = self.current_step
100
- if self._stopped == "skip":
101
- self._stopped = None
102
- if self.next_node_ids:
103
- logger.debug(
104
- str(
105
- f"Step complete, Walker {self.name} next node: "
106
- + f"- {self.next_node_ids.first_obj()}"
107
- )
108
- )
109
- return self.next_node_ids.first_obj()
110
- else:
111
- logger.debug(
112
- str(
113
- f"Final step of walker {self.name} complete"
114
- + f"- disengaging from {self.current_node}"
115
- )
116
- )
117
- for i in self.destroy_node_ids.obj_list():
118
- if i.jid == self.current_node_id:
119
- self.current_node_id = None
120
- i.destroy()
121
- self.destroy_node_ids.remove_obj(i)
122
- return True
123
-
124
- def prime(self, start_node, prime_ctx=None, request_ctx=None):
125
- """Place walker on node and get ready to step step"""
126
- if not self.yielded or not len(self.next_node_ids): # modus ponens
127
- self.next_node_ids.add_obj(start_node, push_front=True)
128
- if prime_ctx:
129
- for i in prime_ctx.keys():
130
- self.context[str(i)] = prime_ctx[i]
131
- self.request_context = request_ctx
132
- self.profile["steps"] = self.current_step
133
- logger.debug(str(f"Walker {self.name} primed - {start_node}"))
134
-
135
- def run(self, start_node=None, prime_ctx=None, request_ctx=None, profiling=False):
136
- """Executes Walker to completion"""
137
- if self.for_queue() and JsOrc.svc("task").is_running():
138
- start_node = (
139
- start_node
140
- if not (start_node is None)
141
- else (
142
- self.next_node_ids.pop_first_obj() if self.next_node_ids else None
143
- )
144
- )
145
-
146
- self._h.commit_all_cache_sync()
147
-
148
- return {
149
- "is_queued": True,
150
- "result": JsOrc.svc("task", TaskService).add_queue(
151
- self,
152
- start_node,
153
- prime_ctx or self.context,
154
- request_ctx or self.request_context,
155
- profiling,
156
- ),
157
- }
158
-
159
- if profiling:
160
- pr = perf_test_start()
161
-
162
- if start_node and (not self.yielded or not len(self.next_node_ids)):
163
- self.prime(start_node, prime_ctx, request_ctx)
164
- elif prime_ctx:
165
- for i in prime_ctx.keys():
166
- self.context[str(i)] = prime_ctx[i]
167
-
168
- report_ret = {"success": True}
169
- WalkerInterp.reset(self)
170
- self.yielded = False
171
-
172
- try:
173
- while self.step() and not self.yielded:
174
- pass
175
- except Exception:
176
- report_ret["success"] = False
177
- report_ret["stack_trace"] = exc_stack_as_str_list()
178
-
179
- self.save()
180
-
181
- if not self.report:
182
- logger.debug(str(f"Walker {self.name} did not have anything to report"))
183
- report_ret["report"] = self.report
184
- report_ret["final_node"] = self.current_node_id
185
- report_ret["yielded"] = self.yielded
186
-
187
- if self.report_status:
188
- report_ret["status_code"] = self.report_status
189
- if self.report_custom:
190
- report_ret["report_custom"] = self.report_custom
191
- if self.report_file:
192
- report_ret["report_file"] = self.report_file
193
-
194
- if len(self.runtime_errors):
195
- report_ret["errors"] = self.runtime_errors
196
- report_ret["success"] = False
197
- if len(self.runtime_stack_trace):
198
- report_ret["stack_trace"] = (
199
- report_ret.get("stack_trace", []) + self.runtime_stack_trace
200
- )
201
- if profiling:
202
- self.profile["jac"] = format_jac_profile(self.get_master()._jac_profile)
203
- calls, graph = perf_test_stop(pr)
204
- self.profile["perf"] = calls
205
- self.profile["graph"] = graph
206
- report_ret["profile"] = self.profile
207
-
208
- if self.for_queue():
209
- return {"is_queued": False, "result": report_ret}
210
-
211
- return report_ret
212
-
213
- def yield_walk(self):
214
- """Instructs walker to yield (stop walking and keep state)"""
215
- self.yielded = True
216
-
217
- def log_history(self, name, value):
218
- """Helper function for logging history of walker's activities"""
219
- if isinstance(value, Element):
220
- value = {"type": value.j_type, "id": value.jid}
221
- if isinstance(value, uuid.UUID):
222
- value = value.urn
223
- if name in self.profile.keys():
224
- self.profile[name].append(value)
225
- else:
226
- self.profile[name] = [value]
227
-
228
- def clear_state(self):
229
- """Clears walker state after report"""
230
- self.yielded = False
231
- self.profile = {}
232
- self.current_step = 0
233
- self.next_node_ids.remove_all()
234
- self.ignore_node_ids.remove_all()
235
- self.destroy_node_ids.remove_all()
236
- self.current_node = None
237
- self.context = {}
238
- WalkerInterp.reset(self)
239
-
240
- def destroy(self):
241
- """
242
- Destroys self from memory and persistent storage
243
- """
244
- if not self.for_queue() or not JsOrc.svc("task").is_running():
245
- WalkerInterp.destroy(self)
246
- super().destroy()
247
-
248
- def register_yield_or_destroy(self, yield_ids):
249
- """Helper for auto destroying walkers"""
250
- if not self.yielded:
251
- if self.jid in yield_ids:
252
- yield_ids.remove_obj(self)
253
- self.destroy()
254
- else:
255
- yield_ids.add_obj(self, silent=True)
256
-
257
- def save(self):
258
- """
259
- Write self through hook to persistent storage
260
- """
261
- self._h.save_obj(caller_id=self._m_id, item=self, all_caches=self.is_async)
jaseci/svc/__init__.py DELETED
File without changes
jaseci/tests/__init__.py DELETED
File without changes
jaseci/tests/infer.py DELETED
@@ -1,39 +0,0 @@
1
- from jaseci.utils.utils import logger
2
- import jaseci.extens.act_lib.date as jsdate
3
- from jaseci.jsorc.live_actions import jaseci_action
4
-
5
-
6
- @jaseci_action()
7
- def year_from_date(date: str):
8
- logger.warning("Deprecated! Use date.quantlize_...")
9
- return jsdate.quantize_to_year(date)
10
-
11
-
12
- @jaseci_action()
13
- def month_from_date(date: str):
14
- logger.warning("Deprecated! Use date.quantlize_...")
15
- return jsdate.quantize_to_month(date)
16
-
17
-
18
- @jaseci_action()
19
- def week_from_date(date: str):
20
- logger.warning("Deprecated! Use date.quantlize_...")
21
- return jsdate.quantize_to_week(date)
22
-
23
-
24
- @jaseci_action()
25
- def day_from_date(date: str):
26
- logger.warning("Deprecated! Use date.quantlize_...")
27
- return jsdate.quantize_to_day(date)
28
-
29
-
30
- @jaseci_action()
31
- def date_day_diff(start_date: str, end_date: str):
32
- logger.warning("Deprecated! Use date...")
33
- return jsdate.date_day_diff(start_date, end_date)
34
-
35
-
36
- @jaseci_action()
37
- def date_now():
38
- logger.warning("Deprecated! Use date...")
39
- return jsdate.date_now()