osbot-utils 1.51.0__tar.gz → 1.53.0__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.
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/PKG-INFO +2 -2
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/README.md +1 -1
- osbot_utils-1.53.0/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +126 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Http.py +54 -1
- osbot_utils-1.53.0/osbot_utils/version +1 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/pyproject.toml +1 -1
- osbot_utils-1.51.0/osbot_utils/version +0 -1
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/LICENSE +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/Flow__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.53.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
|
|
22
22
|
|
23
23
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
24
24
|
|
25
|
-

|
26
26
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
27
27
|
|
28
28
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
4
4
|
|
5
|
-

|
6
6
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
7
7
|
|
8
8
|
|
@@ -0,0 +1,126 @@
|
|
1
|
+
import json
|
2
|
+
from http.server import BaseHTTPRequestHandler
|
3
|
+
from urllib.parse import parse_qs
|
4
|
+
|
5
|
+
from osbot_utils.utils.Json import json_dumps_to_bytes
|
6
|
+
|
7
|
+
|
8
|
+
class Custom_Handler_For_Http_Tests(BaseHTTPRequestHandler):
|
9
|
+
|
10
|
+
HTTP_GET_DATA_JSON : str = '/data.json'
|
11
|
+
HTTP_GET_HTML : str = "<html><p>hello world</p></html>"
|
12
|
+
HTTP_GET_IMAGE_PATH : str = '/test.png'
|
13
|
+
HTTP_GET_IMAGE_BYTES : bytes = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00'
|
14
|
+
captured_logs : list = []
|
15
|
+
print_logs : bool = False
|
16
|
+
|
17
|
+
def do_DELETE(self):
|
18
|
+
# Assuming data as a query string in the URL or as a form
|
19
|
+
content_length = int(self.headers['Content-Length']) if 'Content-Length' in self.headers else 0
|
20
|
+
data_string = self.rfile.read(content_length).decode('utf-8')
|
21
|
+
response_data = {'status': 'success', 'data_received': data_string}
|
22
|
+
self.send_response(200)
|
23
|
+
self.send_header('Content-type', 'application/json')
|
24
|
+
self.end_headers()
|
25
|
+
self.wfile.write(json_dumps_to_bytes(response_data))
|
26
|
+
|
27
|
+
|
28
|
+
def do_GET(self):
|
29
|
+
if self.path == self.HTTP_GET_IMAGE_PATH:
|
30
|
+
self.send_response(200)
|
31
|
+
self.send_header("Content-type", "image/png")
|
32
|
+
self.end_headers()
|
33
|
+
self.wfile.write(self.HTTP_GET_IMAGE_BYTES)
|
34
|
+
return
|
35
|
+
if self.path == self.HTTP_GET_DATA_JSON:
|
36
|
+
response_data = {
|
37
|
+
'args': {'ddd': '1', 'eee': '2'},
|
38
|
+
'headers': {
|
39
|
+
'Accept': 'application/json',
|
40
|
+
'Accept-Encoding': 'identity',
|
41
|
+
'Host': 'httpbin.org',
|
42
|
+
'User-Agent': 'Python-urllib/3.10' ,
|
43
|
+
'X-Amzn-Trace-Id': 'Root=1-616b1b1e-4b0a1b1e1b1e1b1e1b1e1b1e'
|
44
|
+
},
|
45
|
+
'origin': 'some origin',
|
46
|
+
'url': 'https://httpbin.org/get?ddd=1&eee=2'
|
47
|
+
}
|
48
|
+
|
49
|
+
self.send_response(200)
|
50
|
+
self.send_header("Content-type", "application/json")
|
51
|
+
self.end_headers()
|
52
|
+
self.wfile.write(json.dumps(response_data).encode('utf-8'))
|
53
|
+
return
|
54
|
+
|
55
|
+
self.send_response(200)
|
56
|
+
self.send_header("Content-type", "text/html")
|
57
|
+
self.end_headers()
|
58
|
+
html = self.HTTP_GET_HTML
|
59
|
+
self.wfile.write(html.encode())
|
60
|
+
|
61
|
+
def do_HEAD(self):
|
62
|
+
self.send_response(200)
|
63
|
+
self.send_header('Content-type', 'text/html')
|
64
|
+
self.end_headers()
|
65
|
+
|
66
|
+
def do_OPTIONS(self):
|
67
|
+
self.send_response(200)
|
68
|
+
self.send_header('Allow', 'POST')
|
69
|
+
self.end_headers()
|
70
|
+
|
71
|
+
def do_POST(self):
|
72
|
+
# Calculate content length & read the data
|
73
|
+
content_length = int(self.headers['Content-Length'])
|
74
|
+
post_data = self.rfile.read(content_length).decode('utf-8')
|
75
|
+
post_data = parse_qs(post_data) # parse the received data
|
76
|
+
|
77
|
+
# Create the response data structure
|
78
|
+
response_data = {
|
79
|
+
'args': {'ddd': '1', 'eee': '2'}, # This should match the expected args in the test
|
80
|
+
'data': '',
|
81
|
+
'files': {},
|
82
|
+
'form': {key: value[0] for key, value in post_data.items()}, # Convert form data from list to single value
|
83
|
+
'headers': {
|
84
|
+
'Accept': self.headers['Accept'],
|
85
|
+
'Accept-Encoding': self.headers['Accept-Encoding'],
|
86
|
+
'Content-Length': self.headers['Content-Length'],
|
87
|
+
'Content-Type' : self.headers['Content-Type'],
|
88
|
+
'Host' : self.headers['Host'],
|
89
|
+
'User-Agent' : self.headers['User-Agent'],
|
90
|
+
'X-Amzn-Trace-Id': 'Root=1-616b1b1e-4b0a1b1e1b1e1b1e1b1e1b1e'
|
91
|
+
},
|
92
|
+
'origin': 'some origin',
|
93
|
+
'json': { 'json':'is here', 'a':42},
|
94
|
+
'url': self.headers['Host'] + self.path # Construct the URL from the Host header and path
|
95
|
+
}
|
96
|
+
|
97
|
+
# Send the HTTP response
|
98
|
+
|
99
|
+
self.send_response(200)
|
100
|
+
self.send_header('Content-type', 'application/json')
|
101
|
+
self.end_headers()
|
102
|
+
# Convert the response data to JSON and write it to the response
|
103
|
+
self.wfile.write(json.dumps(response_data).encode('utf-8'))
|
104
|
+
|
105
|
+
def do_PUT(self):
|
106
|
+
content_length = int(self.headers['Content-Length']) # todo refactor into helper method (since there are a number of methods here that use this)
|
107
|
+
post_data = self.rfile.read(content_length).decode('utf-8')
|
108
|
+
post_data = parse_qs(post_data) # parse the received data
|
109
|
+
response_data = {
|
110
|
+
'args': {'ddd': '1', 'eee': '2'}, # This should match the expected args in the test
|
111
|
+
'data': '',
|
112
|
+
'files': {},
|
113
|
+
'form': {key: value[0] for key, value in post_data.items()}, # Convert form data from list to single value
|
114
|
+
'headers': { 'X-Amzn-Trace-Id': 'Root=1-616b1b1e-4b0a1b1e1b1e1b1e1b1e1b1e'},
|
115
|
+
'origin': 'some origin',
|
116
|
+
}
|
117
|
+
self.send_response(200)
|
118
|
+
self.send_header('Content-type', 'application/json')
|
119
|
+
self.end_headers()
|
120
|
+
self.wfile.write(json.dumps(response_data).encode('utf-8'))
|
121
|
+
|
122
|
+
def log_message(self, msg_format, *args):
|
123
|
+
log_message = "%s - - %s" % (self.address_string(), msg_format % args)
|
124
|
+
self.captured_logs.append(log_message)
|
125
|
+
if self.print_logs:
|
126
|
+
print(log_message)
|
@@ -1,13 +1,22 @@
|
|
1
1
|
import json
|
2
|
+
import os
|
3
|
+
import re
|
2
4
|
import socket
|
3
5
|
import ssl
|
6
|
+
import unicodedata
|
4
7
|
from time import sleep
|
8
|
+
from urllib.parse import quote, urljoin, urlparse, urlunparse
|
5
9
|
from urllib.request import Request, urlopen
|
6
10
|
|
11
|
+
from osbot_utils.utils.Str import html_decode
|
12
|
+
|
13
|
+
from osbot_utils.utils.Misc import url_decode
|
14
|
+
|
7
15
|
from osbot_utils.utils.Files import save_bytes_as_file, file_size, file_bytes, file_open_bytes, file_create
|
8
16
|
from osbot_utils.utils.Python_Logger import Python_Logger
|
9
17
|
|
10
|
-
URL_CHECK_HOST_ONLINE
|
18
|
+
URL_CHECK_HOST_ONLINE = 'https://www.google.com'
|
19
|
+
URL_JOIN_SAFE__MAX_ITERATIONS = 5
|
11
20
|
|
12
21
|
def current_host_offline(url_to_use=URL_CHECK_HOST_ONLINE):
|
13
22
|
return current_host_online(url_to_use=url_to_use) is False
|
@@ -141,3 +150,47 @@ def PUT(url, data='', headers=None):
|
|
141
150
|
|
142
151
|
def PUT_json(*args, **kwargs):
|
143
152
|
return json.loads(PUT(*args, **kwargs))
|
153
|
+
|
154
|
+
def url_join_safe(base_path, path=''):
|
155
|
+
if not isinstance(base_path, str) or not isinstance(path, str):
|
156
|
+
return None
|
157
|
+
|
158
|
+
max_iterations = URL_JOIN_SAFE__MAX_ITERATIONS
|
159
|
+
|
160
|
+
path = unicodedata.normalize('NFC', path)
|
161
|
+
path_normalised = path
|
162
|
+
for _ in range(max_iterations):
|
163
|
+
fixed_segments = []
|
164
|
+
for segment in path_normalised.split('/'):
|
165
|
+
segment_decoded = html_decode(url_decode(segment))
|
166
|
+
fixed_segment = re.sub(r'[^a-zA-Z0-9\-_.]+', '-', segment_decoded)
|
167
|
+
fixed_segment = fixed_segment.replace("..", "-")
|
168
|
+
if fixed_segment:
|
169
|
+
fixed_segments.append(fixed_segment)
|
170
|
+
path_cleaned = '/'.join(fixed_segments)
|
171
|
+
|
172
|
+
if path_cleaned == path_normalised:
|
173
|
+
break
|
174
|
+
path_normalised = path_cleaned
|
175
|
+
else:
|
176
|
+
return None # If we exit the loop without breaking, return None
|
177
|
+
|
178
|
+
if not base_path.endswith('/'): # Ensure that the base path ends with '/'
|
179
|
+
base_path += '/'
|
180
|
+
|
181
|
+
if path_normalised.startswith('/'): # Remove leading '/' from path
|
182
|
+
path_normalised = path_normalised[1:]
|
183
|
+
|
184
|
+
path_quoted = quote(path_normalised, safe='/') # Quote the path to encode special characters
|
185
|
+
joined_path = urljoin(base_path, path_quoted) # Join the base path and normalized path
|
186
|
+
parsed_base = urlparse(base_path) # Parse and verify the result
|
187
|
+
parsed_joined = urlparse(joined_path)
|
188
|
+
|
189
|
+
if (parsed_joined.scheme == parsed_base.scheme and # Ensure the joined URL starts with the base URL to prevent open redirect vulnerabilities
|
190
|
+
parsed_joined.netloc == parsed_base.netloc and
|
191
|
+
joined_path.startswith(base_path)):
|
192
|
+
if joined_path.endswith('/'): # Remove trailing slash
|
193
|
+
joined_path = joined_path[:-1]
|
194
|
+
return joined_path
|
195
|
+
|
196
|
+
return None
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.53.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v1.51.0
|
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
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
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
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/capture_exception.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/decorators/methods/remove_return_value.py
RENAMED
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
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py
RENAMED
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.51.0 → osbot_utils-1.53.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
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
|