diff --git a/CHANGELOG.md b/CHANGELOG.md index 0795a0f3..10846786 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Observes [Semantic Versioning](https://semver.org/spec/v2.0.0.html) standard and [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) convention. +## [0.8.10] - 2023-10-10 + +### Fixed + +- Bug with `/definition` route for part tables [#170](https://github.com/datajoint/pharus/pull/170) + ## [0.8.9] - 2023-10-02 ### Added diff --git a/pharus/interface.py b/pharus/interface.py index a91aef4f..d0c71d90 100644 --- a/pharus/interface.py +++ b/pharus/interface.py @@ -297,7 +297,9 @@ def _get_table_definition( local_values[schema_name] = dj.VirtualModule( schema_name, schema_name, connection=connection ) - return getattr(local_values[schema_name], table_name).describe() + return _DJConnector._get_table_object( + local_values[schema_name], table_name + ).describe() @staticmethod def _insert_tuple( @@ -319,7 +321,9 @@ def _insert_tuple( schema_virtual_module = dj.VirtualModule( schema_name, schema_name, connection=connection ) - getattr(schema_virtual_module, table_name).insert(tuple_to_insert) + _DJConnector._get_table_object(schema_virtual_module, table_name).insert( + tuple_to_insert + ) @staticmethod def _record_dependency( @@ -346,7 +350,7 @@ def _record_dependency( virtual_module = dj.VirtualModule( schema_name, schema_name, connection=connection ) - table = getattr(virtual_module, table_name) + table = _DJConnector._get_table_object(virtual_module, table_name) attributes = table.heading.attributes # Retrieve dependencies of related to retricted dependencies = [ @@ -397,7 +401,9 @@ def _update_tuple( ) with connection.transaction: [ - getattr(schema_virtual_module, table_name).update1(t) + _DJConnector._get_table_object( + schema_virtual_module, table_name + ).update1(t) for t in tuple_to_update ] diff --git a/tests/test_table_metadata.py b/tests/test_table_metadata.py index 59794ab1..ebb38c04 100644 --- a/tests/test_table_metadata.py +++ b/tests/test_table_metadata.py @@ -1,4 +1,12 @@ -from . import SCHEMA_PREFIX, client, token, connection, schemas_simple +from . import ( + SCHEMA_PREFIX, + client, + token, + connection, + schemas_simple, + schema_main, + ParentPart, +) def test_definition(token, client, schemas_simple): @@ -14,3 +22,25 @@ def test_definition(token, client, schemas_simple): headers=dict(Authorization=f"Bearer {token}"), ).data assert f"`{simple1.database}`.`#table_a`" in REST_definition.decode("utf-8") + + +def test_definition_part_table(token, client, ParentPart): + ScanData, ProcessScanData = ParentPart + + # Test Parent + REST_value = client.get( + f"/schema/{ScanData.database}/table/{ProcessScanData.__name__}/definition", + headers=dict(Authorization=f"Bearer {token}"), + ).data + + assert f"{ScanData.database}.ScanData" in REST_value.decode("utf-8") + + # Test Child + REST_value = client.get( + f"""/schema/{ProcessScanData.database}/table/{ + ProcessScanData.__name__ + '.' + + ProcessScanData.ProcessScanDataPart.__name__}/definition""", + headers=dict(Authorization=f"Bearer {token}"), + ).data + + assert f"{ProcessScanData.database}.ProcessScanData" in REST_value.decode("utf-8")