sunholo 0.104.2__tar.gz → 0.104.4__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.
- {sunholo-0.104.2 → sunholo-0.104.4}/PKG-INFO +2 -2
- {sunholo-0.104.2 → sunholo-0.104.4}/setup.py +1 -1
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/flask/vac_routes.py +24 -24
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.104.2 → sunholo-0.104.4}/LICENSE.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/MANIFEST.in +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/README.md +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/setup.cfg +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/route.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/agents/swagger.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/archive/archive.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/auth/gcloud.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/auth/refresh.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/auth/run.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/azure/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/azure/auth.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/azure/blobs.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/azure/event_grid.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/bots/discord.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/azure.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/encode_metadata.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/images.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/process_chunker_data.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/pubsub.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/cli.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/configs.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/cli/vertex.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/components/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/components/llm.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/components/retriever.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/custom_logging.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/database.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/database/uuid.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/excel/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/excel/plugin.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/download_folder.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/extract_and_sign.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/genai/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/genai/images.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/genai/init.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/genai/process_funcs_cls.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/genai/safety.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/invoke/async_class.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/invoke/direct_vac_func.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/langfuse/evals.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/llamaindex/llamaindex_class.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/llamaindex/user_history.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/qna/retry.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/terraform/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/terraform/tfvars_editor.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/tools/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/tools/web_browser.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/api_key.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/config.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/config_class.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/mime.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/utils/version.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/extensions_call.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/genai_functions.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/init.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo/vertex/type_dict_to_json.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/tests/test_async.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/tests/test_chat_history.py +0 -0
- {sunholo-0.104.2 → sunholo-0.104.4}/tests/test_config.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.104.
|
|
3
|
+
Version: 0.104.4
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.104.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.104.4.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -96,14 +96,21 @@ if __name__ == "__main__":
|
|
|
96
96
|
self.app.route("/health", methods=['GET'])(self.health)
|
|
97
97
|
|
|
98
98
|
# Streaming VAC
|
|
99
|
-
self.app.route('/vac/streaming/<vector_name>',
|
|
99
|
+
self.app.route('/vac/streaming/<vector_name>',
|
|
100
|
+
methods=['POST'],
|
|
101
|
+
provide_automatic_options=False)(self.handle_stream_vac)
|
|
100
102
|
|
|
101
103
|
# Static VAC
|
|
102
|
-
self.app.route('/vac/<vector_name>',
|
|
104
|
+
self.app.route('/vac/<vector_name>',
|
|
105
|
+
methods=['POST'],
|
|
106
|
+
provide_automatic_options=False)(self.handle_process_vac)
|
|
103
107
|
|
|
104
108
|
# Authentication middleware
|
|
105
109
|
self.app.before_request(self.check_authentication)
|
|
106
|
-
|
|
110
|
+
|
|
111
|
+
# Handle OPTIONS requests explicitly
|
|
112
|
+
self.app.route('/vac/streaming/<vector_name>', methods=['OPTIONS'])(self.handle_options)
|
|
113
|
+
self.app.route('/vac/<vector_name>', methods=['OPTIONS'])(self.handle_options)
|
|
107
114
|
|
|
108
115
|
# OpenAI health endpoint
|
|
109
116
|
self.app.route('/openai/health', methods=['GET', 'POST'])(self.openai_health_endpoint)
|
|
@@ -112,22 +119,30 @@ if __name__ == "__main__":
|
|
|
112
119
|
self.app.route('/openai/v1/chat/completions', methods=['POST'])(self.handle_openai_compatible_endpoint)
|
|
113
120
|
self.app.route('/openai/v1/chat/completions/<vector_name>', methods=['POST'])(self.handle_openai_compatible_endpoint)
|
|
114
121
|
|
|
115
|
-
# Register OPTIONS handler for CORS
|
|
116
|
-
self.app.route('/<path:path>', methods=['OPTIONS'])(self.handle_options)
|
|
117
|
-
|
|
118
122
|
self.register_additional_routes()
|
|
119
123
|
|
|
120
|
-
|
|
124
|
+
self.app.after_request(self.register_after_request)
|
|
125
|
+
|
|
126
|
+
def handle_options(self, **kwargs):
|
|
121
127
|
response = Response(status=200)
|
|
122
128
|
response.headers.add('Access-Control-Allow-Origin', '*')
|
|
123
|
-
|
|
129
|
+
|
|
124
130
|
# Reflect the request's `Access-Control-Request-Headers`
|
|
125
131
|
request_headers = request.headers.get('Access-Control-Request-Headers', '')
|
|
126
132
|
response.headers.add('Access-Control-Allow-Headers', request_headers)
|
|
127
133
|
|
|
128
134
|
# Specify allowed methods
|
|
129
135
|
response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
|
130
|
-
|
|
136
|
+
log.info(f'OPTION Request headers: {request_headers}')
|
|
137
|
+
|
|
138
|
+
return response
|
|
139
|
+
|
|
140
|
+
def register_after_request(self, response):
|
|
141
|
+
# Add CORS headers for all responses
|
|
142
|
+
response.headers.add('Access-Control-Allow-Origin', '*')
|
|
143
|
+
response.headers.add('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-api-key')
|
|
144
|
+
response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
|
145
|
+
|
|
131
146
|
return response
|
|
132
147
|
|
|
133
148
|
def register_additional_routes(self):
|
|
@@ -169,21 +184,6 @@ if __name__ == "__main__":
|
|
|
169
184
|
for route in self.additional_routes:
|
|
170
185
|
self.app.route(route["rule"], methods=route["methods"])(route["handler"])
|
|
171
186
|
|
|
172
|
-
def register_after_request(self, response):
|
|
173
|
-
"""
|
|
174
|
-
Register after_request to add CORS headers.
|
|
175
|
-
"""
|
|
176
|
-
log.debug(f'Request headers: {request.headers}')
|
|
177
|
-
# the header forwarded
|
|
178
|
-
|
|
179
|
-
response.headers.add('Access-Control-Allow-Origin', '*')
|
|
180
|
-
response.headers.add('Access-Control-Allow-Headers', 'Content-Type, Authorization, x-api-key')
|
|
181
|
-
response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
|
182
|
-
|
|
183
|
-
log.debug(f'Response headers: {response.headers}')
|
|
184
|
-
|
|
185
|
-
return response
|
|
186
|
-
|
|
187
187
|
def home(self):
|
|
188
188
|
return jsonify("OK")
|
|
189
189
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.104.
|
|
3
|
+
Version: 0.104.4
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.104.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.104.4.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.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
|
|
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
|
|
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
|
|
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
|
|
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
|