acryl-datahub 1.3.0.1rc7__py3-none-any.whl → 1.3.0.1rc8__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 acryl-datahub might be problematic. Click here for more details.

@@ -1,7 +1,7 @@
1
- acryl_datahub-1.3.0.1rc7.dist-info/licenses/LICENSE,sha256=9xNHpsD0uYF5ONzXsKDCuHHB-xbiCrSbueWXqrTNsxk,11365
1
+ acryl_datahub-1.3.0.1rc8.dist-info/licenses/LICENSE,sha256=9xNHpsD0uYF5ONzXsKDCuHHB-xbiCrSbueWXqrTNsxk,11365
2
2
  datahub/__init__.py,sha256=aq_i5lVREmoLfYIqcx_pEQicO855YlhD19tWc1eZZNI,59
3
3
  datahub/__main__.py,sha256=pegIvQ9hzK7IhqVeUi1MeADSZ2QlP-D3K0OQdEg55RU,106
4
- datahub/_version.py,sha256=661Az3oTCAOu_uY9mbHEJZPDcekVKKHGjBByQxBb0CM,323
4
+ datahub/_version.py,sha256=3eJGiXMGVkMi1lpj9ZplnwELXbksY0tQWUHU5_VpRwU,323
5
5
  datahub/entrypoints.py,sha256=VcbU6Z47b_JKW1zI-WJMYIngm05FSogKLiuvFNtyNcI,9088
6
6
  datahub/errors.py,sha256=p5rFAdAGVCk4Lqolol1YvthceadUSwpaCxLXRcyCCFQ,676
7
7
  datahub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -545,7 +545,7 @@ datahub/ingestion/source/sql/two_tier_sql_source.py,sha256=xlpQ9thbEn6uta6eVMzsH
545
545
  datahub/ingestion/source/sql/vertica.py,sha256=LUpIzDpzFRtMcXCSG2EC5CBZbveBOvnB27P_pDrXC9o,33501
546
546
  datahub/ingestion/source/sql/mssql/__init__.py,sha256=1agpl8S_uDW40olkhCX_W19dbr5GO9qgjS3R7pLRZSk,87
547
547
  datahub/ingestion/source/sql/mssql/job_models.py,sha256=ozEMc86e2oWRRF8Vjasjj32onVaVOQ98f00mbCYKmY8,9401
548
- datahub/ingestion/source/sql/mssql/source.py,sha256=N3ccX621byKLhthQw1-_aCkrn5teV4H1hc8u1gUMcy0,44762
548
+ datahub/ingestion/source/sql/mssql/source.py,sha256=6dVWAFaaXDR4z2LJZozusg4lEFjlGLn2ELK0JoJbfYA,46342
549
549
  datahub/ingestion/source/sql/stored_procedures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
550
550
  datahub/ingestion/source/sql/stored_procedures/base.py,sha256=n0l5OaTuW-m3TRvkxs3TqvgMeWF6BagzW3tjyWUcC1A,8631
551
551
  datahub/ingestion/source/sql/stored_procedures/lineage.py,sha256=fryLhuAlsjr9SHIjHJ-PmtCMx89bjzWVnJZ3f1bwQVU,1905
@@ -1133,8 +1133,8 @@ datahub_provider/operators/datahub_assertion_operator.py,sha256=uvTQ-jk2F0sbqqxp
1133
1133
  datahub_provider/operators/datahub_assertion_sensor.py,sha256=lCBj_3x1cf5GMNpHdfkpHuyHfVxsm6ff5x2Z5iizcAo,140
1134
1134
  datahub_provider/operators/datahub_operation_operator.py,sha256=aevDp2FzX7FxGlXrR0khoHNbxbhKR2qPEX5e8O2Jyzw,174
1135
1135
  datahub_provider/operators/datahub_operation_sensor.py,sha256=8fcdVBCEPgqy1etTXgLoiHoJrRt_nzFZQMdSzHqSG7M,168
1136
- acryl_datahub-1.3.0.1rc7.dist-info/METADATA,sha256=9QVlP4lgQfARG_mUrqs38beedc4VXd6o4r7YiXWiF2w,184619
1137
- acryl_datahub-1.3.0.1rc7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1138
- acryl_datahub-1.3.0.1rc7.dist-info/entry_points.txt,sha256=pzsBoTx-D-iTcmpX8oCGCyzlHP2112EygUMzZWz56M8,10105
1139
- acryl_datahub-1.3.0.1rc7.dist-info/top_level.txt,sha256=iLjSrLK5ox1YVYcglRUkcvfZPvKlobBWx7CTUXx8_GI,25
1140
- acryl_datahub-1.3.0.1rc7.dist-info/RECORD,,
1136
+ acryl_datahub-1.3.0.1rc8.dist-info/METADATA,sha256=lOSilMTQwZ3rvmq-XCw-gmoitXmWUW_muDrbc-GqlKY,184619
1137
+ acryl_datahub-1.3.0.1rc8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1138
+ acryl_datahub-1.3.0.1rc8.dist-info/entry_points.txt,sha256=pzsBoTx-D-iTcmpX8oCGCyzlHP2112EygUMzZWz56M8,10105
1139
+ acryl_datahub-1.3.0.1rc8.dist-info/top_level.txt,sha256=iLjSrLK5ox1YVYcglRUkcvfZPvKlobBWx7CTUXx8_GI,25
1140
+ acryl_datahub-1.3.0.1rc8.dist-info/RECORD,,
datahub/_version.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Published at https://pypi.org/project/acryl-datahub/.
2
2
  __package_name__ = "acryl-datahub"
