bw-essentials-core 0.0.5__py3-none-any.whl → 0.0.7__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.

Potentially problematic release.


This version of bw-essentials-core might be problematic. Click here for more details.

@@ -132,15 +132,17 @@ class DataLoch:
132
132
  file_name (str): File name to use in LakeFS.
133
133
  commit (bool): Whether to commit the change after upload. Defaults to True.
134
134
  """
135
- logger.info(f"Uploading file {file_name} from {local_file_path}")
136
- branch_obj = self._get_branch(repository, branch)
137
- self.s3.upload_file(repository, local_file_path, f"{branch}/{file_name}", "application/octet-stream")
138
- if commit:
139
- commit_response = branch_obj.commit(
140
- message=f"{file_name=} uploaded to data lake.",
141
- metadata=self._get_meta_data(repository, branch)
142
- )
143
- logger.info(f"Changes committed: {commit_response=}")
135
+ logger.info(f"Uploading {file_name=} from {local_file_path=}")
136
+ logger.info(f"{file_name=} uploading to LakeFS")
137
+ branch_obj = self._get_branch(branch=branch, repository=repository)
138
+ obj = branch_obj.object(path=f"{file_name}")
139
+ with open(local_file_path, mode='rb') as reader, obj.writer("wb") as writer:
140
+ writer.write(reader.read())
141
+ commit_response = branch_obj.commit(
142
+ message=f"{file_name=} uploaded to data lake.",
143
+ metadata=self._get_meta_data(branch=branch,repository=repository)
144
+ )
145
+ logger.info(f"Changes committed: {commit_response=}")
144
146
 
145
147
  def download_data(self, repository, branch, local_file_path, file_name):
146
148
  """
@@ -158,9 +158,9 @@ class ApiClient:
158
158
  try:
159
159
  response = requests.request(method, formatted_url, headers=self.headers, **kwargs)
160
160
  elapsed_time_ms = (time.time() - start) * 1000
161
- response.raise_for_status()
162
161
  json_data = response.json()
163
162
  self._log_response(method, formatted_url, response.status_code, elapsed_time_ms, json_data)
163
+ response.raise_for_status()
164
164
  return json_data
165
165
  except Exception as exc:
166
166
  elapsed_time_ms = (time.time() - start) * 1000
@@ -44,7 +44,8 @@ class MasterData(ApiClient):
44
44
  "constant": "constants",
45
45
  "broker_config": "broker/config/keys",
46
46
  "broker_details": "securities/{}/details",
47
- "isin_details": "company/details/isin"
47
+ "isin_details": "company/details/isin",
48
+ "shorten_url": "shorten-url"
48
49
  }
49
50
 
50
51
  def get_security_details(self, securities: List[str]) -> Optional[Dict[str, Any]]:
@@ -107,7 +108,8 @@ class MasterData(ApiClient):
107
108
  Returns:
108
109
  Optional[Dict[str, Any]]: Configuration key data or None.
109
110
  """
110
- logger.info(f"Fetching broker config keys for broker={broker}, product_type={product_type}, category={category}")
111
+ logger.info(
112
+ f"Fetching broker config keys for broker={broker}, product_type={product_type}, category={category}")
111
113
  params = {k: v for k, v in {'broker': broker, 'product': product_type, 'category': category}.items() if v}
112
114
  response = self._get(url=self.base_url,
113
115
  endpoint=self.urls["broker_config"],
@@ -255,3 +257,23 @@ class MasterData(ApiClient):
255
257
 
256
258
  logger.info("Market is closed based on hours and/or holiday check.")
257
259
  return False
260
+
261
+ def shorten_url(self, long_url: str) -> Dict[str, Any]:
262
+ """Shorten a long URL using the configured URL-shortening service.
263
+
264
+ Args:
265
+ long_url (str): The long URL to shorten.
266
+
267
+ Returns:
268
+ dict: A dictionary containing the shortened URL or any error data.
269
+
270
+ Logs:
271
+ Information about the long_url being shortened.
272
+
273
+ """
274
+ logger.info(f"Shortening URL: {long_url}")
275
+ response = self._post(url=self.base_url,
276
+ endpoint=self.urls["shorten_url"],
277
+ data={"long_url": long_url})
278
+ logger.info(f"Shortening URL {response =}")
279
+ return response.get("data", {})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bw-essentials-core
3
- Version: 0.0.5
3
+ Version: 0.0.7
4
4
  Summary: Reusable utilities for S3, email, Data Loch, Microsoft Teams Notifications and more.
5
5
  Author: InvestorAI
6
6
  Author-email: support+tech@investorai.in
@@ -2,7 +2,7 @@ bw_essentials/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  bw_essentials/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  bw_essentials/constants/services.py,sha256=ZRz-cfumqafmAsetW48S3KMTjTaNAdoV1zu3bRuYfNc,513
4
4
  bw_essentials/data_loch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- bw_essentials/data_loch/data_loch.py,sha256=MHKkBIqEqBuh1cS3lbX0m9hSeAz5h_FgQ_GWWC1F540,10888
5
+ bw_essentials/data_loch/data_loch.py,sha256=Ae3WIywFawThKcpsnf8nC8ldI9ARrSNqz8e5b6sINwY,11006
6
6
  bw_essentials/email_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  bw_essentials/email_client/email_client.py,sha256=_LzDWUJUkNTSn3C5v0-jjW-Ls537xt493lkcD4noQXY,9116
8
8
  bw_essentials/notifications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -11,15 +11,15 @@ bw_essentials/notifications/teams_notifications.py,sha256=1tkS3tTJQZ5ByMwK2WXpFg
11
11
  bw_essentials/s3_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  bw_essentials/s3_utils/s3_utils.py,sha256=wzjVrTX22_8PMX86svKFYGMZwgjBHbOaeEsxO-lR7BY,12922
13
13
  bw_essentials/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- bw_essentials/services/api_client.py,sha256=2aTysB4AfHqCILz2o4qOb5Z-GK5GtzhmFe3NFUfAsto,7793
14
+ bw_essentials/services/api_client.py,sha256=74tKxhY_HiVCN3kgtk27a4GNznMaRphAspt9CWecuiY,7793
15
15
  bw_essentials/services/broker.py,sha256=As-VT1MxkCD9p-13dQJDwf0_aEJVA6H0wNqL-EYHO4g,8718
16
16
  bw_essentials/services/market_pricer.py,sha256=WAFcG5JfnqWxjzXRPrMdovPuKqWJIwa3ENvGAyEyjeM,8712
17
- bw_essentials/services/master_data.py,sha256=tJ-OyG9j94Piw2-rByhvkz6aVds4t6b5aprkT1TUPJQ,10068
17
+ bw_essentials/services/master_data.py,sha256=JpI7HfyN2hgkr9Mdcm4DzddSwmAv6AvsUmAuyrW0LYo,10828
18
18
  bw_essentials/services/model_portfolio_reporting.py,sha256=iOtm4gyfU8P7C0R1gp6gUJI4ZRxJD5K2GLOalI_gToM,3249
19
19
  bw_essentials/services/trade_placement.py,sha256=PrzeU2XXC9HF1IQ1dMDM_ZHxmC491sOl-JbA6GWPwII,20772
20
20
  bw_essentials/services/user_portfolio.py,sha256=_5M6yPfQt4MXedINBawEoPkb_o7IGzxPeHkvZkoQm8k,16191
21
21
  bw_essentials/services/user_portfolio_reporting.py,sha256=QaZzcw912Uos5ZafEaxLXDmCyetTFiVX3at3cTAv6MA,6003
22
- bw_essentials_core-0.0.5.dist-info/METADATA,sha256=WtgpSGCxi7tU-t0XHN_eoexCEWYwSvWTNZ5cyhuev6A,7501
23
- bw_essentials_core-0.0.5.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
24
- bw_essentials_core-0.0.5.dist-info/top_level.txt,sha256=gDc5T_y5snwKGXDQUusEus-FEt0RFwG644Yn_58wQOQ,14
25
- bw_essentials_core-0.0.5.dist-info/RECORD,,
22
+ bw_essentials_core-0.0.7.dist-info/METADATA,sha256=6nghqDj90cybbLd3LiSk_Ws3vVYydKFocJ0fgeZriGI,7501
23
+ bw_essentials_core-0.0.7.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
24
+ bw_essentials_core-0.0.7.dist-info/top_level.txt,sha256=gDc5T_y5snwKGXDQUusEus-FEt0RFwG644Yn_58wQOQ,14
25
+ bw_essentials_core-0.0.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.0)
2
+ Generator: setuptools (80.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5