sunholo 0.81.2__py3-none-any.whl → 0.81.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -110,6 +110,9 @@ def sign_gcs_url(bucket_name:str, object_name:str, expiry_secs:int = 86400) -> O
110
110
 
111
111
  expires = datetime.now() + timedelta(seconds=expiry_secs)
112
112
 
113
+ if object_name.startswith("gs://"):
114
+ object_name = object_name.replace(f"gs://{bucket_name}/","")
115
+
113
116
  try:
114
117
  bucket = get_bucket(bucket_name)
115
118
  blob = bucket.blob(object_name)
@@ -136,9 +139,10 @@ def sign_gcs_url(bucket_name:str, object_name:str, expiry_secs:int = 86400) -> O
136
139
  def construct_download_link(source_uri: str) -> Tuple[str, str, bool]:
137
140
  """Creates a viewable Cloud Storage web browser link from a gs:// URI."""
138
141
  if not source_uri.startswith("gs://"):
139
- return source_uri, source_uri, False # Return the URI as is if it doesn't start with gs://
140
-
142
+ return source_uri, source_uri, False # Return the URI if it doesn't start with gs://
143
+
141
144
  bucket_name, object_name = parse_gs_uri(source_uri)
145
+ log.info(f"Source URL: {source_uri} parsed to {bucket_name=} - {object_name=}")
142
146
 
143
147
  signed_url = sign_gcs_url(bucket_name, object_name)
144
148
  if signed_url:
@@ -3,6 +3,8 @@ import json
3
3
  import yaml
4
4
  from datetime import datetime, timedelta
5
5
  from collections import defaultdict
6
+ from yaml.constructor import SafeConstructor, ConstructorError
7
+
6
8
  from .timedelta import format_timedelta
7
9
 
8
10
  class ConfigManager:
@@ -120,11 +122,30 @@ class ConfigManager:
120
122
  dict: The loaded configuration.
121
123
  """
122
124
  from ..custom_logging import log
125
+
126
+ class NoDuplicateKeyConstructor(SafeConstructor):
127
+ def construct_mapping(self, node, deep=False):
128
+ mapping = {}
129
+ for key_node, value_node in node.value:
130
+ key = self.construct_object(key_node, deep=deep)
131
+ if key in mapping:
132
+ raise ConstructorError(f"Duplicate key found: {key_node.start_mark}")
133
+ value = self.construct_object(value_node, deep=deep)
134
+ mapping[key] = value
135
+ return mapping
136
+
137
+ NoDuplicateKeyLoader = yaml.Loader
138
+ NoDuplicateKeyLoader.add_constructor(
139
+ yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
140
+ NoDuplicateKeyConstructor.construct_mapping
141
+ )
142
+
123
143
  with open(config_file, 'r') as file:
124
144
  if filename.endswith('.json'):
125
145
  config = json.load(file)
126
146
  else:
127
- config = yaml.safe_load(file)
147
+ config = yaml.load(file, Loader=NoDuplicateKeyLoader)
148
+
128
149
  self.config_cache[filename] = (config, datetime.now())
129
150
  if is_local:
130
151
  log.warning(f"Local configuration override for {filename} via {self.local_config_folder}")
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.81.2
3
+ Version: 0.81.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.81.2.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.81.4.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -80,7 +80,7 @@ sunholo/embedder/embed_chunk.py,sha256=MCbTePWjUbIRVDFFhHJ94BvOZvIom62-mTr0PmfQy
80
80
  sunholo/gcs/__init__.py,sha256=SZvbsMFDko40sIRHTHppA37IijvJTae54vrhooEF5-4,90
81
81
  sunholo/gcs/add_file.py,sha256=wkBQBfnjUbItnRNGiG9oBr7Jf2QfLpZf2nA5zT435ss,7107
82
82
  sunholo/gcs/download_folder.py,sha256=ijJTnS595JqZhBH8iHFErQilMbkuKgL-bnTCMLGuvlA,1614
83
- sunholo/gcs/download_url.py,sha256=Al7IbNXiaZ-zV09GHhUE9hx013lghJtE9nW8SJx_sas,5938
83
+ sunholo/gcs/download_url.py,sha256=q1NiJSvEhdNrmU5ZJ-sBCMC_J5CxzrajY8LRgdPOV_M,6130
84
84
  sunholo/gcs/metadata.py,sha256=oQLcXi4brsZ74aegWyC1JZmhlaEV270HS5_UWtAYYWE,898
85
85
  sunholo/invoke/__init__.py,sha256=bELcqIjzKvaupcIN5OQmDgGx_8jARtH9T6PCe8UgcvE,99
86
86
  sunholo/invoke/direct_vac_func.py,sha256=wvrYDZNLoLeO_uQiqRdGUlhwjhLr05dVNBST9TxwwBA,4478
@@ -118,7 +118,7 @@ sunholo/utils/__init__.py,sha256=Hv02T5L2zYWvCso5hzzwm8FQogwBq0OgtUbN_7Quzqc,89
118
118
  sunholo/utils/api_key.py,sha256=Ct4bIAQZxzPEw14hP586LpVxBAVi_W9Serpy0BK-7KI,244
119
119
  sunholo/utils/big_context.py,sha256=gJIP7_ZL-YSLhOMq8jmFTMqH1wq8eB1NK7oKPeZAq2s,5578
120
120
  sunholo/utils/config.py,sha256=aG29MXcL5qzQMtCMqcdy-2ysDCYf9Zn_ZLk5NNOQNSE,8982
121
- sunholo/utils/config_class.py,sha256=3Hzeue_hvN1HR13c9VHCYUVspbvkLBpuIGvlGtxv_H8,9013
121
+ sunholo/utils/config_class.py,sha256=ygKw3E-Q6MLc1XZKRULCTPTibsOFlEfyCA3GyxOhPa8,9869
122
122
  sunholo/utils/config_schema.py,sha256=Wv-ncitzljOhgbDaq9qnFqH5LCuxNv59dTGDWgd1qdk,4189
123
123
  sunholo/utils/gcp.py,sha256=uueODEpA-P6O15-t0hmcGC9dONLO_hLfzSsSoQnkUss,4854
124
124
  sunholo/utils/gcp_project.py,sha256=Fa0IhCX12bZ1ctF_PKN8PNYd7hihEUfb90kilBfUDjg,1411
@@ -134,9 +134,9 @@ sunholo/vertex/init.py,sha256=1OQwcPBKZYBTDPdyU7IM4X4OmiXLdsNV30C-fee2scQ,2875
134
134
  sunholo/vertex/memory_tools.py,sha256=pgSahVDh7GPEulu3nl-w0jb5lTClb4TCnVxPnMokNZY,7533
135
135
  sunholo/vertex/safety.py,sha256=S9PgQT1O_BQAkcqauWncRJaydiP8Q_Jzmu9gxYfy1VA,2482
136
136
  sunholo/vertex/type_dict_to_json.py,sha256=uTzL4o9tJRao4u-gJOFcACgWGkBOtqACmb6ihvCErL8,4694
137
- sunholo-0.81.2.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
138
- sunholo-0.81.2.dist-info/METADATA,sha256=qIVU2f03S9E678dvZfzckg3hw8bkVTGQ-8ytTlesoek,7348
139
- sunholo-0.81.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
140
- sunholo-0.81.2.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
141
- sunholo-0.81.2.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
142
- sunholo-0.81.2.dist-info/RECORD,,
137
+ sunholo-0.81.4.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
138
+ sunholo-0.81.4.dist-info/METADATA,sha256=cCI0nirNVKWA2M3ocqxpse6iClUWl68YYG-aAOnZr-E,7348
139
+ sunholo-0.81.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
140
+ sunholo-0.81.4.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
141
+ sunholo-0.81.4.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
142
+ sunholo-0.81.4.dist-info/RECORD,,