Skip to content

feat(cli): attribute CLI traffic to the invoking agent skill - #19387

Open
nwadams wants to merge 1 commit into
masterfrom
na--cli-skill-attribution
Open

feat(cli): attribute CLI traffic to the invoking agent skill#19387
nwadams wants to merge 1 commit into
masterfrom
na--cli-skill-attribution

Conversation

@nwadams

@nwadams nwadams commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

What

Makes datahub -C skill=<name> actually attribute the requests a command makes, by resolving it into the client component of the User-Agent that every request already carries:

User-Agent: DataHub-Client/1.0 (cli; skill-datahub-search/claude-code; 1.7.0)

Why

-C skill= was accepted but had no effect on any command that talks to GMS. The value landed on the Click context and was read only by the with_telemetry decorator — which search, get, lineage, and graphql do not use. So callers following the documented convention (docs/cli.md, and the agent skills that were told to pass it) emitted no telemetry, and nothing reached the server either.

The server side needs no change. RequestContext already parses component/caller out of the User-Agent into agentClass/agentName (metadata-operation-context/src/main/resources/datahub_user_agents.yaml), and UsageDimensions can roll agentName up as the opt-in agent_name usage dimension. The gap was purely that the value never got there.

How

  • New datahub/cli/skill_context.py: reads the skill pair off the Click context and normalizes it into a skill-<name> component.
  • get_default_graph resolves it when no explicit datahub_component was passed.

Resolved inside get_default_graph rather than at its ~70 call sites, so commands are attributed without opting in one at a time and a new command cannot forget to. The value is parsed once on the root group and fixed for the life of a CLI process, so leaving it out of the lru_cache key cannot serve a stale component.

Precedence — explicit datahub_component argument > -C skill= > DATAHUB_COMPONENT > datahub. A flag passed for one invocation is more specific than an environment default.

Normalization — lowercased, non-[a-z0-9._-] runs collapsed to -, capped at 64 chars. ; and / delimit the field GMS parses out of the User-Agent, so an unsanitized value would corrupt parsing for the whole request.

No behavior change when the flag is absent: infer_skill_component() returns None outside the CLI and when no skill pair was passed, leaving the existing DATAHUB_COMPONENT resolution untouched.

Testing

metadata-ingestion/tests/unit/cli/test_skill_context.py — 8 tests covering normalization, User-Agent-breaking characters, unusable values, truncation, absent Click context, unrelated -C pairs, and that get_default_graph applies the resolved component.

RequestContextTest.testRequestContextPreservesAgentSkillComponent — proves the server-side leg: a skill-attributed CLI User-Agent parses to AgentClass.CLI with the skill preserved in the agent name. (:metadata-operation-context:test → 46 tests, green.)

Also verified end-to-end against a local socket sniffer:

-C skill=datahub-search              → (cli; skill-datahub-search/claude-code; …)
no flag                              → (cli; datahub/claude-code; …)          # unchanged
-C "skill=My Skill; a/b"             → (cli; skill-my-skill-a-b/claude-code; …)
DATAHUB_COMPONENT=my-app + -C skill= → (cli; skill-datahub-lineage/claude-code; …)

./gradlew :metadata-ingestion:lintFix and :metadata-operation-context:spotlessApply clean.

Checklist

  • PR conforms to the Contributing Guideline (PR Title Format)
  • Links to related issues — Linear AI-1017
  • Tests added
  • Docs updated — docs/cli.md documents -C/--context (it was missing from the options block) and the attribution behavior
  • No breaking change — attribution is additive and inert when the flag is absent

Related

The agent-side half is acryldata/datahub-skills#48, which adds the hooks that pass this flag automatically. This PR is independently useful: it makes the documented convention work for anyone passing it by hand.

🤖 Generated with Claude Code


Summary by cubic

Attributes CLI requests to the invoking agent skill via -C skill=<name> by setting the client component in the User-Agent, enabling per-skill usage attribution in GMS. Previously the flag was accepted but had no effect; now it takes effect without changing individual commands. Addresses Linear AI-1017.

  • Implemented in datahub.cli.skill_context and applied centrally in get_default_graph, so existing commands inherit attribution with no call-site changes.
  • Precedence: explicit datahub_component > -C skill= > DATAHUB_COMPONENT > datahub.
  • Sanitization: lowercase, collapse non [a-z0-9._-] to -, prefix skill-, max 64 chars; prevents breaking User-Agent parsing.
  • No behavior change when the flag is absent; errors in resolution are ignored; server needs no changes (parsing already supported).
  • Tests cover normalization and end-to-end parsing; docs now describe -C/--context and the attribution behavior.

Written for commit 93c5cb4. Summary will update on new commits.

Review in cubic

`datahub -C skill=<name>` was accepted but had no effect on any command that
talks to GMS. The value landed on the Click context and was read only by the
`with_telemetry` decorator, which `search`, `get`, `lineage`, and `graphql` do
not use — so the skills that follow the documented convention emitted nothing,
and nothing reached the server either.

Resolve it into the client component instead, which rides the User-Agent every
request already carries:

    User-Agent: DataHub-Client/1.0 (cli; skill-datahub-search/claude-code; 1.7.0)

GMS already parses that field into `agentClass`/`agentName` and can roll it up
as the `agent_name` usage dimension, so per-skill attribution needs no server
change — only that the value gets there.

Resolved inside `get_default_graph` rather than at each of its ~70 call sites,
so commands are attributed without opting in one at a time. An explicit
`datahub_component` argument still wins; `DATAHUB_COMPONENT` still applies when
no skill is passed. Values are normalized before they are sent, since ";" and
"/" delimit the field GMS parses.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions github-actions Bot added ingestion PR or Issue related to the ingestion of metadata docs Issues and Improvements to docs labels Aug 21, 2026
@cursor

cursor Bot commented Aug 21, 2026

Copy link
Copy Markdown

PR Summary

Overview
Wires -C skill=<name> into the User-Agent every CLI request already sends, so GMS can attribute traffic to the invoking agent skill (skill-datahub-search/claude-code) instead of a generic CLI component.

get_default_graph now resolves the Click context pair (sanitized, skill- prefixed, 64-char cap) when no explicit datahub_component is passed, covering all commands without per-call-site opt-in. Explicit args still win; omitting the flag leaves DATAHUB_COMPONENT unchanged.