3
- __version__ = "1.3.0.1rc7"
3
+ __version__ = "1.3.0.1rc8"
4
4
 
5
5
 
6
6
  def is_dev_mode() -> bool:
@@ -135,6 +135,10 @@ class SQLServerConfig(BasicSQLAlchemyConfig):
135
135
  default=False,
136
136
  description="Represent a schema identifiers combined with quoting preferences. See [sqlalchemy quoted_name docs](https://docs.sqlalchemy.org/en/20/core/sqlelement.html#sqlalchemy.sql.expression.quoted_name).",
137
137
  )
138
+ is_aws_rds: Optional[bool] = Field(
139
+ default=None,
140
+ description="Indicates if the SQL Server instance is running on AWS RDS. When None (default), automatic detection will be attempted using server name analysis.",
141
+ )
138
142
 
139
143
  @pydantic.validator("uri_args")
140
144
  def passwords_match(cls, v, values, **kwargs):
@@ -367,18 +371,42 @@ class SQLServerSource(SQLAlchemySource):
367
371
  def _detect_rds_environment(self, conn: Connection) -> bool:
368
372
  """
369
373
  Detect if we're running in an RDS/managed environment vs on-premises.
374
+ Uses explicit configuration if provided, otherwise attempts automatic detection.
370
375
  Returns True if RDS/managed, False if on-premises.
371
376
  """
377
+ if self.config.is_aws_rds is not None:
378
+ logger.info(
379
+ f"Using explicit is_aws_rds configuration: {self.config.is_aws_rds}"
380
+ )
381
+ return self.config.is_aws_rds
382
+
372
383
  try:
373
- # Try to access system tables directly - this typically fails in RDS
374
- conn.execute("SELECT TOP 1 * FROM msdb.dbo.sysjobs")
375
- logger.debug(
376
- "Direct table access successful - likely on-premises environment"
384
+ result = conn.execute("SELECT @@servername AS server_name")
385
+ server_name_row = result.fetchone()
386
+ if server_name_row:
387
+ server_name = server_name_row["server_name"].lower()
388
+
389
+ aws_indicators = ["amazon", "amzn", "amaz", "ec2", "rds.amazonaws.com"]
390
+ is_rds = any(indicator in server_name for indicator in aws_indicators)
391
+ if is_rds:
392
+ logger.info(f"AWS RDS detected based on server name: {server_name}")
393
+ else:
394
+ logger.info(
395
+ f"Non-RDS environment detected based on server name: {server_name}"
396
+ )
397
+
398
+ return is_rds
399
+ else:
400
+ logger.warning(
401
+ "Could not retrieve server name, assuming non-RDS environment"
402
+ )
403
+ return False
404
+
405
+ except Exception as e:
406
+ logger.warning(
407
+ f"Failed to detect RDS/managed vs on-prem env, assuming non-RDS environment ({e})"
377
408
  )
378
409
  return False
379
- except Exception:
380
- logger.debug("Direct table access failed - likely RDS/managed environment")
381
- return True
382
410
 
383
411
  def _get_jobs(self, conn: Connection, db_name: str) -> Dict[str, Dict[str, Any]]:
384
412
  """
@@ -453,7 +481,10 @@ class SQLServerSource(SQLAlchemySource):
453
481
  jobs_result = conn.execute("EXEC msdb.dbo.sp_help_job")
454
482
  jobs_data = {}
455
483
 
456
- for row in jobs_result:
484
+ # SQLAlchemy 1.3 support was dropped in Sept 2023 (PR #8810)
485
+ # SQLAlchemy 1.4+ returns LegacyRow objects that don't support dictionary-style .get() method
486
+ # Use .mappings() to get MappingResult with dictionary-like rows that support .get()
487
+ for row in jobs_result.mappings():
457
488
  job_id = str(row["job_id"])
458
489
  jobs_data[job_id] = {
459
490
  "job_id": job_id,
@@ -473,7 +504,8 @@ class SQLServerSource(SQLAlchemySource):
473
504
  )
474
505
 
475
506
  job_steps = {}
476
- for step_row in steps_result:
507
+ # Use .mappings() for dictionary-like access (SQLAlchemy 1.4+ compatibility)
508
+ for step_row in steps_result.mappings():
477
509
  # Only include steps that run against our target database
478
510
  step_database = step_row.get("database_name", "")
479
511
  if step_database.lower() == db_name.lower() or not step_database: