upgini 1.1.203a1__py3-none-any.whl → 1.1.205__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 upgini might be problematic. Click here for more details.

upgini/dataset.py CHANGED
@@ -80,6 +80,7 @@ class Dataset: # (pd.DataFrame):
80
80
  endpoint: Optional[str] = None,
81
81
  api_key: Optional[str] = None,
82
82
  logger: Optional[logging.Logger] = None,
83
+ client_ip: Optional[str] = None,
83
84
  warning_counter: Optional[WarningCounter] = None,
84
85
  **kwargs,
85
86
  ):
@@ -123,6 +124,7 @@ class Dataset: # (pd.DataFrame):
123
124
  else:
124
125
  self.logger = logging.getLogger()
125
126
  self.logger.setLevel("FATAL")
127
+ self.client_ip = client_ip
126
128
  self.warning_counter = warning_counter or WarningCounter()
127
129
 
128
130
  def __len__(self):
@@ -961,6 +963,7 @@ class Dataset: # (pd.DataFrame):
961
963
  task_type=self.task_type,
962
964
  endpoint=self.endpoint,
963
965
  api_key=self.api_key,
966
+ client_ip=self.client_ip,
964
967
  )
965
968
 
966
969
  def validation(
@@ -1030,6 +1033,7 @@ class Dataset: # (pd.DataFrame):
1030
1033
  initial_search_task_id=initial_search_task_id,
1031
1034
  endpoint=self.endpoint,
1032
1035
  api_key=self.api_key,
1036
+ client_ip=self.client_ip,
1033
1037
  )
1034
1038
 
1035
1039
  def prepare_uploading_file(self, base_path: str) -> str:
@@ -168,16 +168,18 @@ class FeaturesEnricher(TransformerMixin):
168
168
  logs_enabled: bool = True,
169
169
  raise_validation_error: bool = True,
170
170
  exclude_columns: Optional[List[str]] = None,
171
+ client_ip: Optional[str] = None,
171
172
  **kwargs,
172
173
  ):
173
174
  self._api_key = api_key or os.environ.get(UPGINI_API_KEY)
174
175
  if api_key is not None and not isinstance(api_key, str):
175
176
  raise ValidationError(f"api_key should be `string`, but passed: `{api_key}`")
176
177
  self.rest_client = get_rest_client(endpoint, self._api_key)
178
+ self.client_ip = client_ip
177
179
 
178
180
  self.logs_enabled = logs_enabled
179
181
  if logs_enabled:
180
- self.logger = LoggerFactory().get_logger(endpoint, self._api_key)
182
+ self.logger = LoggerFactory().get_logger(endpoint, self._api_key, client_ip)
181
183
  else:
182
184
  self.logger = logging.getLogger()
183
185
  self.logger.setLevel("FATAL")
@@ -222,6 +224,7 @@ class FeaturesEnricher(TransformerMixin):
222
224
  search_id,
223
225
  endpoint=self.endpoint,
224
226
  api_key=self._api_key,
227
+ client_ip=client_ip
225
228
  )
226
229
 
227
230
  print(bundle.get("search_by_task_id_start"))
@@ -281,7 +284,7 @@ class FeaturesEnricher(TransformerMixin):
281
284
  def _set_api_key(self, api_key: str):
282
285
  self._api_key = api_key
283
286
  if self.logs_enabled:
284
- self.logger = LoggerFactory().get_logger(self.endpoint, self._api_key)
287
+ self.logger = LoggerFactory().get_logger(self.endpoint, self._api_key, self.client_ip)
285
288
 
286
289
  api_key = property(_get_api_key, _set_api_key)
287
290
 
@@ -1584,6 +1587,7 @@ class FeaturesEnricher(TransformerMixin):
1584
1587
  api_key=self.api_key, # type: ignore
1585
1588
  date_format=self.date_format, # type: ignore
1586
1589
  logger=self.logger,
1590
+ client_ip=self.client_ip
1587
1591
  )
1588
1592
  dataset.meaning_types = meaning_types
1589
1593
  dataset.search_keys = combined_search_keys
@@ -1917,6 +1921,7 @@ class FeaturesEnricher(TransformerMixin):
1917
1921
  date_format=self.date_format, # type: ignore
1918
1922
  random_state=self.random_state, # type: ignore
1919
1923
  logger=self.logger,
1924
+ client_ip=self.client_ip,
1920
1925
  )
1921
1926
  dataset.meaning_types = meaning_types
1922
1927
  dataset.search_keys = combined_search_keys
upgini/http.py CHANGED
@@ -1,4 +1,6 @@
1
1
  import base64
2
+ import copy
3
+ import datetime
2
4
  import hashlib
3
5
  import logging
4
6
  import os
@@ -12,8 +14,6 @@ from http.client import HTTPConnection
12
14
  from json import dumps
13
15
  from typing import Any, Dict, List, Optional, Tuple
14
16
  from urllib.parse import urljoin
15
- import datetime
16
- import copy
17
17
 
18
18
  import jwt
19
19
  import pandas as pd
@@ -882,17 +882,18 @@ def _get_rest_client(backend_url: str, api_token: str) -> _RestClient:
882
882
 
883
883
 
884
884
  class BackendLogHandler(logging.Handler):
885
- def __init__(self, rest_client: _RestClient, *args, **kwargs) -> None:
885
+ def __init__(self, rest_client: _RestClient, client_ip: Optional[str] = None, *args, **kwargs) -> None:
886
886
  super().__init__(*args, **kwargs)
887
887
  self.rest_client = rest_client
888
888
  self.track_metrics = None
889
889
  self.hostname = "0.0.0.0"
890
+ self.client_ip = client_ip
890
891
 
891
892
  def emit(self, record: logging.LogRecord) -> None:
892
893
  def task():
893
894
  try:
894
895
  if self.track_metrics is None or len(self.track_metrics) == 0:
895
- self.track_metrics = get_track_metrics()
896
+ self.track_metrics = get_track_metrics(self.client_ip)
896
897
  self.hostname = self.track_metrics.get("ip") or "0.0.0.0"
897
898
  text = self.format(record)
898
899
  tags = self.track_metrics
@@ -933,7 +934,9 @@ class LoggerFactory:
933
934
  root.setLevel(logging.INFO)
934
935
  root.handlers.clear()
935
936
 
936
- def get_logger(self, backend_url: Optional[str] = None, api_token: Optional[str] = None) -> logging.Logger:
937
+ def get_logger(
938
+ self, backend_url: Optional[str] = None, api_token: Optional[str] = None, client_ip: Optional[str] = None
939
+ ) -> logging.Logger:
937
940
  url = _resolve_backend_url(backend_url)
938
941
  token = resolve_api_token(api_token)
939
942
  key = url + token
@@ -944,7 +947,7 @@ class LoggerFactory:
944
947
  upgini_logger = logging.getLogger(f"upgini.{hash(key)}")
945
948
  upgini_logger.handlers.clear()
946
949
  rest_client = get_rest_client(backend_url, api_token)
947
- datadog_handler = BackendLogHandler(rest_client)
950
+ datadog_handler = BackendLogHandler(rest_client, client_ip)
948
951
  json_formatter = jsonlogger.JsonFormatter(
949
952
  "%(asctime)s %(threadName)s %(name)s %(levelname)s %(message)s",
950
953
  timestamp=True,
upgini/search_task.py CHANGED
@@ -42,6 +42,7 @@ class SearchTask:
42
42
  task_type: Optional[ModelTaskType] = None,
43
43
  endpoint: Optional[str] = None,
44
44
  api_key: Optional[str] = None,
45
+ client_ip: Optional[str] = None,
45
46
  ):
46
47
  self.search_task_id = search_task_id
47
48
  self.initial_search_task_id = initial_search_task_id
@@ -53,7 +54,7 @@ class SearchTask:
53
54
  self.summary = None
54
55
  self.endpoint = endpoint
55
56
  self.api_key = api_key
56
- self.logger = LoggerFactory().get_logger(endpoint, api_key)
57
+ self.logger = LoggerFactory().get_logger(endpoint, api_key, client_ip)
57
58
  self.provider_metadata_v2: Optional[List[ProviderTaskMetadataV2]] = None
58
59
  self.unused_features_for_generation: Optional[List[str]] = None
59
60
 
@@ -135,9 +135,10 @@ def make_html_report(
135
135
  ):
136
136
  relevant_datasources_df = relevant_datasources_df.copy()
137
137
  relevant_datasources_df["action"] = (
138
- f"""<a href="https://upgini.com/requet-a-quote?search-id={search_id}"><button>Request a quote</button></a>"""
138
+ f"""<a href="https://upgini.com/requet-a-quote?search-id={search_id}">"""
139
+ """<button type="button">Request a quote</button></a>"""
139
140
  )
140
- relevant_datasources_df.rename(columns={"action": ""})
141
+ relevant_datasources_df.rename(columns={"action": "&nbsp;"}, inplace=True)
141
142
  return f"""<html>
142
143
  <head>
143
144
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@@ -5,6 +5,7 @@ import socket
5
5
  import sys
6
6
  from getpass import getuser
7
7
  from hashlib import sha256
8
+ from typing import Optional
8
9
  from uuid import getnode
9
10
 
10
11
  from requests import get, post
@@ -46,7 +47,7 @@ def _get_execution_ide() -> str:
46
47
 
47
48
 
48
49
  @lru_cache()
49
- def get_track_metrics() -> dict:
50
+ def get_track_metrics(client_ip: Optional[str]) -> dict:
50
51
  # default values
51
52
  track = {"ide": _get_execution_ide()}
52
53
  ident_res = "https://api.ipify.org"
@@ -93,28 +94,34 @@ def get_track_metrics() -> dict:
93
94
  except Exception as e:
94
95
  track["err"] = str(e)
95
96
  track["visitorId"] = "None"
96
- try:
97
- from google.colab import output # type: ignore
98
- from IPython.display import Javascript, display
99
-
100
- display(
101
- Javascript(
102
- f"""
103
- window.clientIP = fetch("{ident_res}")
104
- .then(response => response.text())
105
- .then(data => data);
106
- """
97
+ if client_ip:
98
+ track["ip"] = client_ip
99
+ else:
100
+ try:
101
+ from google.colab import output # type: ignore
102
+ from IPython.display import Javascript, display
103
+
104
+ display(
105
+ Javascript(
106
+ f"""
107
+ window.clientIP = fetch("{ident_res}")
108
+ .then(response => response.text())
109
+ .then(data => data);
110
+ """
111
+ )
107
112
  )
108
- )
109
- track["ip"] = output.eval_js("window.clientIP", timeout_sec=10)
110
- except Exception as e:
111
- track["err"] = str(e)
112
- track["ip"] = "0.0.0.0"
113
+ track["ip"] = output.eval_js("window.clientIP", timeout_sec=10)
114
+ except Exception as e:
115
+ track["err"] = str(e)
116
+ track["ip"] = "0.0.0.0"
113
117
 
114
118
  elif track["ide"] == "binder":
115
119
  try:
116
120
  if "CLIENT_IP" in os.environ.keys():
117
- track["ip"] = os.environ["CLIENT_IP"]
121
+ if client_ip:
122
+ track["ip"] = client_ip
123
+ else:
124
+ track["ip"] = os.environ["CLIENT_IP"]
118
125
  track["visitorId"] = sha256(os.environ["CLIENT_IP"].encode()).hexdigest()
119
126
  except Exception as e:
120
127
  track["err"] = str(e)
@@ -142,7 +149,10 @@ def get_track_metrics() -> dict:
142
149
  track["visitorId"] = "None"
143
150
  else:
144
151
  try:
145
- track["ip"] = get(ident_res, timeout=10).text
152
+ if client_ip:
153
+ track["ip"] = client_ip
154
+ else:
155
+ track["ip"] = get(ident_res, timeout=10).text
146
156
  track["visitorId"] = sha256(str(getnode()).encode()).hexdigest()
147
157
  except Exception as e:
148
158
  track["err"] = str(e)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: upgini
3
- Version: 1.1.203a1
3
+ Version: 1.1.205
4
4
  Summary: Intelligent data search & enrichment for Machine Learning
5
5
  Home-page: https://upgini.com/
6
6
  Author: Upgini Developers
@@ -1,13 +1,13 @@
1
1
  upgini/__init__.py,sha256=asENHgEVHQBIkV-e_0IhE_ZWqkCG6398U3ZLrNzAH6k,407
2
2
  upgini/ads.py,sha256=mre6xn44wcC_fg63iLT_kTh4mViZqR9AKRJZAtpQz8Y,2592
3
- upgini/dataset.py,sha256=8fu_B7s75WCB1CJBh_UQWVtOxVznnwLYAHe63-hLf3w,47350
3
+ upgini/dataset.py,sha256=e5PX-NICeUUUrHJwEMpndYkNvWwbf-KE8USUd1rleSc,47502
4
4
  upgini/errors.py,sha256=BqpvfhW2jJW5fa5KXj0alhXatGl-WK4xTl309-QNLp8,959
5
- upgini/features_enricher.py,sha256=b7yCgyyebhftP1D2Hf-XHSYmteJFniZpjqCTdvtUxuE,146535
5
+ upgini/features_enricher.py,sha256=EyU1QEye4slsDAYUsXcJIFvIaY0dwIWoXxJ2DRAKXKE,146753
6
6
  upgini/fingerprint.js,sha256=VygVIQlN1v4NGZfjHqtRogOw8zjTnnMNJg_f7M5iGQU,33442
7
- upgini/http.py,sha256=TNwJ3Bn5jw1fZ8OghGdRocvPANmc6ueG-fIbO6D7AC8,39560
7
+ upgini/http.py,sha256=adz7jx0R7y3ndpXxt6aq2BxsRZea5H5Fkj4ETCqk8xQ,39700
8
8
  upgini/metadata.py,sha256=9Hm9L7efMGIRSfPUYZ_RUBW7_WMeeTL1fGhylMSvR7w,6135
9
9
  upgini/metrics.py,sha256=JeZz3hVAOBKOTtX60fn9jIHMHjt3LyIOfy_7VSpWbXI,22022
10
- upgini/search_task.py,sha256=kMs8nVmZfxANRhwV5HW-GNPO8Hw539x0CsgKou1j03o,16747
10
+ upgini/search_task.py,sha256=f-wARUaAMKmSNQNmA_pmtVBhWpoSBY2F8S3DCt_y9zI,16799
11
11
  upgini/spinner.py,sha256=yhakBaydMNS8E8TRAwTdCMdnWrHeWT0cR1M8c9hP6jA,1157
12
12
  upgini/version_validator.py,sha256=rDIncP6BEko4J2F2hUcMOtKm_vZbI4ICWcNcw8hrwM4,1400
13
13
  upgini/ads_management/__init__.py,sha256=qzyisOToVRP-tquAJD1PblZhNtMrOB8FiyF9JvfkvgE,50
@@ -32,7 +32,7 @@ upgini/utils/country_utils.py,sha256=9BXSXoGm3nVoOZE_bRENY-KMkwMUFvAF3Au0zxUNA1o
32
32
  upgini/utils/custom_loss_utils.py,sha256=DBslpjWGPt7xTeypt78baR59012SYphbPsO_YLKdilo,3972
33
33
  upgini/utils/cv_utils.py,sha256=X-u6Ndnv9jcQoE0jYS11zbyVd4d6IZ4UALn4raLqZ2I,2393
34
34
  upgini/utils/datetime_utils.py,sha256=wS_wBme83H3n3eAVDTL1QFjCG6oFLJ8bxB9Aqs9z-sg,5942
35
- upgini/utils/display_utils.py,sha256=2Gl3dxiGjwpika6TMIdbdhSTPAGKTopmdtXNGoFT3Hk,9279
35
+ upgini/utils/display_utils.py,sha256=KAuyrFy6BHpCNVk6upvpc0L2ukG1Ab7RQK7rxD9i37M,9328
36
36
  upgini/utils/email_utils.py,sha256=MhCLUAWqbp81xRyKizauNhVx6t_MFeJQRQ8pFM7EpFo,3480
37
37
  upgini/utils/fallback_progress_bar.py,sha256=f-VzVbiO6oU9WoKzEgoegYotixdiKanGlvdQCOGC-NY,1128
38
38
  upgini/utils/features_validator.py,sha256=iP8muF3PUf_aP9m7O3i3LPMuJPTNbw8rCAWqgvDt_h8,2369
@@ -43,10 +43,10 @@ upgini/utils/postal_code_utils.py,sha256=_8CR9tBqsPptQsmMUvnrCAmBaMIQSWH3JfJ4ly3
43
43
  upgini/utils/progress_bar.py,sha256=iNXyqT3vKCeHpfiG5HHwr7Lk2cTtKViM93Fl8iZnjGc,1564
44
44
  upgini/utils/sklearn_ext.py,sha256=IMx2La70AXAggApVpT7sMEjWqVWon5AMZt4MARDsIMQ,43847
45
45
  upgini/utils/target_utils.py,sha256=cu52icjhDIPpEStHYMXrD2hIl9gzvfnxZr0Ra5osV0k,1616
46
- upgini/utils/track_info.py,sha256=2IGGyHPXBLhWcLO8-Q-5qir52k_kD6DtdU-sv_Z2hHY,5325
46
+ upgini/utils/track_info.py,sha256=87ZFhpoi1g0Z3kl34CwAN60ZelBUvfuQNzkuloZrQQ8,5701
47
47
  upgini/utils/warning_counter.py,sha256=vnmdFo5-7GBkU2bK9h_uC0K0Y_wtfcYstxOdeRfacO0,228
48
- upgini-1.1.203a1.dist-info/LICENSE,sha256=5RRzgvdJUu3BUDfv4bzVU6FqKgwHlIay63pPCSmSgzw,1514
49
- upgini-1.1.203a1.dist-info/METADATA,sha256=LAiihS45VXx2j-oXEAXJROgqDMobq0uP-V_JhTVC5WE,48308
50
- upgini-1.1.203a1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
51
- upgini-1.1.203a1.dist-info/top_level.txt,sha256=OFhTGiDIWKl5gFI49qvWq1R9IKflPaE2PekcbDXDtx4,7
52
- upgini-1.1.203a1.dist-info/RECORD,,
48
+ upgini-1.1.205.dist-info/LICENSE,sha256=5RRzgvdJUu3BUDfv4bzVU6FqKgwHlIay63pPCSmSgzw,1514
49
+ upgini-1.1.205.dist-info/METADATA,sha256=R3mdJs-XrPe9Q8bc_jCvKGXDkigCONQRJfSLNjZs_C8,48306
50
+ upgini-1.1.205.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
51
+ upgini-1.1.205.dist-info/top_level.txt,sha256=OFhTGiDIWKl5gFI49qvWq1R9IKflPaE2PekcbDXDtx4,7
52
+ upgini-1.1.205.dist-info/RECORD,,