Docs list -C/--context and the attribution convention. Tests cover sanitization (including ;// that would break GMS parsing) and that RequestContext preserves the skill in agentName.

Reviewed by Cursor Bugbot for commit 93c5cb4. Bugbot is set up for automated code reviews on this repo. Configure here.

@codecov

codecov Bot commented Aug 21, 2026

Copy link
Copy Markdown

❌ 4 Tests Failed:

Tests completed Failed Passed Skipped
29155 4 29151 211
View the top 3 failed test(s) by shortest run time
tests.integration.timescaledb.test_timescaledb::test_timescaledb_all_databases
Stack Traces | 0.001s run time
docker_compose_runner = <function docker_compose_runner.<locals>.run at 0x7f7aa83cb6a0>
pytestconfig = <_pytest.config.Config object at 0x7f7b51749550>
test_resources_dir = PosixPath('.../tests/integration/timescaledb')

    @pytest.fixture(scope="module")
    def timescaledb_runner(docker_compose_runner, pytestconfig, test_resources_dir):
>       with docker_compose_runner(
            test_resources_dir / "docker-compose.yml", "timescaledb"
        ) as docker_services:

.../integration/timescaledb/test_timescaledb.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.11.16.../x64/lib/python3.11/contextlib.py:137: in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
.../datahub/testing/docker_utils.py:84: in run
    compose.execute(command)
venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:140: in execute
    return execute(command, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

command = 'docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait'
success_codes = (0,), ignore_stderr = False

    def execute(command: str, success_codes: Iterable[int] = (0,), ignore_stderr: bool = False) -> Union[bytes, Any]:
        """Run a shell command."""
        try:
            stderr_pipe = subprocess.DEVNULL if ignore_stderr else subprocess.STDOUT
            output = subprocess.check_output(command, stderr=stderr_pipe, shell=True)
            status = 0
        except subprocess.CalledProcessError as error:
            output = error.output or b""
            status = error.returncode
            command = error.cmd
    
        if status not in success_codes:
>           raise Exception(
                'Command {} returned {}: """{}""".'.format(command, status, output.decode("utf-8"))
            )
E           Exception: Command docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait returned 1: """time="2026-08-21T21:50:09Z" level=warning msg=".../tests/integration/timescaledb/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
E            test-timescaledb Pulling 
E            0a9a5dfd008f Pulling fs layer 
E            c259fdfe51e9 Pulling fs layer 
E            678cff7daef4 Pulling fs layer 
E            6035710dcfda Pulling fs layer 
E            8a1f652aba56 Pulling fs layer 
E            d54f6bea316d Pulling fs layer 
E            6cdeafa72762 Pulling fs layer 
E            6c40c6e3a2de Pulling fs layer 
E            c6e1fc4b8983 Pulling fs layer 
E            937c3e5e5624 Pulling fs layer 
E            8c09314ad148 Pulling fs layer 
E            80e8a1045bde Pulling fs layer 
E            51cfb1024c6b Pulling fs layer 
E            921d21b83f25 Pulling fs layer 
E            fa1ef75ac6d3 Pulling fs layer 
E            1883ff08d289 Pulling fs layer 
E            da783ef8cde9 Pulling fs layer 
E            7db92acc11bc Pulling fs layer 
E            937c3e5e5624 Waiting 
E            8c09314ad148 Waiting 
E            80e8a1045bde Waiting 
E            51cfb1024c6b Waiting 
E            921d21b83f25 Waiting 
E            fa1ef75ac6d3 Waiting 
E            1883ff08d289 Waiting 
E            da783ef8cde9 Waiting 
E            7db92acc11bc Waiting 
E            6035710dcfda Waiting 
E            d54f6bea316d Waiting 
E            6cdeafa72762 Waiting 
E            6c40c6e3a2de Waiting 
E            c6e1fc4b8983 Waiting 
E            8a1f652aba56 Waiting 
E            c259fdfe51e9 Downloading [==================================================>]     987B/987B
E            c259fdfe51e9 Verifying Checksum 
E            0a9a5dfd008f Downloading [>                                                  ]  50.65kB/3.627MB
E            c259fdfe51e9 Download complete 
E            0a9a5dfd008f Verifying Checksum 
E            0a9a5dfd008f Download complete 
E            0a9a5dfd008f Extracting [>                                                  ]  65.54kB/3.627MB
E            6035710dcfda Downloading [==================================================>]     174B/174B
E            6035710dcfda Verifying Checksum 
E            6035710dcfda Download complete 
E            678cff7daef4 Downloading [>                                                  ]  16.38kB/1.12MB
E            678cff7daef4 Downloading [==================================================>]   1.12MB/1.12MB
E            678cff7daef4 Verifying Checksum 
E            678cff7daef4 Download complete 
E            8a1f652aba56 Downloading [==================================================>]     116B/116B
E            8a1f652aba56 Verifying Checksum 
E            8a1f652aba56 Download complete 
E            0a9a5dfd008f Extracting [==================================================>]  3.627MB/3.627MB
E            0a9a5dfd008f Pull complete 
E            6c40c6e3a2de Downloading [==================================================>]     127B/127B
E            6c40c6e3a2de Verifying Checksum 
E            6c40c6e3a2de Download complete 
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            6cdeafa72762 Downloading [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Verifying Checksum 
E            6cdeafa72762 Download complete 
E            c6e1fc4b8983 Downloading [==================================================>]     171B/171B
E            c6e1fc4b8983 Verifying Checksum 
E            c6e1fc4b8983 Download complete 
E            937c3e5e5624 Downloading [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Verifying Checksum 
E            937c3e5e5624 Download complete 
E            c259fdfe51e9 Pull complete 
E            678cff7daef4 Extracting [=>                                                 ]  32.77kB/1.12MB
E            8c09314ad148 Downloading [==================================================>]     183B/183B
E            8c09314ad148 Verifying Checksum 
E            8c09314ad148 Download complete 
E            678cff7daef4 Extracting [==================================================>]   1.12MB/1.12MB
E            d54f6bea316d Downloading [>                                                  ]  526.6kB/91.6MB
E            678cff7daef4 Pull complete 
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Pull complete 
E            80e8a1045bde Downloading [>                                                  ]  33.25kB/2.323MB
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Pull complete 
E            d54f6bea316d Downloading [========>                                          ]  16.18MB/91.6MB
E            51cfb1024c6b Downloading [>                                                  ]  224.7kB/22.44MB
E            80e8a1045bde Downloading [===============================================>   ]  2.184MB/2.323MB
E            80e8a1045bde Verifying Checksum 
E            80e8a1045bde Download complete 
E            51cfb1024c6b Verifying Checksum 
E            51cfb1024c6b Download complete 
E            d54f6bea316d Downloading [==============>                                    ]  26.41MB/91.6MB
E            921d21b83f25 Downloading [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Verifying Checksum 
E            921d21b83f25 Download complete 
E            fa1ef75ac6d3 Downloading [>                                                  ]  87.22kB/8.236MB
E            d54f6bea316d Downloading [==================>                                ]  33.91MB/91.6MB
E            1883ff08d289 Downloading [>                                                  ]  528.9kB/210.3MB
E            fa1ef75ac6d3 Verifying Checksum 
E            fa1ef75ac6d3 Download complete 
E            1883ff08d289 Downloading [=====>                                             ]  23.54MB/210.3MB
E            da783ef8cde9 Downloading [>                                                  ]  533.1kB/77.45MB
E            d54f6bea316d Downloading [=================================>                 ]  61.79MB/91.6MB
E            da783ef8cde9 Downloading [===============>                                   ]  24.02MB/77.45MB
E            d54f6bea316d Downloading [====================================>              ]  67.13MB/91.6MB
E            1883ff08d289 Downloading [========>                                          ]  33.72MB/210.3MB
E            d54f6bea316d Downloading [=================================================> ]  91.26MB/91.6MB
E            d54f6bea316d Verifying Checksum 
E            d54f6bea316d Download complete 
E            1883ff08d289 Downloading [=============>                                     ]  55.09MB/210.3MB
E            d54f6bea316d Extracting [>                                                  ]  557.1kB/91.6MB
E            da783ef8cde9 Downloading [================>                                  ]  26.14MB/77.45MB
E            1883ff08d289 Downloading [==============>                                    ]  62.02MB/210.3MB
E            d54f6bea316d Extracting [===>                                               ]  6.128MB/91.6MB
E            7db92acc11bc Downloading [>                                                  ]  85.47kB/7.945MB
E            d54f6bea316d Extracting [=========>                                         ]  17.27MB/91.6MB
E            da783ef8cde9 Downloading [=====================>                             ]  33.59MB/77.45MB
E            7db92acc11bc Verifying Checksum 
E            7db92acc11bc Download complete 
E            1883ff08d289 Downloading [================>                                  ]  67.35MB/210.3MB
E            d54f6bea316d Extracting [=============>                                     ]  25.62MB/91.6MB
E            da783ef8cde9 Downloading [======================================>            ]  59.22MB/77.45MB
E            1883ff08d289 Downloading [=====================>                             ]   89.8MB/210.3MB
E            d54f6bea316d Extracting [==================>                                ]  34.54MB/91.6MB
E            da783ef8cde9 Downloading [==========================================>        ]  65.62MB/77.45MB
E            d54f6bea316d Extracting [=======================>                           ]  42.89MB/91.6MB
E            1883ff08d289 Downloading [======================>                            ]  95.74MB/210.3MB
E            da783ef8cde9 Downloading [===========================================>       ]  67.21MB/77.45MB
E            d54f6bea316d Extracting [============================>                      ]  52.36MB/91.6MB
E            da783ef8cde9 Downloading [=================================================> ]  77.33MB/77.45MB
E            da783ef8cde9 Verifying Checksum 
E            da783ef8cde9 Download complete 
E            1883ff08d289 Downloading [=======================>                           ]  98.92MB/210.3MB
E            d54f6bea316d Extracting [=================================>                 ]  60.72MB/91.6MB
E            1883ff08d289 Downloading [========================>                          ]    101MB/210.3MB
E            d54f6bea316d Extracting [====================================>              ]  66.85MB/91.6MB
E            1883ff08d289 Downloading [=============================>                     ]  125.2MB/210.3MB
E            d54f6bea316d Extracting [=======================================>           ]  72.97MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  132.2MB/210.3MB
E            d54f6bea316d Extracting [===========================================>       ]   79.1MB/91.6MB
E            d54f6bea316d Extracting [==================================================>]   91.6MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  134.4MB/210.3MB
E            1883ff08d289 Downloading [====================================>              ]  154.1MB/210.3MB
E            1883ff08d289 Downloading [======================================>            ]  160.6MB/210.3MB
E            1883ff08d289 Downloading [=======================================>           ]  168.1MB/210.3MB
E            1883ff08d289 Downloading [=============================================>     ]  192.1MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.2MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.7MB/210.3MB
E            1883ff08d289 Verifying Checksum 
E            1883ff08d289 Download complete 
E            d54f6bea316d Pull complete 
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Pull complete 
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Pull complete 
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Pull complete 
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Pull complete 
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Pull complete 
E            80e8a1045bde Extracting [>                                                  ]  32.77kB/2.323MB
E            80e8a1045bde Extracting [==================================================>]  2.323MB/2.323MB
E            80e8a1045bde Pull complete 
E            51cfb1024c6b Extracting [>                                                  ]  229.4kB/22.44MB
E            51cfb1024c6b Extracting [================>                                  ]   7.34MB/22.44MB
E            51cfb1024c6b Extracting [===========================================>       ]   19.5MB/22.44MB
E            51cfb1024c6b Extracting [==================================================>]  22.44MB/22.44MB
E            51cfb1024c6b Pull complete 
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Pull complete 
E            fa1ef75ac6d3 Extracting [>                                                  ]   98.3kB/8.236MB
E            fa1ef75ac6d3 Extracting [==================================================>]  8.236MB/8.236MB
E            fa1ef75ac6d3 Pull complete 
E            1883ff08d289 Extracting [>                                                  ]  557.1kB/210.3MB
E            1883ff08d289 Extracting [==>                                                ]  12.26MB/210.3MB
E            1883ff08d289 Extracting [=====>                                             ]  24.51MB/210.3MB
E            1883ff08d289 Extracting [========>                                          ]  36.21MB/210.3MB
E            1883ff08d289 Extracting [===========>                                       ]  48.46MB/210.3MB
E            1883ff08d289 Extracting [==============>                                    ]   59.6MB/210.3MB
E            1883ff08d289 Extracting [=================>                                 ]  71.86MB/210.3MB
E            1883ff08d289 Extracting [===================>                               ]  82.44MB/210.3MB
E            1883ff08d289 Extracting [======================>                            ]  93.59MB/210.3MB
E            1883ff08d289 Extracting [=========================>                         ]  106.4MB/210.3MB
E            1883ff08d289 Extracting [============================>                      ]  119.2MB/210.3MB
E            1883ff08d289 Extracting [===============================>                   ]    132MB/210.3MB
E            1883ff08d289 Extracting [==================================>                ]  144.3MB/210.3MB
E            1883ff08d289 Extracting [=====================================>             ]  157.6MB/210.3MB
E            1883ff08d289 Extracting [========================================>          ]  170.5MB/210.3MB
E            1883ff08d289 Extracting [===========================================>       ]  182.2MB/210.3MB
E            1883ff08d289 Extracting [==============================================>    ]  193.9MB/210.3MB
E            1883ff08d289 Extracting [=================================================> ]  207.2MB/210.3MB
E            1883ff08d289 Extracting [==================================================>]  210.3MB/210.3MB
E            1883ff08d289 Pull complete 
E            da783ef8cde9 Extracting [>                                                  ]  557.1kB/77.45MB
E            da783ef8cde9 Extracting [====>                                              ]  7.242MB/77.45MB
E            da783ef8cde9 Extracting [=========>                                         ]  14.48MB/77.45MB
E            da783ef8cde9 Extracting [=============>                                     ]  21.17MB/77.45MB
E            da783ef8cde9 Extracting [==================>                                ]  28.41MB/77.45MB
E            da783ef8cde9 Extracting [======================>                            ]  35.09MB/77.45MB
E            da783ef8cde9 Extracting [==========================>                        ]  41.78MB/77.45MB
E            da783ef8cde9 Extracting [===============================>                   ]  49.02MB/77.45MB
E            da783ef8cde9 Extracting [===================================>               ]  55.71MB/77.45MB
E            da783ef8cde9 Extracting [========================================>          ]  62.39MB/77.45MB
E            da783ef8cde9 Extracting [============================================>      ]  69.07MB/77.45MB
E            da783ef8cde9 Extracting [================================================>  ]  75.76MB/77.45MB
E            da783ef8cde9 Extracting [==================================================>]  77.45MB/77.45MB
E            da783ef8cde9 Pull complete 
E            7db92acc11bc Extracting [>                                                  ]   98.3kB/7.945MB
E            7db92acc11bc Extracting [==========>                                        ]  1.671MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Pull complete 
E            test-timescaledb Pulled 
E            Network pytest5609-timescaledb_default  Creating
E            Network pytest5609-timescaledb_default  Created
E            Container test-timescaledb  Creating
E            Container test-timescaledb  Created
E            Container test-timescaledb  Starting
E            Container test-timescaledb  Started
E            Container test-timescaledb  Waiting
E           container test-timescaledb exited (3)
E           """.

venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:37: Exception
tests.integration.timescaledb.test_timescaledb::test_timescaledb_ingest_with_jobs
Stack Traces | 0.001s run time
docker_compose_runner = <function docker_compose_runner.<locals>.run at 0x7f7aa83cb6a0>
pytestconfig = <_pytest.config.Config object at 0x7f7b51749550>
test_resources_dir = PosixPath('.../tests/integration/timescaledb')

    @pytest.fixture(scope="module")
    def timescaledb_runner(docker_compose_runner, pytestconfig, test_resources_dir):
>       with docker_compose_runner(
            test_resources_dir / "docker-compose.yml", "timescaledb"
        ) as docker_services:

.../integration/timescaledb/test_timescaledb.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.11.16.../x64/lib/python3.11/contextlib.py:137: in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
.../datahub/testing/docker_utils.py:84: in run
    compose.execute(command)
venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:140: in execute
    return execute(command, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

command = 'docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait'
success_codes = (0,), ignore_stderr = False

    def execute(command: str, success_codes: Iterable[int] = (0,), ignore_stderr: bool = False) -> Union[bytes, Any]:
        """Run a shell command."""
        try:
            stderr_pipe = subprocess.DEVNULL if ignore_stderr else subprocess.STDOUT
            output = subprocess.check_output(command, stderr=stderr_pipe, shell=True)
            status = 0
        except subprocess.CalledProcessError as error:
            output = error.output or b""
            status = error.returncode
            command = error.cmd
    
        if status not in success_codes:
>           raise Exception(
                'Command {} returned {}: """{}""".'.format(command, status, output.decode("utf-8"))
            )
E           Exception: Command docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait returned 1: """time="2026-08-21T21:50:09Z" level=warning msg=".../tests/integration/timescaledb/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
E            test-timescaledb Pulling 
E            0a9a5dfd008f Pulling fs layer 
E            c259fdfe51e9 Pulling fs layer 
E            678cff7daef4 Pulling fs layer 
E            6035710dcfda Pulling fs layer 
E            8a1f652aba56 Pulling fs layer 
E            d54f6bea316d Pulling fs layer 
E            6cdeafa72762 Pulling fs layer 
E            6c40c6e3a2de Pulling fs layer 
E            c6e1fc4b8983 Pulling fs layer 
E            937c3e5e5624 Pulling fs layer 
E            8c09314ad148 Pulling fs layer 
E            80e8a1045bde Pulling fs layer 
E            51cfb1024c6b Pulling fs layer 
E            921d21b83f25 Pulling fs layer 
E            fa1ef75ac6d3 Pulling fs layer 
E            1883ff08d289 Pulling fs layer 
E            da783ef8cde9 Pulling fs layer 
E            7db92acc11bc Pulling fs layer 
E            937c3e5e5624 Waiting 
E            8c09314ad148 Waiting 
E            80e8a1045bde Waiting 
E            51cfb1024c6b Waiting 
E            921d21b83f25 Waiting 
E            fa1ef75ac6d3 Waiting 
E            1883ff08d289 Waiting 
E            da783ef8cde9 Waiting 
E            7db92acc11bc Waiting 
E            6035710dcfda Waiting 
E            d54f6bea316d Waiting 
E            6cdeafa72762 Waiting 
E            6c40c6e3a2de Waiting 
E            c6e1fc4b8983 Waiting 
E            8a1f652aba56 Waiting 
E            c259fdfe51e9 Downloading [==================================================>]     987B/987B
E            c259fdfe51e9 Verifying Checksum 
E            0a9a5dfd008f Downloading [>                                                  ]  50.65kB/3.627MB
E            c259fdfe51e9 Download complete 
E            0a9a5dfd008f Verifying Checksum 
E            0a9a5dfd008f Download complete 
E            0a9a5dfd008f Extracting [>                                                  ]  65.54kB/3.627MB
E            6035710dcfda Downloading [==================================================>]     174B/174B
E            6035710dcfda Verifying Checksum 
E            6035710dcfda Download complete 
E            678cff7daef4 Downloading [>                                                  ]  16.38kB/1.12MB
E            678cff7daef4 Downloading [==================================================>]   1.12MB/1.12MB
E            678cff7daef4 Verifying Checksum 
E            678cff7daef4 Download complete 
E            8a1f652aba56 Downloading [==================================================>]     116B/116B
E            8a1f652aba56 Verifying Checksum 
E            8a1f652aba56 Download complete 
E            0a9a5dfd008f Extracting [==================================================>]  3.627MB/3.627MB
E            0a9a5dfd008f Pull complete 
E            6c40c6e3a2de Downloading [==================================================>]     127B/127B
E            6c40c6e3a2de Verifying Checksum 
E            6c40c6e3a2de Download complete 
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            6cdeafa72762 Downloading [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Verifying Checksum 
E            6cdeafa72762 Download complete 
E            c6e1fc4b8983 Downloading [==================================================>]     171B/171B
E            c6e1fc4b8983 Verifying Checksum 
E            c6e1fc4b8983 Download complete 
E            937c3e5e5624 Downloading [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Verifying Checksum 
E            937c3e5e5624 Download complete 
E            c259fdfe51e9 Pull complete 
E            678cff7daef4 Extracting [=>                                                 ]  32.77kB/1.12MB
E            8c09314ad148 Downloading [==================================================>]     183B/183B
E            8c09314ad148 Verifying Checksum 
E            8c09314ad148 Download complete 
E            678cff7daef4 Extracting [==================================================>]   1.12MB/1.12MB
E            d54f6bea316d Downloading [>                                                  ]  526.6kB/91.6MB
E            678cff7daef4 Pull complete 
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Pull complete 
E            80e8a1045bde Downloading [>                                                  ]  33.25kB/2.323MB
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Pull complete 
E            d54f6bea316d Downloading [========>                                          ]  16.18MB/91.6MB
E            51cfb1024c6b Downloading [>                                                  ]  224.7kB/22.44MB
E            80e8a1045bde Downloading [===============================================>   ]  2.184MB/2.323MB
E            80e8a1045bde Verifying Checksum 
E            80e8a1045bde Download complete 
E            51cfb1024c6b Verifying Checksum 
E            51cfb1024c6b Download complete 
E            d54f6bea316d Downloading [==============>                                    ]  26.41MB/91.6MB
E            921d21b83f25 Downloading [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Verifying Checksum 
E            921d21b83f25 Download complete 
E            fa1ef75ac6d3 Downloading [>                                                  ]  87.22kB/8.236MB
E            d54f6bea316d Downloading [==================>                                ]  33.91MB/91.6MB
E            1883ff08d289 Downloading [>                                                  ]  528.9kB/210.3MB
E            fa1ef75ac6d3 Verifying Checksum 
E            fa1ef75ac6d3 Download complete 
E            1883ff08d289 Downloading [=====>                                             ]  23.54MB/210.3MB
E            da783ef8cde9 Downloading [>                                                  ]  533.1kB/77.45MB
E            d54f6bea316d Downloading [=================================>                 ]  61.79MB/91.6MB
E            da783ef8cde9 Downloading [===============>                                   ]  24.02MB/77.45MB
E            d54f6bea316d Downloading [====================================>              ]  67.13MB/91.6MB
E            1883ff08d289 Downloading [========>                                          ]  33.72MB/210.3MB
E            d54f6bea316d Downloading [=================================================> ]  91.26MB/91.6MB
E            d54f6bea316d Verifying Checksum 
E            d54f6bea316d Download complete 
E            1883ff08d289 Downloading [=============>                                     ]  55.09MB/210.3MB
E            d54f6bea316d Extracting [>                                                  ]  557.1kB/91.6MB
E            da783ef8cde9 Downloading [================>                                  ]  26.14MB/77.45MB
E            1883ff08d289 Downloading [==============>                                    ]  62.02MB/210.3MB
E            d54f6bea316d Extracting [===>                                               ]  6.128MB/91.6MB
E            7db92acc11bc Downloading [>                                                  ]  85.47kB/7.945MB
E            d54f6bea316d Extracting [=========>                                         ]  17.27MB/91.6MB
E            da783ef8cde9 Downloading [=====================>                             ]  33.59MB/77.45MB
E            7db92acc11bc Verifying Checksum 
E            7db92acc11bc Download complete 
E            1883ff08d289 Downloading [================>                                  ]  67.35MB/210.3MB
E            d54f6bea316d Extracting [=============>                                     ]  25.62MB/91.6MB
E            da783ef8cde9 Downloading [======================================>            ]  59.22MB/77.45MB
E            1883ff08d289 Downloading [=====================>                             ]   89.8MB/210.3MB
E            d54f6bea316d Extracting [==================>                                ]  34.54MB/91.6MB
E            da783ef8cde9 Downloading [==========================================>        ]  65.62MB/77.45MB
E            d54f6bea316d Extracting [=======================>                           ]  42.89MB/91.6MB
E            1883ff08d289 Downloading [======================>                            ]  95.74MB/210.3MB
E            da783ef8cde9 Downloading [===========================================>       ]  67.21MB/77.45MB
E            d54f6bea316d Extracting [============================>                      ]  52.36MB/91.6MB
E            da783ef8cde9 Downloading [=================================================> ]  77.33MB/77.45MB
E            da783ef8cde9 Verifying Checksum 
E            da783ef8cde9 Download complete 
E            1883ff08d289 Downloading [=======================>                           ]  98.92MB/210.3MB
E            d54f6bea316d Extracting [=================================>                 ]  60.72MB/91.6MB
E            1883ff08d289 Downloading [========================>                          ]    101MB/210.3MB
E            d54f6bea316d Extracting [====================================>              ]  66.85MB/91.6MB
E            1883ff08d289 Downloading [=============================>                     ]  125.2MB/210.3MB
E            d54f6bea316d Extracting [=======================================>           ]  72.97MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  132.2MB/210.3MB
E            d54f6bea316d Extracting [===========================================>       ]   79.1MB/91.6MB
E            d54f6bea316d Extracting [==================================================>]   91.6MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  134.4MB/210.3MB
E            1883ff08d289 Downloading [====================================>              ]  154.1MB/210.3MB
E            1883ff08d289 Downloading [======================================>            ]  160.6MB/210.3MB
E            1883ff08d289 Downloading [=======================================>           ]  168.1MB/210.3MB
E            1883ff08d289 Downloading [=============================================>     ]  192.1MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.2MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.7MB/210.3MB
E            1883ff08d289 Verifying Checksum 
E            1883ff08d289 Download complete 
E            d54f6bea316d Pull complete 
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Pull complete 
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Pull complete 
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Pull complete 
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Pull complete 
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Pull complete 
E            80e8a1045bde Extracting [>                                                  ]  32.77kB/2.323MB
E            80e8a1045bde Extracting [==================================================>]  2.323MB/2.323MB
E            80e8a1045bde Pull complete 
E            51cfb1024c6b Extracting [>                                                  ]  229.4kB/22.44MB
E            51cfb1024c6b Extracting [================>                                  ]   7.34MB/22.44MB
E            51cfb1024c6b Extracting [===========================================>       ]   19.5MB/22.44MB
E            51cfb1024c6b Extracting [==================================================>]  22.44MB/22.44MB
E            51cfb1024c6b Pull complete 
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Pull complete 
E            fa1ef75ac6d3 Extracting [>                                                  ]   98.3kB/8.236MB
E            fa1ef75ac6d3 Extracting [==================================================>]  8.236MB/8.236MB
E            fa1ef75ac6d3 Pull complete 
E            1883ff08d289 Extracting [>                                                  ]  557.1kB/210.3MB
E            1883ff08d289 Extracting [==>                                                ]  12.26MB/210.3MB
E            1883ff08d289 Extracting [=====>                                             ]  24.51MB/210.3MB
E            1883ff08d289 Extracting [========>                                          ]  36.21MB/210.3MB
E            1883ff08d289 Extracting [===========>                                       ]  48.46MB/210.3MB
E            1883ff08d289 Extracting [==============>                                    ]   59.6MB/210.3MB
E            1883ff08d289 Extracting [=================>                                 ]  71.86MB/210.3MB
E            1883ff08d289 Extracting [===================>                               ]  82.44MB/210.3MB
E            1883ff08d289 Extracting [======================>                            ]  93.59MB/210.3MB
E            1883ff08d289 Extracting [=========================>                         ]  106.4MB/210.3MB
E            1883ff08d289 Extracting [============================>                      ]  119.2MB/210.3MB
E            1883ff08d289 Extracting [===============================>                   ]    132MB/210.3MB
E            1883ff08d289 Extracting [==================================>                ]  144.3MB/210.3MB
E            1883ff08d289 Extracting [=====================================>             ]  157.6MB/210.3MB
E            1883ff08d289 Extracting [========================================>          ]  170.5MB/210.3MB
E            1883ff08d289 Extracting [===========================================>       ]  182.2MB/210.3MB
E            1883ff08d289 Extracting [==============================================>    ]  193.9MB/210.3MB
E            1883ff08d289 Extracting [=================================================> ]  207.2MB/210.3MB
E            1883ff08d289 Extracting [==================================================>]  210.3MB/210.3MB
E            1883ff08d289 Pull complete 
E            da783ef8cde9 Extracting [>                                                  ]  557.1kB/77.45MB
E            da783ef8cde9 Extracting [====>                                              ]  7.242MB/77.45MB
E            da783ef8cde9 Extracting [=========>                                         ]  14.48MB/77.45MB
E            da783ef8cde9 Extracting [=============>                                     ]  21.17MB/77.45MB
E            da783ef8cde9 Extracting [==================>                                ]  28.41MB/77.45MB
E            da783ef8cde9 Extracting [======================>                            ]  35.09MB/77.45MB
E            da783ef8cde9 Extracting [==========================>                        ]  41.78MB/77.45MB
E            da783ef8cde9 Extracting [===============================>                   ]  49.02MB/77.45MB
E            da783ef8cde9 Extracting [===================================>               ]  55.71MB/77.45MB
E            da783ef8cde9 Extracting [========================================>          ]  62.39MB/77.45MB
E            da783ef8cde9 Extracting [============================================>      ]  69.07MB/77.45MB
E            da783ef8cde9 Extracting [================================================>  ]  75.76MB/77.45MB
E            da783ef8cde9 Extracting [==================================================>]  77.45MB/77.45MB
E            da783ef8cde9 Pull complete 
E            7db92acc11bc Extracting [>                                                  ]   98.3kB/7.945MB
E            7db92acc11bc Extracting [==========>                                        ]  1.671MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Pull complete 
E            test-timescaledb Pulled 
E            Network pytest5609-timescaledb_default  Creating
E            Network pytest5609-timescaledb_default  Created
E            Container test-timescaledb  Creating
E            Container test-timescaledb  Created
E            Container test-timescaledb  Starting
E            Container test-timescaledb  Started
E            Container test-timescaledb  Waiting
E           container test-timescaledb exited (3)
E           """.

venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:37: Exception
tests.integration.timescaledb.test_timescaledb::test_timescaledb_lineage
Stack Traces | 0.001s run time
docker_compose_runner = <function docker_compose_runner.<locals>.run at 0x7f7aa83cb6a0>
pytestconfig = <_pytest.config.Config object at 0x7f7b51749550>
test_resources_dir = PosixPath('.../tests/integration/timescaledb')

    @pytest.fixture(scope="module")
    def timescaledb_runner(docker_compose_runner, pytestconfig, test_resources_dir):
>       with docker_compose_runner(
            test_resources_dir / "docker-compose.yml", "timescaledb"
        ) as docker_services:

.../integration/timescaledb/test_timescaledb.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.11.16.../x64/lib/python3.11/contextlib.py:137: in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
.../datahub/testing/docker_utils.py:84: in run
    compose.execute(command)
venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:140: in execute
    return execute(command, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

command = 'docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait'
success_codes = (0,), ignore_stderr = False

    def execute(command: str, success_codes: Iterable[int] = (0,), ignore_stderr: bool = False) -> Union[bytes, Any]:
        """Run a shell command."""
        try:
            stderr_pipe = subprocess.DEVNULL if ignore_stderr else subprocess.STDOUT
            output = subprocess.check_output(command, stderr=stderr_pipe, shell=True)
            status = 0
        except subprocess.CalledProcessError as error:
            output = error.output or b""
            status = error.returncode
            command = error.cmd
    
        if status not in success_codes:
>           raise Exception(
                'Command {} returned {}: """{}""".'.format(command, status, output.decode("utf-8"))
            )
E           Exception: Command docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait returned 1: """time="2026-08-21T21:50:09Z" level=warning msg=".../tests/integration/timescaledb/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
E            test-timescaledb Pulling 
E            0a9a5dfd008f Pulling fs layer 
E            c259fdfe51e9 Pulling fs layer 
E            678cff7daef4 Pulling fs layer 
E            6035710dcfda Pulling fs layer 
E            8a1f652aba56 Pulling fs layer 
E            d54f6bea316d Pulling fs layer 
E            6cdeafa72762 Pulling fs layer 
E            6c40c6e3a2de Pulling fs layer 
E            c6e1fc4b8983 Pulling fs layer 
E            937c3e5e5624 Pulling fs layer 
E            8c09314ad148 Pulling fs layer 
E            80e8a1045bde Pulling fs layer 
E            51cfb1024c6b Pulling fs layer 
E            921d21b83f25 Pulling fs layer 
E            fa1ef75ac6d3 Pulling fs layer 
E            1883ff08d289 Pulling fs layer 
E            da783ef8cde9 Pulling fs layer 
E            7db92acc11bc Pulling fs layer 
E            937c3e5e5624 Waiting 
E            8c09314ad148 Waiting 
E            80e8a1045bde Waiting 
E            51cfb1024c6b Waiting 
E            921d21b83f25 Waiting 
E            fa1ef75ac6d3 Waiting 
E            1883ff08d289 Waiting 
E            da783ef8cde9 Waiting 
E            7db92acc11bc Waiting 
E            6035710dcfda Waiting 
E            d54f6bea316d Waiting 
E            6cdeafa72762 Waiting 
E            6c40c6e3a2de Waiting 
E            c6e1fc4b8983 Waiting 
E            8a1f652aba56 Waiting 
E            c259fdfe51e9 Downloading [==================================================>]     987B/987B
E            c259fdfe51e9 Verifying Checksum 
E            0a9a5dfd008f Downloading [>                                                  ]  50.65kB/3.627MB
E            c259fdfe51e9 Download complete 
E            0a9a5dfd008f Verifying Checksum 
E            0a9a5dfd008f Download complete 
E            0a9a5dfd008f Extracting [>                                                  ]  65.54kB/3.627MB
E            6035710dcfda Downloading [==================================================>]     174B/174B
E            6035710dcfda Verifying Checksum 
E            6035710dcfda Download complete 
E            678cff7daef4 Downloading [>                                                  ]  16.38kB/1.12MB
E            678cff7daef4 Downloading [==================================================>]   1.12MB/1.12MB
E            678cff7daef4 Verifying Checksum 
E            678cff7daef4 Download complete 
E            8a1f652aba56 Downloading [==================================================>]     116B/116B
E            8a1f652aba56 Verifying Checksum 
E            8a1f652aba56 Download complete 
E            0a9a5dfd008f Extracting [==================================================>]  3.627MB/3.627MB
E            0a9a5dfd008f Pull complete 
E            6c40c6e3a2de Downloading [==================================================>]     127B/127B
E            6c40c6e3a2de Verifying Checksum 
E            6c40c6e3a2de Download complete 
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            6cdeafa72762 Downloading [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Verifying Checksum 
E            6cdeafa72762 Download complete 
E            c6e1fc4b8983 Downloading [==================================================>]     171B/171B
E            c6e1fc4b8983 Verifying Checksum 
E            c6e1fc4b8983 Download complete 
E            937c3e5e5624 Downloading [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Verifying Checksum 
E            937c3e5e5624 Download complete 
E            c259fdfe51e9 Pull complete 
E            678cff7daef4 Extracting [=>                                                 ]  32.77kB/1.12MB
E            8c09314ad148 Downloading [==================================================>]     183B/183B
E            8c09314ad148 Verifying Checksum 
E            8c09314ad148 Download complete 
E            678cff7daef4 Extracting [==================================================>]   1.12MB/1.12MB
E            d54f6bea316d Downloading [>                                                  ]  526.6kB/91.6MB
E            678cff7daef4 Pull complete 
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Pull complete 
E            80e8a1045bde Downloading [>                                                  ]  33.25kB/2.323MB
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Pull complete 
E            d54f6bea316d Downloading [========>                                          ]  16.18MB/91.6MB
E            51cfb1024c6b Downloading [>                                                  ]  224.7kB/22.44MB
E            80e8a1045bde Downloading [===============================================>   ]  2.184MB/2.323MB
E            80e8a1045bde Verifying Checksum 
E            80e8a1045bde Download complete 
E            51cfb1024c6b Verifying Checksum 
E            51cfb1024c6b Download complete 
E            d54f6bea316d Downloading [==============>                                    ]  26.41MB/91.6MB
E            921d21b83f25 Downloading [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Verifying Checksum 
E            921d21b83f25 Download complete 
E            fa1ef75ac6d3 Downloading [>                                                  ]  87.22kB/8.236MB
E            d54f6bea316d Downloading [==================>                                ]  33.91MB/91.6MB
E            1883ff08d289 Downloading [>                                                  ]  528.9kB/210.3MB
E            fa1ef75ac6d3 Verifying Checksum 
E            fa1ef75ac6d3 Download complete 
E            1883ff08d289 Downloading [=====>                                             ]  23.54MB/210.3MB
E            da783ef8cde9 Downloading [>                                                  ]  533.1kB/77.45MB
E            d54f6bea316d Downloading [=================================>                 ]  61.79MB/91.6MB
E            da783ef8cde9 Downloading [===============>                                   ]  24.02MB/77.45MB
E            d54f6bea316d Downloading [====================================>              ]  67.13MB/91.6MB
E            1883ff08d289 Downloading [========>                                          ]  33.72MB/210.3MB
E            d54f6bea316d Downloading [=================================================> ]  91.26MB/91.6MB
E            d54f6bea316d Verifying Checksum 
E            d54f6bea316d Download complete 
E            1883ff08d289 Downloading [=============>                                     ]  55.09MB/210.3MB
E            d54f6bea316d Extracting [>                                                  ]  557.1kB/91.6MB
E            da783ef8cde9 Downloading [================>                                  ]  26.14MB/77.45MB
E            1883ff08d289 Downloading [==============>                                    ]  62.02MB/210.3MB
E            d54f6bea316d Extracting [===>                                               ]  6.128MB/91.6MB
E            7db92acc11bc Downloading [>                                                  ]  85.47kB/7.945MB
E            d54f6bea316d Extracting [=========>                                         ]  17.27MB/91.6MB
E            da783ef8cde9 Downloading [=====================>                             ]  33.59MB/77.45MB
E            7db92acc11bc Verifying Checksum 
E            7db92acc11bc Download complete 
E            1883ff08d289 Downloading [================>                                  ]  67.35MB/210.3MB
E            d54f6bea316d Extracting [=============>                                     ]  25.62MB/91.6MB
E            da783ef8cde9 Downloading [======================================>            ]  59.22MB/77.45MB
E            1883ff08d289 Downloading [=====================>                             ]   89.8MB/210.3MB
E            d54f6bea316d Extracting [==================>                                ]  34.54MB/91.6MB
E            da783ef8cde9 Downloading [==========================================>        ]  65.62MB/77.45MB
E            d54f6bea316d Extracting [=======================>                           ]  42.89MB/91.6MB
E            1883ff08d289 Downloading [======================>                            ]  95.74MB/210.3MB
E            da783ef8cde9 Downloading [===========================================>       ]  67.21MB/77.45MB
E            d54f6bea316d Extracting [============================>                      ]  52.36MB/91.6MB
E            da783ef8cde9 Downloading [=================================================> ]  77.33MB/77.45MB
E            da783ef8cde9 Verifying Checksum 
E            da783ef8cde9 Download complete 
E            1883ff08d289 Downloading [=======================>                           ]  98.92MB/210.3MB
E            d54f6bea316d Extracting [=================================>                 ]  60.72MB/91.6MB
E            1883ff08d289 Downloading [========================>                          ]    101MB/210.3MB
E            d54f6bea316d Extracting [====================================>              ]  66.85MB/91.6MB
E            1883ff08d289 Downloading [=============================>                     ]  125.2MB/210.3MB
E            d54f6bea316d Extracting [=======================================>           ]  72.97MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  132.2MB/210.3MB
E            d54f6bea316d Extracting [===========================================>       ]   79.1MB/91.6MB
E            d54f6bea316d Extracting [==================================================>]   91.6MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  134.4MB/210.3MB
E            1883ff08d289 Downloading [====================================>              ]  154.1MB/210.3MB
E            1883ff08d289 Downloading [======================================>            ]  160.6MB/210.3MB
E            1883ff08d289 Downloading [=======================================>           ]  168.1MB/210.3MB
E            1883ff08d289 Downloading [=============================================>     ]  192.1MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.2MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.7MB/210.3MB
E            1883ff08d289 Verifying Checksum 
E            1883ff08d289 Download complete 
E            d54f6bea316d Pull complete 
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Pull complete 
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Pull complete 
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Pull complete 
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Pull complete 
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Pull complete 
E            80e8a1045bde Extracting [>                                                  ]  32.77kB/2.323MB
E            80e8a1045bde Extracting [==================================================>]  2.323MB/2.323MB
E            80e8a1045bde Pull complete 
E            51cfb1024c6b Extracting [>                                                  ]  229.4kB/22.44MB
E            51cfb1024c6b Extracting [================>                                  ]   7.34MB/22.44MB
E            51cfb1024c6b Extracting [===========================================>       ]   19.5MB/22.44MB
E            51cfb1024c6b Extracting [==================================================>]  22.44MB/22.44MB
E            51cfb1024c6b Pull complete 
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Pull complete 
E            fa1ef75ac6d3 Extracting [>                                                  ]   98.3kB/8.236MB
E            fa1ef75ac6d3 Extracting [==================================================>]  8.236MB/8.236MB
E            fa1ef75ac6d3 Pull complete 
E            1883ff08d289 Extracting [>                                                  ]  557.1kB/210.3MB
E            1883ff08d289 Extracting [==>                                                ]  12.26MB/210.3MB
E            1883ff08d289 Extracting [=====>                                             ]  24.51MB/210.3MB
E            1883ff08d289 Extracting [========>                                          ]  36.21MB/210.3MB
E            1883ff08d289 Extracting [===========>                                       ]  48.46MB/210.3MB
E            1883ff08d289 Extracting [==============>                                    ]   59.6MB/210.3MB
E            1883ff08d289 Extracting [=================>                                 ]  71.86MB/210.3MB
E            1883ff08d289 Extracting [===================>                               ]  82.44MB/210.3MB
E            1883ff08d289 Extracting [======================>                            ]  93.59MB/210.3MB
E            1883ff08d289 Extracting [=========================>                         ]  106.4MB/210.3MB
E            1883ff08d289 Extracting [============================>                      ]  119.2MB/210.3MB
E            1883ff08d289 Extracting [===============================>                   ]    132MB/210.3MB
E            1883ff08d289 Extracting [==================================>                ]  144.3MB/210.3MB
E            1883ff08d289 Extracting [=====================================>             ]  157.6MB/210.3MB
E            1883ff08d289 Extracting [========================================>          ]  170.5MB/210.3MB
E            1883ff08d289 Extracting [===========================================>       ]  182.2MB/210.3MB
E            1883ff08d289 Extracting [==============================================>    ]  193.9MB/210.3MB
E            1883ff08d289 Extracting [=================================================> ]  207.2MB/210.3MB
E            1883ff08d289 Extracting [==================================================>]  210.3MB/210.3MB
E            1883ff08d289 Pull complete 
E            da783ef8cde9 Extracting [>                                                  ]  557.1kB/77.45MB
E            da783ef8cde9 Extracting [====>                                              ]  7.242MB/77.45MB
E            da783ef8cde9 Extracting [=========>                                         ]  14.48MB/77.45MB
E            da783ef8cde9 Extracting [=============>                                     ]  21.17MB/77.45MB
E            da783ef8cde9 Extracting [==================>                                ]  28.41MB/77.45MB
E            da783ef8cde9 Extracting [======================>                            ]  35.09MB/77.45MB
E            da783ef8cde9 Extracting [==========================>                        ]  41.78MB/77.45MB
E            da783ef8cde9 Extracting [===============================>                   ]  49.02MB/77.45MB
E            da783ef8cde9 Extracting [===================================>               ]  55.71MB/77.45MB
E            da783ef8cde9 Extracting [========================================>          ]  62.39MB/77.45MB
E            da783ef8cde9 Extracting [============================================>      ]  69.07MB/77.45MB
E            da783ef8cde9 Extracting [================================================>  ]  75.76MB/77.45MB
E            da783ef8cde9 Extracting [==================================================>]  77.45MB/77.45MB
E            da783ef8cde9 Pull complete 
E            7db92acc11bc Extracting [>                                                  ]   98.3kB/7.945MB
E            7db92acc11bc Extracting [==========>                                        ]  1.671MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Pull complete 
E            test-timescaledb Pulled 
E            Network pytest5609-timescaledb_default  Creating
E            Network pytest5609-timescaledb_default  Created
E            Container test-timescaledb  Creating
E            Container test-timescaledb  Created
E            Container test-timescaledb  Starting
E            Container test-timescaledb  Started
E            Container test-timescaledb  Waiting
E           container test-timescaledb exited (3)
E           """.

venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:37: Exception
tests.integration.timescaledb.test_timescaledb::test_timescaledb_ingest_with_db
Stack Traces | 11.6s run time
docker_compose_runner = <function docker_compose_runner.<locals>.run at 0x7f7aa83cb6a0>
pytestconfig = <_pytest.config.Config object at 0x7f7b51749550>
test_resources_dir = PosixPath('.../tests/integration/timescaledb')

    @pytest.fixture(scope="module")
    def timescaledb_runner(docker_compose_runner, pytestconfig, test_resources_dir):
>       with docker_compose_runner(
            test_resources_dir / "docker-compose.yml", "timescaledb"
        ) as docker_services:

.../integration/timescaledb/test_timescaledb.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../hostedtoolcache/Python/3.11.16.../x64/lib/python3.11/contextlib.py:137: in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
.../datahub/testing/docker_utils.py:84: in run
    compose.execute(command)
venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:140: in execute
    return execute(command, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

command = 'docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait'
success_codes = (0,), ignore_stderr = False

    def execute(command: str, success_codes: Iterable[int] = (0,), ignore_stderr: bool = False) -> Union[bytes, Any]:
        """Run a shell command."""
        try:
            stderr_pipe = subprocess.DEVNULL if ignore_stderr else subprocess.STDOUT
            output = subprocess.check_output(command, stderr=stderr_pipe, shell=True)
            status = 0
        except subprocess.CalledProcessError as error:
            output = error.output or b""
            status = error.returncode
            command = error.cmd
    
        if status not in success_codes:
>           raise Exception(
                'Command {} returned {}: """{}""".'.format(command, status, output.decode("utf-8"))
            )
E           Exception: Command docker compose --parallel -1 -f ".../tests/integration/timescaledb/docker-compose.yml" -p "pytest5609-timescaledb" up --build --wait returned 1: """time="2026-08-21T21:50:09Z" level=warning msg=".../tests/integration/timescaledb/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
E            test-timescaledb Pulling 
E            0a9a5dfd008f Pulling fs layer 
E            c259fdfe51e9 Pulling fs layer 
E            678cff7daef4 Pulling fs layer 
E            6035710dcfda Pulling fs layer 
E            8a1f652aba56 Pulling fs layer 
E            d54f6bea316d Pulling fs layer 
E            6cdeafa72762 Pulling fs layer 
E            6c40c6e3a2de Pulling fs layer 
E            c6e1fc4b8983 Pulling fs layer 
E            937c3e5e5624 Pulling fs layer 
E            8c09314ad148 Pulling fs layer 
E            80e8a1045bde Pulling fs layer 
E            51cfb1024c6b Pulling fs layer 
E            921d21b83f25 Pulling fs layer 
E            fa1ef75ac6d3 Pulling fs layer 
E            1883ff08d289 Pulling fs layer 
E            da783ef8cde9 Pulling fs layer 
E            7db92acc11bc Pulling fs layer 
E            937c3e5e5624 Waiting 
E            8c09314ad148 Waiting 
E            80e8a1045bde Waiting 
E            51cfb1024c6b Waiting 
E            921d21b83f25 Waiting 
E            fa1ef75ac6d3 Waiting 
E            1883ff08d289 Waiting 
E            da783ef8cde9 Waiting 
E            7db92acc11bc Waiting 
E            6035710dcfda Waiting 
E            d54f6bea316d Waiting 
E            6cdeafa72762 Waiting 
E            6c40c6e3a2de Waiting 
E            c6e1fc4b8983 Waiting 
E            8a1f652aba56 Waiting 
E            c259fdfe51e9 Downloading [==================================================>]     987B/987B
E            c259fdfe51e9 Verifying Checksum 
E            0a9a5dfd008f Downloading [>                                                  ]  50.65kB/3.627MB
E            c259fdfe51e9 Download complete 
E            0a9a5dfd008f Verifying Checksum 
E            0a9a5dfd008f Download complete 
E            0a9a5dfd008f Extracting [>                                                  ]  65.54kB/3.627MB
E            6035710dcfda Downloading [==================================================>]     174B/174B
E            6035710dcfda Verifying Checksum 
E            6035710dcfda Download complete 
E            678cff7daef4 Downloading [>                                                  ]  16.38kB/1.12MB
E            678cff7daef4 Downloading [==================================================>]   1.12MB/1.12MB
E            678cff7daef4 Verifying Checksum 
E            678cff7daef4 Download complete 
E            8a1f652aba56 Downloading [==================================================>]     116B/116B
E            8a1f652aba56 Verifying Checksum 
E            8a1f652aba56 Download complete 
E            0a9a5dfd008f Extracting [==================================================>]  3.627MB/3.627MB
E            0a9a5dfd008f Pull complete 
E            6c40c6e3a2de Downloading [==================================================>]     127B/127B
E            6c40c6e3a2de Verifying Checksum 
E            6c40c6e3a2de Download complete 
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            c259fdfe51e9 Extracting [==================================================>]     987B/987B
E            6cdeafa72762 Downloading [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Verifying Checksum 
E            6cdeafa72762 Download complete 
E            c6e1fc4b8983 Downloading [==================================================>]     171B/171B
E            c6e1fc4b8983 Verifying Checksum 
E            c6e1fc4b8983 Download complete 
E            937c3e5e5624 Downloading [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Verifying Checksum 
E            937c3e5e5624 Download complete 
E            c259fdfe51e9 Pull complete 
E            678cff7daef4 Extracting [=>                                                 ]  32.77kB/1.12MB
E            8c09314ad148 Downloading [==================================================>]     183B/183B
E            8c09314ad148 Verifying Checksum 
E            8c09314ad148 Download complete 
E            678cff7daef4 Extracting [==================================================>]   1.12MB/1.12MB
E            d54f6bea316d Downloading [>                                                  ]  526.6kB/91.6MB
E            678cff7daef4 Pull complete 
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Extracting [==================================================>]     174B/174B
E            6035710dcfda Pull complete 
E            80e8a1045bde Downloading [>                                                  ]  33.25kB/2.323MB
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Extracting [==================================================>]     116B/116B
E            8a1f652aba56 Pull complete 
E            d54f6bea316d Downloading [========>                                          ]  16.18MB/91.6MB
E            51cfb1024c6b Downloading [>                                                  ]  224.7kB/22.44MB
E            80e8a1045bde Downloading [===============================================>   ]  2.184MB/2.323MB
E            80e8a1045bde Verifying Checksum 
E            80e8a1045bde Download complete 
E            51cfb1024c6b Verifying Checksum 
E            51cfb1024c6b Download complete 
E            d54f6bea316d Downloading [==============>                                    ]  26.41MB/91.6MB
E            921d21b83f25 Downloading [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Verifying Checksum 
E            921d21b83f25 Download complete 
E            fa1ef75ac6d3 Downloading [>                                                  ]  87.22kB/8.236MB
E            d54f6bea316d Downloading [==================>                                ]  33.91MB/91.6MB
E            1883ff08d289 Downloading [>                                                  ]  528.9kB/210.3MB
E            fa1ef75ac6d3 Verifying Checksum 
E            fa1ef75ac6d3 Download complete 
E            1883ff08d289 Downloading [=====>                                             ]  23.54MB/210.3MB
E            da783ef8cde9 Downloading [>                                                  ]  533.1kB/77.45MB
E            d54f6bea316d Downloading [=================================>                 ]  61.79MB/91.6MB
E            da783ef8cde9 Downloading [===============>                                   ]  24.02MB/77.45MB
E            d54f6bea316d Downloading [====================================>              ]  67.13MB/91.6MB
E            1883ff08d289 Downloading [========>                                          ]  33.72MB/210.3MB
E            d54f6bea316d Downloading [=================================================> ]  91.26MB/91.6MB
E            d54f6bea316d Verifying Checksum 
E            d54f6bea316d Download complete 
E            1883ff08d289 Downloading [=============>                                     ]  55.09MB/210.3MB
E            d54f6bea316d Extracting [>                                                  ]  557.1kB/91.6MB
E            da783ef8cde9 Downloading [================>                                  ]  26.14MB/77.45MB
E            1883ff08d289 Downloading [==============>                                    ]  62.02MB/210.3MB
E            d54f6bea316d Extracting [===>                                               ]  6.128MB/91.6MB
E            7db92acc11bc Downloading [>                                                  ]  85.47kB/7.945MB
E            d54f6bea316d Extracting [=========>                                         ]  17.27MB/91.6MB
E            da783ef8cde9 Downloading [=====================>                             ]  33.59MB/77.45MB
E            7db92acc11bc Verifying Checksum 
E            7db92acc11bc Download complete 
E            1883ff08d289 Downloading [================>                                  ]  67.35MB/210.3MB
E            d54f6bea316d Extracting [=============>                                     ]  25.62MB/91.6MB
E            da783ef8cde9 Downloading [======================================>            ]  59.22MB/77.45MB
E            1883ff08d289 Downloading [=====================>                             ]   89.8MB/210.3MB
E            d54f6bea316d Extracting [==================>                                ]  34.54MB/91.6MB
E            da783ef8cde9 Downloading [==========================================>        ]  65.62MB/77.45MB
E            d54f6bea316d Extracting [=======================>                           ]  42.89MB/91.6MB
E            1883ff08d289 Downloading [======================>                            ]  95.74MB/210.3MB
E            da783ef8cde9 Downloading [===========================================>       ]  67.21MB/77.45MB
E            d54f6bea316d Extracting [============================>                      ]  52.36MB/91.6MB
E            da783ef8cde9 Downloading [=================================================> ]  77.33MB/77.45MB
E            da783ef8cde9 Verifying Checksum 
E            da783ef8cde9 Download complete 
E            1883ff08d289 Downloading [=======================>                           ]  98.92MB/210.3MB
E            d54f6bea316d Extracting [=================================>                 ]  60.72MB/91.6MB
E            1883ff08d289 Downloading [========================>                          ]    101MB/210.3MB
E            d54f6bea316d Extracting [====================================>              ]  66.85MB/91.6MB
E            1883ff08d289 Downloading [=============================>                     ]  125.2MB/210.3MB
E            d54f6bea316d Extracting [=======================================>           ]  72.97MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  132.2MB/210.3MB
E            d54f6bea316d Extracting [===========================================>       ]   79.1MB/91.6MB
E            d54f6bea316d Extracting [==================================================>]   91.6MB/91.6MB
E            1883ff08d289 Downloading [===============================>                   ]  134.4MB/210.3MB
E            1883ff08d289 Downloading [====================================>              ]  154.1MB/210.3MB
E            1883ff08d289 Downloading [======================================>            ]  160.6MB/210.3MB
E            1883ff08d289 Downloading [=======================================>           ]  168.1MB/210.3MB
E            1883ff08d289 Downloading [=============================================>     ]  192.1MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.2MB/210.3MB
E            1883ff08d289 Downloading [===============================================>   ]  201.7MB/210.3MB
E            1883ff08d289 Verifying Checksum 
E            1883ff08d289 Download complete 
E            d54f6bea316d Pull complete 
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Extracting [==================================================>]  9.448kB/9.448kB
E            6cdeafa72762 Pull complete 
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Extracting [==================================================>]     127B/127B
E            6c40c6e3a2de Pull complete 
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Extracting [==================================================>]     171B/171B
E            c6e1fc4b8983 Pull complete 
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Extracting [==================================================>]  5.475kB/5.475kB
E            937c3e5e5624 Pull complete 
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Extracting [==================================================>]     183B/183B
E            8c09314ad148 Pull complete 
E            80e8a1045bde Extracting [>                                                  ]  32.77kB/2.323MB
E            80e8a1045bde Extracting [==================================================>]  2.323MB/2.323MB
E            80e8a1045bde Pull complete 
E            51cfb1024c6b Extracting [>                                                  ]  229.4kB/22.44MB
E            51cfb1024c6b Extracting [================>                                  ]   7.34MB/22.44MB
E            51cfb1024c6b Extracting [===========================================>       ]   19.5MB/22.44MB
E            51cfb1024c6b Extracting [==================================================>]  22.44MB/22.44MB
E            51cfb1024c6b Pull complete 
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Extracting [==================================================>]  2.132kB/2.132kB
E            921d21b83f25 Pull complete 
E            fa1ef75ac6d3 Extracting [>                                                  ]   98.3kB/8.236MB
E            fa1ef75ac6d3 Extracting [==================================================>]  8.236MB/8.236MB
E            fa1ef75ac6d3 Pull complete 
E            1883ff08d289 Extracting [>                                                  ]  557.1kB/210.3MB
E            1883ff08d289 Extracting [==>                                                ]  12.26MB/210.3MB
E            1883ff08d289 Extracting [=====>                                             ]  24.51MB/210.3MB
E            1883ff08d289 Extracting [========>                                          ]  36.21MB/210.3MB
E            1883ff08d289 Extracting [===========>                                       ]  48.46MB/210.3MB
E            1883ff08d289 Extracting [==============>                                    ]   59.6MB/210.3MB
E            1883ff08d289 Extracting [=================>                                 ]  71.86MB/210.3MB
E            1883ff08d289 Extracting [===================>                               ]  82.44MB/210.3MB
E            1883ff08d289 Extracting [======================>                            ]  93.59MB/210.3MB
E            1883ff08d289 Extracting [=========================>                         ]  106.4MB/210.3MB
E            1883ff08d289 Extracting [============================>                      ]  119.2MB/210.3MB
E            1883ff08d289 Extracting [===============================>                   ]    132MB/210.3MB
E            1883ff08d289 Extracting [==================================>                ]  144.3MB/210.3MB
E            1883ff08d289 Extracting [=====================================>             ]  157.6MB/210.3MB
E            1883ff08d289 Extracting [========================================>          ]  170.5MB/210.3MB
E            1883ff08d289 Extracting [===========================================>       ]  182.2MB/210.3MB
E            1883ff08d289 Extracting [==============================================>    ]  193.9MB/210.3MB
E            1883ff08d289 Extracting [=================================================> ]  207.2MB/210.3MB
E            1883ff08d289 Extracting [==================================================>]  210.3MB/210.3MB
E            1883ff08d289 Pull complete 
E            da783ef8cde9 Extracting [>                                                  ]  557.1kB/77.45MB
E            da783ef8cde9 Extracting [====>                                              ]  7.242MB/77.45MB
E            da783ef8cde9 Extracting [=========>                                         ]  14.48MB/77.45MB
E            da783ef8cde9 Extracting [=============>                                     ]  21.17MB/77.45MB
E            da783ef8cde9 Extracting [==================>                                ]  28.41MB/77.45MB
E            da783ef8cde9 Extracting [======================>                            ]  35.09MB/77.45MB
E            da783ef8cde9 Extracting [==========================>                        ]  41.78MB/77.45MB
E            da783ef8cde9 Extracting [===============================>                   ]  49.02MB/77.45MB
E            da783ef8cde9 Extracting [===================================>               ]  55.71MB/77.45MB
E            da783ef8cde9 Extracting [========================================>          ]  62.39MB/77.45MB
E            da783ef8cde9 Extracting [============================================>      ]  69.07MB/77.45MB
E            da783ef8cde9 Extracting [================================================>  ]  75.76MB/77.45MB
E            da783ef8cde9 Extracting [==================================================>]  77.45MB/77.45MB
E            da783ef8cde9 Pull complete 
E            7db92acc11bc Extracting [>                                                  ]   98.3kB/7.945MB
E            7db92acc11bc Extracting [==========>                                        ]  1.671MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Extracting [==================================================>]  7.945MB/7.945MB
E            7db92acc11bc Pull complete 
E            test-timescaledb Pulled 
E            Network pytest5609-timescaledb_default  Creating
E            Network pytest5609-timescaledb_default  Created
E            Container test-timescaledb  Creating
E            Container test-timescaledb  Created
E            Container test-timescaledb  Starting
E            Container test-timescaledb  Started
E            Container test-timescaledb  Waiting
E           container test-timescaledb exited (3)
E           """.

venv/lib/python3.11....../site-packages/pytest_docker/plugin.py:37: Exception

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 5 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="metadata-ingestion/src/datahub/cli/skill_context.py">

<violation number="1" location="metadata-ingestion/src/datahub/cli/skill_context.py:72">
P2: Custom agent: **Enforce Strict Maintainability Standards**

Unexpected errors in `infer_skill_component()` are swallowed and converted into missing attribution. The existing `silent=True` lookup and input checks cover the expected no-context cases, so catch only known optional-context failures and validate the nested context mapping explicitly; otherwise implementation defects silently fall back to the generic component.</violation>
</file>

<file name="metadata-ingestion/src/datahub/ingestion/graph/client.py">

<violation number="1" location="metadata-ingestion/src/datahub/ingestion/graph/client.py:2426">
P2: The skill component is resolved inside the lru-cached `get_default_graph`, but it is not part of the cache key `(client_mode, datahub_component)`. For a normal one-shot CLI process the root Group fixes the skill for the process, so this is safe. However, `get_default_graph` is a public library function called from 77 sites, including programmatic/embedded use (e.g. `forms.py`) and test suites that run multiple invocations in one interpreter. In any process where the Click context changes between calls with the same key, the cache returns a graph built with the first invocation's skill (or no skill), silently dropping or mis-attributing later requests. The unit test itself has to call `cache_clear()` around the call precisely because the cache is process-global and would otherwise leak the skill attribution across cases. Consider passing the resolved skill as `datahub_component` (already in the key) or removing the cache so the result always reflects the current context.</violation>
</file>

<file name="docs/cli.md">

<violation number="1" location="docs/cli.md:121">
P3: The normalization description is inaccurate: `_`, `.`, and `-` are also preserved, not just alphanumerics. A skill such as `my.skill_name` yields `skill-my.skill_name`, not `skill-my-skill-name` as the 'non-alphanumerics collapsed to `-`' wording implies. Restate it as 'anything outside `[a-z0-9._-]` collapsed to `-`' so users know which skill names survive intact.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

return None

return sanitize_skill_component(raw)
except Exception as e:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Custom agent: Enforce Strict Maintainability Standards

Unexpected errors in infer_skill_component() are swallowed and converted into missing attribution. The existing silent=True lookup and input checks cover the expected no-context cases, so catch only known optional-context failures and validate the nested context mapping explicitly; otherwise implementation defects silently fall back to the generic component.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At metadata-ingestion/src/datahub/cli/skill_context.py, line 72:

<comment>Unexpected errors in `infer_skill_component()` are swallowed and converted into missing attribution. The existing `silent=True` lookup and input checks cover the expected no-context cases, so catch only known optional-context failures and validate the nested context mapping explicitly; otherwise implementation defects silently fall back to the generic component.</comment>

<file context>
@@ -0,0 +1,75 @@
+            return None
+
+        return sanitize_skill_component(raw)
+    except Exception as e:
+        # Attribution is best-effort telemetry; it must never fail a command.
+        logger.debug(f"Could not resolve skill attribution context: {e}")
</file context>

# CLI process, so leaving it out of the lru_cache key can't serve a stale
# component. An explicit argument still wins, as does DATAHUB_COMPONENT
# when neither is set (resolved downstream in the emitter).
graph_config.datahub_component = datahub_component or infer_skill_component()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The skill component is resolved inside the lru-cached get_default_graph, but it is not part of the cache key (client_mode, datahub_component). For a normal one-shot CLI process the root Group fixes the skill for the process, so this is safe. However, get_default_graph is a public library function called from 77 sites, including programmatic/embedded use (e.g. forms.py) and test suites that run multiple invocations in one interpreter. In any process where the Click context changes between calls with the same key, the cache returns a graph built with the first invocation's skill (or no skill), silently dropping or mis-attributing later requests. The unit test itself has to call cache_clear() around the call precisely because the cache is process-global and would otherwise leak the skill attribution across cases. Consider passing the resolved skill as datahub_component (already in the key) or removing the cache so the result always reflects the current context.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At metadata-ingestion/src/datahub/ingestion/graph/client.py, line 2426:

<comment>The skill component is resolved inside the lru-cached `get_default_graph`, but it is not part of the cache key `(client_mode, datahub_component)`. For a normal one-shot CLI process the root Group fixes the skill for the process, so this is safe. However, `get_default_graph` is a public library function called from 77 sites, including programmatic/embedded use (e.g. `forms.py`) and test suites that run multiple invocations in one interpreter. In any process where the Click context changes between calls with the same key, the cache returns a graph built with the first invocation's skill (or no skill), silently dropping or mis-attributing later requests. The unit test itself has to call `cache_clear()` around the call precisely because the cache is process-global and would otherwise leak the skill attribution across cases. Consider passing the resolved skill as `datahub_component` (already in the key) or removing the cache so the result always reflects the current context.</comment>

<file context>
@@ -2415,7 +2416,14 @@ def get_default_graph(
+    # CLI process, so leaving it out of the lru_cache key can't serve a stale
+    # component. An explicit argument still wins, as does DATAHUB_COMPONENT
+    # when neither is set (resolved downstream in the emitter).
+    graph_config.datahub_component = datahub_component or infer_skill_component()
     graph = DataHubGraph(graph_config)
     graph.test_connection()
</file context>

Comment thread docs/cli.md
```

The skill name becomes the client component in the `User-Agent` header every request
carries, alongside the automatically detected caller:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The normalization description is inaccurate: _, ., and - are also preserved, not just alphanumerics. A skill such as my.skill_name yields skill-my.skill_name, not skill-my-skill-name as the 'non-alphanumerics collapsed to -' wording implies. Restate it as 'anything outside [a-z0-9._-] collapsed to -' so users know which skill names survive intact.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cli.md, line 121:

<comment>The normalization description is inaccurate: `_`, `.`, and `-` are also preserved, not just alphanumerics. A skill such as `my.skill_name` yields `skill-my.skill_name`, not `skill-my-skill-name` as the 'non-alphanumerics collapsed to `-`' wording implies. Restate it as 'anything outside `[a-z0-9._-]` collapsed to `-`' so users know which skill names survive intact.</comment>

<file context>
@@ -107,6 +108,26 @@ Commands:
+```
+
+The skill name becomes the client component in the `User-Agent` header every request
+carries, alongside the automatically detected caller:
+
+```
</file context>

@maggiehays maggiehays added the needs-review Label for PRs that need review from a maintainer. label Aug 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Issues and Improvements to docs ingestion PR or Issue related to the ingestion of metadata needs-review Label for PRs that need review from a maintainer.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants