sunholo 0.101.8__tar.gz → 0.101.11__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.
Files changed (164) hide show
  1. {sunholo-0.101.8 → sunholo-0.101.11}/PKG-INFO +2 -2
  2. {sunholo-0.101.8 → sunholo-0.101.11}/setup.py +1 -1
  3. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/add_file.py +2 -35
  4. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/genai/process_funcs_cls.py +8 -2
  5. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/mime.py +6 -2
  6. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/PKG-INFO +2 -2
  7. {sunholo-0.101.8 → sunholo-0.101.11}/LICENSE.txt +0 -0
  8. {sunholo-0.101.8 → sunholo-0.101.11}/MANIFEST.in +0 -0
  9. {sunholo-0.101.8 → sunholo-0.101.11}/README.md +0 -0
  10. {sunholo-0.101.8 → sunholo-0.101.11}/setup.cfg +0 -0
  11. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/__init__.py +0 -0
  12. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/__init__.py +0 -0
  13. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/chat_history.py +0 -0
  14. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/dispatch_to_qa.py +0 -0
  15. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/fastapi/__init__.py +0 -0
  16. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/fastapi/base.py +0 -0
  17. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/fastapi/qna_routes.py +0 -0
  18. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/flask/__init__.py +0 -0
  19. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/flask/base.py +0 -0
  20. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/flask/qna_routes.py +0 -0
  21. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/flask/vac_routes.py +0 -0
  22. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/langserve.py +0 -0
  23. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/pubsub.py +0 -0
  24. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/route.py +0 -0
  25. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/special_commands.py +0 -0
  26. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/agents/swagger.py +0 -0
  27. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/archive/__init__.py +0 -0
  28. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/archive/archive.py +0 -0
  29. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/auth/__init__.py +0 -0
  30. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/auth/gcloud.py +0 -0
  31. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/auth/refresh.py +0 -0
  32. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/auth/run.py +0 -0
  33. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/azure/__init__.py +0 -0
  34. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/azure/auth.py +0 -0
  35. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/azure/blobs.py +0 -0
  36. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/azure/event_grid.py +0 -0
  37. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/bots/__init__.py +0 -0
  38. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/bots/discord.py +0 -0
  39. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/bots/github_webhook.py +0 -0
  40. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/bots/webapp.py +0 -0
  41. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/__init__.py +0 -0
  42. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/azure.py +0 -0
  43. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/doc_handling.py +0 -0
  44. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/encode_metadata.py +0 -0
  45. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/images.py +0 -0
  46. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/loaders.py +0 -0
  47. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/message_data.py +0 -0
  48. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/pdfs.py +0 -0
  49. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/process_chunker_data.py +0 -0
  50. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/publish.py +0 -0
  51. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/pubsub.py +0 -0
  52. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/chunker/splitter.py +0 -0
  53. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/__init__.py +0 -0
  54. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/chat_vac.py +0 -0
  55. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/cli.py +0 -0
  56. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/cli_init.py +0 -0
  57. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/configs.py +0 -0
  58. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/deploy.py +0 -0
  59. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/embedder.py +0 -0
  60. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/merge_texts.py +0 -0
  61. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/run_proxy.py +0 -0
  62. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/sun_rich.py +0 -0
  63. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/swagger.py +0 -0
  64. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/cli/vertex.py +0 -0
  65. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/components/__init__.py +0 -0
  66. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/components/llm.py +0 -0
  67. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/components/retriever.py +0 -0
  68. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/components/vectorstore.py +0 -0
  69. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/custom_logging.py +0 -0
  70. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/__init__.py +0 -0
  71. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/alloydb.py +0 -0
  72. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/alloydb_client.py +0 -0
  73. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/database.py +0 -0
  74. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/lancedb.py +0 -0
  75. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/create_function.sql +0 -0
  76. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  77. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/create_table.sql +0 -0
  78. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  79. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/return_sources.sql +0 -0
  80. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/sql/sb/setup.sql +0 -0
  81. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/static_dbs.py +0 -0
  82. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/database/uuid.py +0 -0
  83. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/discovery_engine/__init__.py +0 -0
  84. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/discovery_engine/chunker_handler.py +0 -0
  85. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/discovery_engine/create_new.py +0 -0
  86. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  87. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  88. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/embedder/__init__.py +0 -0
  89. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/embedder/embed_chunk.py +0 -0
  90. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/excel/__init__.py +0 -0
  91. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/excel/plugin.py +0 -0
  92. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/__init__.py +0 -0
  93. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/download_folder.py +0 -0
  94. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/download_url.py +0 -0
  95. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/extract_and_sign.py +0 -0
  96. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/gcs/metadata.py +0 -0
  97. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/genai/__init__.py +0 -0
  98. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/genai/images.py +0 -0
  99. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/genai/init.py +0 -0
  100. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/genai/safety.py +0 -0
  101. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/invoke/__init__.py +0 -0
  102. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/invoke/async_class.py +0 -0
  103. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/invoke/direct_vac_func.py +0 -0
  104. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/invoke/invoke_vac_utils.py +0 -0
  105. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/langfuse/__init__.py +0 -0
  106. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/langfuse/callback.py +0 -0
  107. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/langfuse/evals.py +0 -0
  108. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/langfuse/prompts.py +0 -0
  109. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/llamaindex/__init__.py +0 -0
  110. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/llamaindex/get_files.py +0 -0
  111. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/llamaindex/import_files.py +0 -0
  112. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/llamaindex/llamaindex_class.py +0 -0
  113. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/llamaindex/user_history.py +0 -0
  114. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/lookup/__init__.py +0 -0
  115. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/lookup/model_lookup.yaml +0 -0
  116. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/patches/__init__.py +0 -0
  117. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/patches/langchain/__init__.py +0 -0
  118. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/patches/langchain/lancedb.py +0 -0
  119. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/patches/langchain/vertexai.py +0 -0
  120. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/pubsub/__init__.py +0 -0
  121. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/pubsub/process_pubsub.py +0 -0
  122. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/pubsub/pubsub_manager.py +0 -0
  123. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/qna/__init__.py +0 -0
  124. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/qna/parsers.py +0 -0
  125. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/qna/retry.py +0 -0
  126. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/streaming/__init__.py +0 -0
  127. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/streaming/content_buffer.py +0 -0
  128. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/streaming/langserve.py +0 -0
  129. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/streaming/stream_lookup.py +0 -0
  130. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/streaming/streaming.py +0 -0
  131. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/summarise/__init__.py +0 -0
  132. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/summarise/summarise.py +0 -0
  133. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/terraform/__init__.py +0 -0
  134. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/terraform/tfvars_editor.py +0 -0
  135. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/tools/__init__.py +0 -0
  136. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/tools/web_browser.py +0 -0
  137. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/__init__.py +0 -0
  138. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/api_key.py +0 -0
  139. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/big_context.py +0 -0
  140. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/config.py +0 -0
  141. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/config_class.py +0 -0
  142. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/config_schema.py +0 -0
  143. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/gcp.py +0 -0
  144. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/gcp_project.py +0 -0
  145. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/parsers.py +0 -0
  146. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/timedelta.py +0 -0
  147. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/user_ids.py +0 -0
  148. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/utils/version.py +0 -0
  149. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/__init__.py +0 -0
  150. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/extensions_call.py +0 -0
  151. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/extensions_class.py +0 -0
  152. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/genai_functions.py +0 -0
  153. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/init.py +0 -0
  154. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/memory_tools.py +0 -0
  155. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/safety.py +0 -0
  156. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo/vertex/type_dict_to_json.py +0 -0
  157. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/SOURCES.txt +0 -0
  158. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/dependency_links.txt +0 -0
  159. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/entry_points.txt +0 -0
  160. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/requires.txt +0 -0
  161. {sunholo-0.101.8 → sunholo-0.101.11}/sunholo.egg-info/top_level.txt +0 -0
  162. {sunholo-0.101.8 → sunholo-0.101.11}/tests/test_async.py +0 -0
  163. {sunholo-0.101.8 → sunholo-0.101.11}/tests/test_chat_history.py +0 -0
  164. {sunholo-0.101.8 → sunholo-0.101.11}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.101.8
3
+ Version: 0.101.11
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.101.8.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.101.11.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- version = '0.101.8'
3
+ version = '0.101.11'
4
4
 
5
5
  setup(
6
6
  name='sunholo',
@@ -24,40 +24,7 @@ except ImportError:
24
24
 
25
25
  from ..custom_logging import log
26
26
  from ..utils import ConfigManager
27
-
28
- def guess_image_type(file_path: str) -> str:
29
- """
30
- Guess the image type based on the file extension.
31
-
32
- Args:
33
- file_path (str): The path or URL of the image file.
34
-
35
- Returns:
36
- str: The guessed image type (e.g., "jpeg", "png", "gif", etc.)
37
- or None if the extension is not recognized.
38
- """
39
- # Extract the file extension
40
- _, ext = os.path.splitext(file_path)
41
-
42
- # Normalize and remove the leading dot
43
- ext = ext.lower().strip('.')
44
-
45
- # Mapping of common file extensions to image types
46
- extension_to_type = {
47
- "jpg": "image/jpeg",
48
- "jpeg": "image/jpeg",
49
- "png": "image/png",
50
- "gif": "image/gif",
51
- "bmp": "image/bmp",
52
- "tiff": "image/tiff",
53
- "tif": "image/tiff",
54
- "webp": "image/webp",
55
- "ico": "image/ico",
56
- "svg": "image/svg",
57
- "pdf": "application/pdf",
58
- }
59
-
60
- return extension_to_type.get(ext.lower(), None)
27
+ from ..utils.mime import guess_mime_type
61
28
 
62
29
 
63
30
  def handle_base64_image(base64_data: str, vector_name: str, extension: str):
@@ -92,7 +59,7 @@ def handle_base64_image(base64_data: str, vector_name: str, extension: str):
92
59
  os.remove(filename) # Clean up the saved file
93
60
 
94
61
  # Determine MIME type based on extension
95
- mime_type = guess_image_type(extension) or "application/octet-stream"
62
+ mime_type = guess_mime_type(extension) or "application/octet-stream"
96
63
 
97
64
  return image_uri, mime_type
98
65
  except Exception as e:
@@ -15,6 +15,7 @@ try:
15
15
  from google.generativeai.types import RequestOptions
16
16
  from google.api_core import retry
17
17
  from google.generativeai import ChatSession
18
+ from google.api_core.exceptions import RetryError
18
19
  except ImportError:
19
20
  genai = None
20
21
  ChatSession = None
@@ -441,15 +442,20 @@ class GenAIFunctionProcessor:
441
442
  initial=10,
442
443
  multiplier=2,
443
444
  maximum=60,
444
- timeout=60
445
+ timeout=90
445
446
  )
446
447
  ))
448
+ except RetryError as err:
449
+ msg = f"Retry error - lets try again if its occured less than twice: {str(err)}"
450
+ log.warning(msg)
451
+ token_queue.append(msg)
452
+ this_text += msg
447
453
 
448
454
  except Exception as e:
449
455
  msg = f"Error sending {content} to model: {str(e)} - {traceback.format_exc()}"
450
456
  log.info(msg)
451
457
  token_queue.append(msg)
452
- break
458
+ this_text += msg
453
459
 
454
460
  loop_metadata = response.usage_metadata
455
461
  if loop_metadata:
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from ..custom_logging import log
2
3
 
3
4
  def guess_mime_type(file_path: str) -> str:
4
5
  """
@@ -18,6 +19,7 @@ def guess_mime_type(file_path: str) -> str:
18
19
  ext = ext.lower().strip('.')
19
20
 
20
21
  # Mapping of common file extensions to file types
22
+ log.info(f"Guessing {file_path} is {ext}")
21
23
  extension_to_type = {
22
24
  "jpg": "image/jpeg",
23
25
  "jpeg": "image/jpeg",
@@ -59,6 +61,8 @@ def guess_mime_type(file_path: str) -> str:
59
61
  "tsx": "text/tsx",
60
62
  "jsx": "text/jsx",
61
63
  }
62
-
63
- return extension_to_type.get(ext, "")
64
+ mime=extension_to_type.get(ext, "")
65
+ log.info(f"Guessing {file_path} with {ext=} is {mime=}")
66
+
67
+ return mime
64
68
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.101.8
3
+ Version: 0.101.11
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.101.8.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.101.11.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