jaseci 1.4.1.8__tar.gz → 1.4.2__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.
Potentially problematic release.
This version of jaseci might be problematic. Click here for more details.
- jaseci-1.4.2/PKG-INFO +35 -0
- jaseci-1.4.2/jaseci/VERSION +1 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/request.py +6 -6
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/stripe.py +10 -2
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/task.py +2 -2
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/url.py +1 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/global_api.py +11 -2
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/user_api.py +1 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/webhook_api.py +3 -2
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/elastic_svc.py +30 -8
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/architype_interp.py +0 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/interp.py +5 -22
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/sentinel_interp.py +0 -2
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/walker_interp.py +0 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/machine/machine_state.py +5 -4
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/jsorc_settings.py +2 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/live_actions.py +29 -7
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/remote_actions.py +57 -6
- jaseci-1.4.2/jaseci/jsorc/tests/test_actions.py +542 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/ability.py +0 -6
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/edge.py +5 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/node.py +17 -10
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/sentinel.py +4 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/jac_test_code.py +105 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_stripe.py +5 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/id_list.py +9 -5
- jaseci-1.4.2/jaseci.egg-info/PKG-INFO +35 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci.egg-info/requires.txt +1 -1
- {jaseci-1.4.1.8 → jaseci-1.4.2}/setup.py +1 -1
- jaseci-1.4.1.8/PKG-INFO +0 -7
- jaseci-1.4.1.8/jaseci/VERSION +0 -1
- jaseci-1.4.1.8/jaseci/jsorc/tests/test_actions.py +0 -80
- jaseci-1.4.1.8/jaseci.egg-info/PKG-INFO +0 -7
- {jaseci-1.4.1.8 → jaseci-1.4.2}/LICENSE +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/README.md +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/cli_tools/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/cli_tools/book_tools.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/cli_tools/jsctl.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/cli_tools/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/cli_tools/tests/test_jsctl.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/date.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/elastic.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/file.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/file_handler.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/internal.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/jaseci.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/mail.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/maths.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/net.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/rand.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/regex.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/std.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/storage.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/std_test_code.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_date.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_elastic.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_file.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_file_lib.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_mail_lib.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_maths.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_net_lib.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_regex.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_std.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_std_lib.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_url.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_vector.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_webtool.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/tests/test_zlib.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/vector.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/webtool.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/act_lib/zip.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/actions_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/alias_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/architype_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/config_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/graph_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/interface.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/jac_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/jsorc_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/logger_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/master_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/object_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/prometheus_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/queue_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/sentinel_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/super_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_architype_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_global_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_graph_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_logger_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_object_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_sentinel_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_uncommon.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_user_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/tests/test_walker_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/api/walker_api.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/kube_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/mail_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/prome_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/redis_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/storage_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/stripe_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/task_svc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/extens/svc/tasks.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/interpreter/tests/test_interp.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/ast.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/ast_builder.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/jac_code.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/ast_prune_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/codegen_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/ir_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/printer_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/pt_prune_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/schedule.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/ir/passes/stats_pass.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac.g4 +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac_parse/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac_parse/jacLexer.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac_parse/jacListener.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac_parse/jacParser.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jac_set.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/disasm.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/inst_ptr.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/machine.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/op_codes.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/jsci_vm/tests/test_codegen.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/machine/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/machine/jac_scope.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/machine/jac_value.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/tests/book_code.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/tests/test_book.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jac/tests/test_lang_14.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/jsorc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/jsorc_utils.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/manifests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/manifests/database.yaml +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/manifests/elastic.yaml +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/manifests/prometheus.yaml +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/manifests/redis.yaml +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/memory.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/redis.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/jsorc/tests/test_jsorc.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/architype.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/element.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/graph.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/master.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/obj_mixins.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/super_master.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/prim/walker.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/svc/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/infer.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/jac_test_progs.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_core.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_jac.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_node.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_progs.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/tests/test_stack.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/actions/__init__.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/actions/actions_manager.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/actions/actions_optimizer.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/actions/actions_state.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/file_handler.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/gprof2dot.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/json_handler.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/log_utils.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/test_core.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci/utils/utils.py +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci.egg-info/SOURCES.txt +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci.egg-info/dependency_links.txt +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci.egg-info/entry_points.txt +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/jaseci.egg-info/top_level.txt +0 -0
- {jaseci-1.4.1.8 → jaseci-1.4.2}/setup.cfg +0 -0
jaseci-1.4.2/PKG-INFO
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: jaseci
|
|
3
|
+
Version: 1.4.2
|
|
4
|
+
Home-page: https://github.com/Jaseci-Labs/jaseci
|
|
5
|
+
Author: Jason Mars
|
|
6
|
+
Author-email: jason@jaseci.org
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Dist: click<8.2.0,>=8.1.0
|
|
9
|
+
Requires-Dist: click-shell<2.2,>=2.1
|
|
10
|
+
Requires-Dist: numpy<1.24.0,>=1.23.0
|
|
11
|
+
Requires-Dist: antlr4-python3-runtime<4.10.0,>=4.9.3
|
|
12
|
+
Requires-Dist: fastapi[all]<1.0.0,>=0.75.0
|
|
13
|
+
Requires-Dist: requests
|
|
14
|
+
Requires-Dist: redis
|
|
15
|
+
Requires-Dist: celery<6,>=5
|
|
16
|
+
Requires-Dist: flake8
|
|
17
|
+
Requires-Dist: pep8-naming
|
|
18
|
+
Requires-Dist: stripe
|
|
19
|
+
Requires-Dist: pydantic<2.0.0
|
|
20
|
+
Requires-Dist: docstring-parser
|
|
21
|
+
Requires-Dist: prometheus_api_client==0.5.1
|
|
22
|
+
Requires-Dist: prometheus-client==0.14.1
|
|
23
|
+
Requires-Dist: kubernetes==23.6.0
|
|
24
|
+
Requires-Dist: pytest
|
|
25
|
+
Requires-Dist: pytest-xdist
|
|
26
|
+
Requires-Dist: pytest-cov
|
|
27
|
+
Requires-Dist: validators==0.21.2
|
|
28
|
+
Requires-Dist: psycopg2-binary==2.9.5
|
|
29
|
+
Requires-Dist: pygls
|
|
30
|
+
Requires-Dist: mock
|
|
31
|
+
Requires-Dist: beautifulsoup4<4.13.0,>=4.12.2
|
|
32
|
+
Requires-Dist: lxml<4.10.0,>=4.9.2
|
|
33
|
+
Requires-Dist: html5lib<1.2,>=1.1
|
|
34
|
+
Requires-Dist: prettytable<3.8.0,>=3.7.0
|
|
35
|
+
Requires-Dist: apache-libcloud==3.7.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.4.2
|
|
@@ -4,7 +4,7 @@ from jaseci.jsorc.live_actions import jaseci_action
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
@jaseci_action()
|
|
7
|
-
def get(url: str, data: dict, header: dict):
|
|
7
|
+
def get(url: str, data: dict = {}, header: dict = {}):
|
|
8
8
|
"""
|
|
9
9
|
Issue request
|
|
10
10
|
Param 1 - url
|
|
@@ -23,7 +23,7 @@ def get(url: str, data: dict, header: dict):
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@jaseci_action()
|
|
26
|
-
def post(url: str, data: dict, header: dict):
|
|
26
|
+
def post(url: str, data: dict = {}, header: dict = {}):
|
|
27
27
|
"""
|
|
28
28
|
Issue request
|
|
29
29
|
Param 1 - url
|
|
@@ -42,7 +42,7 @@ def post(url: str, data: dict, header: dict):
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
@jaseci_action()
|
|
45
|
-
def put(url: str, data: dict, header: dict):
|
|
45
|
+
def put(url: str, data: dict = {}, header: dict = {}):
|
|
46
46
|
"""
|
|
47
47
|
Issue request
|
|
48
48
|
Param 1 - url
|
|
@@ -61,7 +61,7 @@ def put(url: str, data: dict, header: dict):
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
@jaseci_action()
|
|
64
|
-
def delete(url: str, data: dict, header: dict):
|
|
64
|
+
def delete(url: str, data: dict = {}, header: dict = {}):
|
|
65
65
|
"""
|
|
66
66
|
Issue request
|
|
67
67
|
Param 1 - url
|
|
@@ -80,7 +80,7 @@ def delete(url: str, data: dict, header: dict):
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
@jaseci_action()
|
|
83
|
-
def head(url: str, data: dict, header: dict):
|
|
83
|
+
def head(url: str, data: dict = {}, header: dict = {}):
|
|
84
84
|
"""
|
|
85
85
|
Issue request
|
|
86
86
|
Param 1 - url
|
|
@@ -99,7 +99,7 @@ def head(url: str, data: dict, header: dict):
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
@jaseci_action()
|
|
102
|
-
def options(url: str, data: dict, header: dict):
|
|
102
|
+
def options(url: str, data: dict = {}, header: dict = {}):
|
|
103
103
|
"""
|
|
104
104
|
Issue request
|
|
105
105
|
Param 1 - url
|
|
@@ -4,7 +4,6 @@ import stripe as s
|
|
|
4
4
|
from jaseci.jsorc.jsorc import JsOrc
|
|
5
5
|
from jaseci.utils.utils import logger
|
|
6
6
|
from jaseci.extens.svc.stripe_svc import StripeService
|
|
7
|
-
from datetime import datetime
|
|
8
7
|
from jaseci.jsorc.live_actions import jaseci_action
|
|
9
8
|
|
|
10
9
|
|
|
@@ -168,6 +167,15 @@ def invoice_retrieve(invoice_id: str, **kwargs):
|
|
|
168
167
|
return stripe().Invoice.retrieve(invoice_id, **kwargs)
|
|
169
168
|
|
|
170
169
|
|
|
170
|
+
@jaseci_action()
|
|
171
|
+
def subscription_item_list_usage_record_summaries(subscription_item_id: str, **kwargs):
|
|
172
|
+
"""Create usage record"""
|
|
173
|
+
|
|
174
|
+
return stripe().SubscriptionItem.list_usage_record_summaries(
|
|
175
|
+
subscription_item_id, **kwargs
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
|
|
171
179
|
@jaseci_action()
|
|
172
180
|
def subscription_item_create_usage_record(
|
|
173
181
|
subscription_item_id: str, quantity: int, **kwargs
|
|
@@ -175,7 +183,7 @@ def subscription_item_create_usage_record(
|
|
|
175
183
|
"""Create usage record"""
|
|
176
184
|
|
|
177
185
|
return stripe().SubscriptionItem.create_usage_record(
|
|
178
|
-
subscription_item_id, quantity=quantity, timestamp=
|
|
186
|
+
subscription_item_id, quantity=quantity, timestamp="now", **kwargs
|
|
179
187
|
)
|
|
180
188
|
|
|
181
189
|
|
|
@@ -5,9 +5,9 @@ from jaseci.extens.svc.task_svc import TaskService
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
@jaseci_action()
|
|
8
|
-
def get_result(task_id, wait,
|
|
8
|
+
def get_result(task_id, wait=False, timeout=30):
|
|
9
9
|
"""
|
|
10
10
|
Get task result by task_id
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
return JsOrc.svc("task").poke(TaskService).get_by_task_id(task_id, wait)
|
|
13
|
+
return JsOrc.svc("task").poke(TaskService).get_by_task_id(task_id, wait, timeout)
|
|
@@ -42,17 +42,26 @@ class GlobalApi:
|
|
|
42
42
|
@Interface.admin_api()
|
|
43
43
|
def global_sentinel_set(self, snt: Sentinel = None):
|
|
44
44
|
"""
|
|
45
|
-
|
|
45
|
+
Make a sentinel globally accessible and set it as the global sentinel
|
|
46
46
|
"""
|
|
47
47
|
snt.make_read_only()
|
|
48
48
|
snt.propagate_access()
|
|
49
49
|
self._h.save_glob("GLOB_SENTINEL", snt.jid)
|
|
50
50
|
return {"response": f"Global sentinel set to '{snt}'!"}
|
|
51
51
|
|
|
52
|
+
@Interface.admin_api()
|
|
53
|
+
def global_sentinel_set_access(self, snt: Sentinel = None):
|
|
54
|
+
"""
|
|
55
|
+
Make a sentinel globally accessible
|
|
56
|
+
"""
|
|
57
|
+
snt.make_read_only()
|
|
58
|
+
snt.propagate_access()
|
|
59
|
+
return {"response": f"Sentinel '{snt}' is now globally accessible."}
|
|
60
|
+
|
|
52
61
|
@Interface.admin_api()
|
|
53
62
|
def global_sentinel_unset(self):
|
|
54
63
|
"""
|
|
55
|
-
|
|
64
|
+
Unset a global sentinel
|
|
56
65
|
"""
|
|
57
66
|
current = self.global_get("GLOB_SENTINEL")["value"]
|
|
58
67
|
if current:
|
|
@@ -25,7 +25,8 @@ class WebhookApi:
|
|
|
25
25
|
|
|
26
26
|
# to be updated
|
|
27
27
|
stripe_service.get_event(
|
|
28
|
-
self._h.get_file_handler(_req_ctx["raw"]),
|
|
28
|
+
self._h.get_file_handler(_req_ctx["raw"]).to_bytes(),
|
|
29
|
+
_req_ctx["headers"],
|
|
29
30
|
)
|
|
30
31
|
|
|
31
32
|
payload_obj = req_body.get("data").get("object")
|
|
@@ -69,5 +70,5 @@ class WebhookApi:
|
|
|
69
70
|
)
|
|
70
71
|
else:
|
|
71
72
|
raise HTTPException(
|
|
72
|
-
status_code=400, detail=str(
|
|
73
|
+
status_code=400, detail=str(provider + " webhook is not yet supported")
|
|
73
74
|
)
|
|
@@ -62,6 +62,7 @@ class ElasticService(JsOrc.CommonService):
|
|
|
62
62
|
if cert:
|
|
63
63
|
with open("elastic-certificate.crt", "w") as cert_file:
|
|
64
64
|
cert_file.write(cert)
|
|
65
|
+
self.config["verifier"] = "elastic-certificate.crt"
|
|
65
66
|
|
|
66
67
|
if not self.config.get("auth"):
|
|
67
68
|
auth = kube.get_secret(
|
|
@@ -80,8 +81,12 @@ class ElasticService(JsOrc.CommonService):
|
|
|
80
81
|
under_test = self.config.get("under_test", False)
|
|
81
82
|
if not under_test:
|
|
82
83
|
self.configure_elastic()
|
|
83
|
-
LOG_QUEUES["core"] = self.add_elastic_log_handler(
|
|
84
|
-
|
|
84
|
+
LOG_QUEUES["core"] = self.add_elastic_log_handler(
|
|
85
|
+
logger, self.config.get("core_log_index") or "core", under_test
|
|
86
|
+
)
|
|
87
|
+
LOG_QUEUES["app"] = self.add_elastic_log_handler(
|
|
88
|
+
app_logger, self.config.get("app_log_index") or "app", under_test
|
|
89
|
+
)
|
|
85
90
|
|
|
86
91
|
def configure_elastic(self):
|
|
87
92
|
"""
|
|
@@ -131,6 +136,21 @@ class ElasticService(JsOrc.CommonService):
|
|
|
131
136
|
try:
|
|
132
137
|
record = log_queue.get()
|
|
133
138
|
if record is None:
|
|
139
|
+
# This is temporary
|
|
140
|
+
# for debugging purposes
|
|
141
|
+
from datetime import datetime
|
|
142
|
+
|
|
143
|
+
self.app.doc(
|
|
144
|
+
{
|
|
145
|
+
"@timestamp": datetime.now().strftime(
|
|
146
|
+
"%Y-%m-%dT%H:%M:%S"
|
|
147
|
+
),
|
|
148
|
+
"message": f"Stopping process for {elastic_index}",
|
|
149
|
+
"level": "SYSTEM",
|
|
150
|
+
},
|
|
151
|
+
index=elastic_index,
|
|
152
|
+
)
|
|
153
|
+
# end of temporary code
|
|
134
154
|
break
|
|
135
155
|
elastic_record = format_elastic_record(record)
|
|
136
156
|
self.app.doc(log=elastic_record, index=elastic_index)
|
|
@@ -168,12 +188,14 @@ class Elastic:
|
|
|
168
188
|
if config["auth"]:
|
|
169
189
|
self.headers["Authorization"] = config["auth"]
|
|
170
190
|
|
|
191
|
+
self.verifier = config.get("verifier")
|
|
192
|
+
|
|
171
193
|
def _get(self, url: str, json: dict = None):
|
|
172
194
|
return get(
|
|
173
195
|
f"{self.url}{url}",
|
|
174
196
|
json=json,
|
|
175
197
|
headers=self.headers,
|
|
176
|
-
verify=
|
|
198
|
+
verify=self.verifier,
|
|
177
199
|
).json()
|
|
178
200
|
|
|
179
201
|
def _post(self, url: str, json: dict = None):
|
|
@@ -181,7 +203,7 @@ class Elastic:
|
|
|
181
203
|
f"{self.url}{url}",
|
|
182
204
|
json=json,
|
|
183
205
|
headers=self.headers,
|
|
184
|
-
verify=
|
|
206
|
+
verify=self.verifier,
|
|
185
207
|
).json()
|
|
186
208
|
|
|
187
209
|
def post(self, url: str, body: dict, index: str = "", suffix: str = ""):
|
|
@@ -233,7 +255,7 @@ class Elastic:
|
|
|
233
255
|
res = get(
|
|
234
256
|
f"{self.url}/_ilm/policy/{policy_name}",
|
|
235
257
|
headers=self.headers,
|
|
236
|
-
verify=
|
|
258
|
+
verify=self.verifier,
|
|
237
259
|
)
|
|
238
260
|
if res.status_code == 200 and policy_name in res.json():
|
|
239
261
|
# policy already exists
|
|
@@ -242,7 +264,7 @@ class Elastic:
|
|
|
242
264
|
f"{self.url}/_ilm/policy/{policy_name}",
|
|
243
265
|
headers=self.headers,
|
|
244
266
|
json=policy_config,
|
|
245
|
-
verify=
|
|
267
|
+
verify=self.verifier,
|
|
246
268
|
)
|
|
247
269
|
if res.status_code == 200:
|
|
248
270
|
return res.json()
|
|
@@ -256,7 +278,7 @@ class Elastic:
|
|
|
256
278
|
res = get(
|
|
257
279
|
f"{self.url}/_index_template/{template_name}",
|
|
258
280
|
headers=self.headers,
|
|
259
|
-
verify=
|
|
281
|
+
verify=self.verifier,
|
|
260
282
|
)
|
|
261
283
|
if res.status_code == 200 and template_name in res.json():
|
|
262
284
|
# policy already exists
|
|
@@ -265,7 +287,7 @@ class Elastic:
|
|
|
265
287
|
f"{self.url}/_index_template/{template_name}",
|
|
266
288
|
headers=self.headers,
|
|
267
289
|
json=template_config,
|
|
268
|
-
verify=
|
|
290
|
+
verify=self.verifier,
|
|
269
291
|
)
|
|
270
292
|
if res.status_code == 200:
|
|
271
293
|
return res.json()
|
|
@@ -221,8 +221,7 @@ class Interp(VirtualMachine):
|
|
|
221
221
|
self._loop_ctrl = None
|
|
222
222
|
break
|
|
223
223
|
if loops > self._loop_limit:
|
|
224
|
-
self.rt_error("Hit loop limit
|
|
225
|
-
self._loop_ctrl = "break"
|
|
224
|
+
self.rt_error(f"Hit loop limit [{self._loop_limit}]!", kid[0])
|
|
226
225
|
self.run_expression(kid[3])
|
|
227
226
|
elif kid[3].name == "expression":
|
|
228
227
|
var = self._jac_scope.get_live_var(kid[1].token_text(), create_mode=True)
|
|
@@ -240,8 +239,7 @@ class Interp(VirtualMachine):
|
|
|
240
239
|
self._loop_ctrl = None
|
|
241
240
|
break
|
|
242
241
|
if loops > self._loop_limit:
|
|
243
|
-
self.rt_error("Hit loop limit
|
|
244
|
-
self._loop_ctrl = "break"
|
|
242
|
+
self.rt_error(f"Hit loop limit [{self._loop_limit}]!", kid[0])
|
|
245
243
|
else:
|
|
246
244
|
self.rt_error("Not a list/dict for iteration!", kid[3])
|
|
247
245
|
else:
|
|
@@ -269,8 +267,7 @@ class Interp(VirtualMachine):
|
|
|
269
267
|
self._loop_ctrl = None
|
|
270
268
|
break
|
|
271
269
|
if loops > self._loop_limit:
|
|
272
|
-
self.rt_error("Hit loop limit
|
|
273
|
-
self._loop_ctrl = "break"
|
|
270
|
+
self.rt_error(f"Hit loop limit [{self._loop_limit}]!", kid[0])
|
|
274
271
|
else:
|
|
275
272
|
self.rt_error("Not a list/dict for iteration!", kid[5])
|
|
276
273
|
if self._loop_ctrl and self._loop_ctrl == "continue":
|
|
@@ -291,8 +288,7 @@ class Interp(VirtualMachine):
|
|
|
291
288
|
self._loop_ctrl = None
|
|
292
289
|
break
|
|
293
290
|
if loops > self._loop_limit:
|
|
294
|
-
self.rt_error("Hit loop limit
|
|
295
|
-
self._loop_ctrl = "break"
|
|
291
|
+
self.rt_error(f"Hit loop limit [{self._loop_limit}]!", kid[0])
|
|
296
292
|
self.run_expression(kid[1])
|
|
297
293
|
if self._loop_ctrl and self._loop_ctrl == "continue":
|
|
298
294
|
self._loop_ctrl = None
|
|
@@ -625,17 +621,11 @@ class Interp(VirtualMachine):
|
|
|
625
621
|
# Add additional accessible fields
|
|
626
622
|
return JacValue(self, value=self.get_info())
|
|
627
623
|
else:
|
|
628
|
-
self.rt_error(f"Global {kid[0].name} not
|
|
629
|
-
return JacValue(
|
|
630
|
-
self,
|
|
631
|
-
)
|
|
624
|
+
self.rt_error(f"Global {kid[0].name} is not supported!", jac_ast)
|
|
632
625
|
else:
|
|
633
626
|
token = kid[2].token_text()
|
|
634
627
|
if token not in self.parent().global_vars:
|
|
635
628
|
self.rt_error(f"Global not defined - {token}", kid[2])
|
|
636
|
-
return JacValue(
|
|
637
|
-
self,
|
|
638
|
-
)
|
|
639
629
|
|
|
640
630
|
return JacValue(self, ctx=self.parent().global_vars, name=token)
|
|
641
631
|
|
|
@@ -803,7 +793,6 @@ class Interp(VirtualMachine):
|
|
|
803
793
|
return self.parent().arch_ids.get_obj_by_name(name=name, kind=kind)
|
|
804
794
|
else:
|
|
805
795
|
self.rt_error(f"{name} is not a super arch of {base_arch.name}", kid[1])
|
|
806
|
-
return None
|
|
807
796
|
else:
|
|
808
797
|
return base_arch
|
|
809
798
|
|
|
@@ -838,7 +827,6 @@ class Interp(VirtualMachine):
|
|
|
838
827
|
return JacValue(self, value=nd)
|
|
839
828
|
|
|
840
829
|
self.rt_error(f"{result.value} not valid reference", kid[1])
|
|
841
|
-
return result
|
|
842
830
|
|
|
843
831
|
def run_built_in(self, jac_ast, atom_res):
|
|
844
832
|
"""
|
|
@@ -960,7 +948,6 @@ class Interp(VirtualMachine):
|
|
|
960
948
|
self.rt_error(
|
|
961
949
|
f"Cannot get keys of {atom_res}. " f"Not Dictionary!", kid[0]
|
|
962
950
|
)
|
|
963
|
-
return JacValue(self, value=[])
|
|
964
951
|
elif len(kid) > 1 and kid[1].name == "name_list":
|
|
965
952
|
filter_on = self.run_name_list(kid[1])
|
|
966
953
|
d = atom_res.value
|
|
@@ -1032,7 +1019,6 @@ class Interp(VirtualMachine):
|
|
|
1032
1019
|
self.rt_error(
|
|
1033
1020
|
f"Cannot get length of {atom_res.value}. Not List!", kid[0]
|
|
1034
1021
|
)
|
|
1035
|
-
return JacValue(self, value=0)
|
|
1036
1022
|
else:
|
|
1037
1023
|
if not self.rt_check_type(atom_res.value, [list], kid[0]):
|
|
1038
1024
|
return atom_res
|
|
@@ -1408,7 +1394,6 @@ class Interp(VirtualMachine):
|
|
|
1408
1394
|
f"Indicies must be an integer or string!",
|
|
1409
1395
|
kid[1],
|
|
1410
1396
|
)
|
|
1411
|
-
return atom_res
|
|
1412
1397
|
try:
|
|
1413
1398
|
return JacValue(self, ctx=atom_res.value, name=idx)
|
|
1414
1399
|
except Exception as e:
|
|
@@ -1423,7 +1408,6 @@ class Interp(VirtualMachine):
|
|
|
1423
1408
|
"List slice range not valid. Indicies must be an integers!",
|
|
1424
1409
|
kid[1],
|
|
1425
1410
|
)
|
|
1426
|
-
return atom_res
|
|
1427
1411
|
try:
|
|
1428
1412
|
return JacValue(self, ctx=atom_res.value, name=idx, end=end)
|
|
1429
1413
|
except Exception as e:
|
|
@@ -1663,7 +1647,6 @@ class Interp(VirtualMachine):
|
|
|
1663
1647
|
return self.pop().value
|
|
1664
1648
|
else:
|
|
1665
1649
|
self.rt_error(f"{name} not present in object", kid[0])
|
|
1666
|
-
return False
|
|
1667
1650
|
|
|
1668
1651
|
def run_any_type(self, jac_ast):
|
|
1669
1652
|
"""
|
|
@@ -234,7 +234,6 @@ class SentinelInterp(Interp):
|
|
|
234
234
|
graph_name = kid[0].kid[-1].token_text()
|
|
235
235
|
if not self.arch_ids.has_obj_by_name(graph_name, kind="graph"):
|
|
236
236
|
self.rt_error(f"Graph {graph_name} not found!", kid[0])
|
|
237
|
-
return
|
|
238
237
|
testcase["graph_ref"] = graph_name
|
|
239
238
|
else:
|
|
240
239
|
kid = kid[1:]
|
|
@@ -244,7 +243,6 @@ class SentinelInterp(Interp):
|
|
|
244
243
|
walker_name = kid[0].kid[-1].token_text()
|
|
245
244
|
if not self.arch_ids.has_obj_by_name(name=walker_name, kind="walker"):
|
|
246
245
|
self.rt_error(f"Walker {walker_name} not found!", kid[0])
|
|
247
|
-
return
|
|
248
246
|
testcase["walker_ref"] = walker_name
|
|
249
247
|
kid = kid[1:]
|
|
250
248
|
if kid[0].name == "spawn_ctx":
|
|
@@ -205,7 +205,6 @@ class WalkerInterp(Interp):
|
|
|
205
205
|
result = act.run_action(param_list, self._jac_scope, self, jac_ast)
|
|
206
206
|
except Exception as e:
|
|
207
207
|
self.rt_error(e, jac_ast)
|
|
208
|
-
result = None
|
|
209
208
|
if kid[-1].name == "expression":
|
|
210
209
|
self.run_expression(kid[-1])
|
|
211
210
|
dest = self.pop()
|
|
@@ -164,7 +164,6 @@ class MachineState:
|
|
|
164
164
|
self.rt_error(
|
|
165
165
|
f"Variable not defined - {name}", jac_ast or self._cur_jac_ast
|
|
166
166
|
)
|
|
167
|
-
self.push(JacValue(self))
|
|
168
167
|
else:
|
|
169
168
|
self.push(val)
|
|
170
169
|
|
|
@@ -183,12 +182,10 @@ class MachineState:
|
|
|
183
182
|
if dest.check_assignable(jac_ast):
|
|
184
183
|
if not self.rt_check_type(dest.value, [Node, Edge], jac_ast):
|
|
185
184
|
self.rt_error("Copy fields only applies to nodes and edges", jac_ast)
|
|
186
|
-
self.push(dest)
|
|
187
185
|
if dest.value.name != src.value.name:
|
|
188
186
|
self.rt_error(
|
|
189
187
|
f"Node/edge arch {dest.value} don't match {src.value}!", jac_ast
|
|
190
188
|
)
|
|
191
|
-
self.push(dest)
|
|
192
189
|
for i in src.value.context.keys():
|
|
193
190
|
if i in dest.value.context.keys():
|
|
194
191
|
JacValue(
|
|
@@ -304,6 +301,11 @@ class MachineState:
|
|
|
304
301
|
error = self.rt_log_str(error, jac_ast)
|
|
305
302
|
logger.warning(str(error))
|
|
306
303
|
|
|
304
|
+
def rt_subtle_error(self, error, jac_ast=None):
|
|
305
|
+
error = self.rt_log_str(error, jac_ast)
|
|
306
|
+
logger.error(str(error))
|
|
307
|
+
self.runtime_errors.append(error)
|
|
308
|
+
|
|
307
309
|
def rt_error(self, error, jac_ast, append=False):
|
|
308
310
|
"""Prints runtime error to screen"""
|
|
309
311
|
|
|
@@ -355,7 +357,6 @@ class MachineState:
|
|
|
355
357
|
f"expecting {typ}",
|
|
356
358
|
jac_ast,
|
|
357
359
|
)
|
|
358
|
-
return False
|
|
359
360
|
|
|
360
361
|
def get_info(self):
|
|
361
362
|
return {
|
|
@@ -172,6 +172,8 @@ class JsOrcSettings:
|
|
|
172
172
|
"auth": os.getenv("ELASTIC_AUTH"),
|
|
173
173
|
"common_index": f"{KUBE_NAMESPACE}-common",
|
|
174
174
|
"activity_index": f"{KUBE_NAMESPACE}-activity",
|
|
175
|
+
"core_log_index": "core",
|
|
176
|
+
"app_log_index": "app",
|
|
175
177
|
"ilm_policy_name": ELASTIC_ILM_POLICY_NAME,
|
|
176
178
|
"ilm_policy": ELASTIC_ILM_POLICY,
|
|
177
179
|
"index_template_name": ELASTIC_INDEX_TEMPLATE_NAME,
|
|
@@ -11,6 +11,10 @@ import sys
|
|
|
11
11
|
import inspect
|
|
12
12
|
import importlib
|
|
13
13
|
import gc
|
|
14
|
+
import re
|
|
15
|
+
|
|
16
|
+
var_args = re.compile(r"^\*[^\*]")
|
|
17
|
+
var_kwargs = re.compile(r"^\*\*[^\*]")
|
|
14
18
|
|
|
15
19
|
live_actions = {} # {"act.func": func_obj, ...}
|
|
16
20
|
live_action_modules = {} # {__module__: ["act.func1", "act.func2", ...], ...}
|
|
@@ -305,14 +309,32 @@ def gen_remote_func_hook(url, act_name, param_names):
|
|
|
305
309
|
|
|
306
310
|
def func(*args, **kwargs):
|
|
307
311
|
params = {}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
312
|
+
_args = list(args)
|
|
313
|
+
_param_names: list = param_names.copy()
|
|
314
|
+
|
|
315
|
+
args_len = len(args)
|
|
316
|
+
for idx, name in enumerate(param_names):
|
|
317
|
+
if idx >= args_len or not _args:
|
|
318
|
+
break
|
|
319
|
+
_param_names.remove(name)
|
|
320
|
+
if var_args.match(name):
|
|
321
|
+
if _args:
|
|
322
|
+
params[name] = _args
|
|
323
|
+
break
|
|
311
324
|
else:
|
|
312
|
-
params[
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
325
|
+
params[name] = _args.pop(0)
|
|
326
|
+
|
|
327
|
+
for name in _param_names:
|
|
328
|
+
if var_args.match(name):
|
|
329
|
+
if _args:
|
|
330
|
+
params[name] = _args
|
|
331
|
+
elif var_kwargs.match(name):
|
|
332
|
+
if kwargs:
|
|
333
|
+
params[name] = kwargs
|
|
334
|
+
break
|
|
335
|
+
elif name in kwargs:
|
|
336
|
+
params[name] = kwargs.pop(name)
|
|
337
|
+
|
|
316
338
|
# Remove any None-valued parameters to use the default value of the action def
|
|
317
339
|
params = dict([(k, v) for k, v in params.items() if v is not None])
|
|
318
340
|
act_url = f"{url.rstrip('/')}/{act_name.split('.')[-1]}"
|
|
@@ -9,7 +9,12 @@ from time import time
|
|
|
9
9
|
import inspect
|
|
10
10
|
import uvicorn
|
|
11
11
|
import os
|
|
12
|
+
import re
|
|
12
13
|
|
|
14
|
+
var_args = re.compile(r"^\*[^\*]")
|
|
15
|
+
var_kwargs = re.compile(r"^\*\*[^\*]")
|
|
16
|
+
|
|
17
|
+
args_kwargs = (2, 4)
|
|
13
18
|
remote_actions = {}
|
|
14
19
|
registered_apis = []
|
|
15
20
|
registered_endpoints = []
|
|
@@ -51,12 +56,15 @@ def serv_actions():
|
|
|
51
56
|
def gen_api_service(app, func, act_group, aliases, caller_globals):
|
|
52
57
|
"""Helper for jaseci_action decorator"""
|
|
53
58
|
# Construct list of action apis available
|
|
54
|
-
varnames = list(inspect.signature(func).parameters.keys())
|
|
55
59
|
act_group = (
|
|
56
60
|
[os.path.basename(inspect.getfile(func)).split(".")[0]]
|
|
57
61
|
if act_group is None
|
|
58
62
|
else act_group
|
|
59
63
|
)
|
|
64
|
+
varnames = []
|
|
65
|
+
for param in inspect.signature(func).parameters.values():
|
|
66
|
+
varnames.append(str(param) if param.kind in args_kwargs else param.name)
|
|
67
|
+
|
|
60
68
|
remote_actions[f"{'.'.join(act_group+[func.__name__])}"] = varnames
|
|
61
69
|
|
|
62
70
|
# Need to get pydatic model for func signature for fastAPI post
|
|
@@ -64,19 +72,62 @@ def gen_api_service(app, func, act_group, aliases, caller_globals):
|
|
|
64
72
|
|
|
65
73
|
# Keep only fields present in param list in base model
|
|
66
74
|
keep_fields = {}
|
|
67
|
-
for
|
|
68
|
-
if
|
|
69
|
-
keep_fields[
|
|
75
|
+
for name in varnames:
|
|
76
|
+
if var_args.match(name):
|
|
77
|
+
keep_fields[name] = model.__fields__[name[1:]]
|
|
78
|
+
keep_fields[name].name = name
|
|
79
|
+
keep_fields[name].alias = name
|
|
80
|
+
elif var_kwargs.match(name):
|
|
81
|
+
keep_fields[name] = model.__fields__[name[2:]]
|
|
82
|
+
keep_fields[name].name = name
|
|
83
|
+
keep_fields[name].alias = name
|
|
84
|
+
else:
|
|
85
|
+
field = model.__fields__.get(name)
|
|
86
|
+
if field:
|
|
87
|
+
keep_fields[name] = field
|
|
70
88
|
model.__fields__ = keep_fields
|
|
71
89
|
|
|
72
90
|
# Create duplicate funtion for api endpoint and inject in call site globals
|
|
73
91
|
@app.post(f"/{func.__name__}/")
|
|
74
92
|
def new_func(params: model = model.construct()):
|
|
75
|
-
|
|
93
|
+
params: dict = params.__dict__
|
|
94
|
+
pl_peek = str(params)[:128]
|
|
76
95
|
logger.info(str(f"Incoming call to {func.__name__} with {pl_peek}"))
|
|
77
96
|
start_time = time()
|
|
78
97
|
|
|
79
|
-
|
|
98
|
+
args = []
|
|
99
|
+
kwargs = {}
|
|
100
|
+
fp1 = inspect.signature(func).parameters.values()
|
|
101
|
+
fp2 = list(fp1)
|
|
102
|
+
|
|
103
|
+
# try to process args
|
|
104
|
+
for param in fp1:
|
|
105
|
+
_param = str(param) if param.kind in args_kwargs else param.name
|
|
106
|
+
if _param in params:
|
|
107
|
+
fp2.remove(param)
|
|
108
|
+
if var_args.match(_param):
|
|
109
|
+
for arg in params.get(_param) or []:
|
|
110
|
+
args.append(arg)
|
|
111
|
+
break
|
|
112
|
+
elif var_kwargs.match(_param):
|
|
113
|
+
kwargs.update(params.get(_param) or {})
|
|
114
|
+
break
|
|
115
|
+
args.append(params.get(_param))
|
|
116
|
+
else:
|
|
117
|
+
break
|
|
118
|
+
|
|
119
|
+
# try to process kwargs
|
|
120
|
+
for param in fp2:
|
|
121
|
+
param = str(param) if param.kind in args_kwargs else param.name
|
|
122
|
+
if param in params:
|
|
123
|
+
if var_kwargs.match(param):
|
|
124
|
+
kwargs.update(params.get(param) or {})
|
|
125
|
+
break
|
|
126
|
+
kwargs[param] = params.get(param)
|
|
127
|
+
else:
|
|
128
|
+
break
|
|
129
|
+
|
|
130
|
+
ret = validate_arguments(func)(*args, **kwargs)
|
|
80
131
|
tot_time = time() - start_time
|
|
81
132
|
logger.info(
|
|
82
133
|
str(
|