Repository navigation
Conversation
…ration
Shared types built by more than one app (FND-3846). Each creator reproduces
every app's existing qualifiedName, so no app changes identity:
- TagAttachment.creator(qn_style=...): tag_object (databricks),
tag_attachments_object (dbt), object_tag (bridge). Passthrough type, so the
creator is hand-added to tag_attachment.py; overlay kept for when passthrough
types are generated.
- S3Prefix.creator: {bucket_qn}/{prefix}/ with trailing slash (s3, bridge);
sets bucket relationship, parent prefix qualified name and hierarchy.
- FlowControlOperation.creator: {conn}/{scope}/{source_id} (fabric notebook,
sagemaker) or {parent_qn}/jobs/{source_id} with flow_controlled_by (fabric
Spark job).
Parity tests cover every app template. A strict xfail records that the
generated S3Prefix _QUALIFIED_NAME_PATTERN rejects the trailing slash until
qualifiedNameFormula is added in atlanhq/models.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
Resolve s3_prefix.py / flow_control_operation.py by taking main's regenerated class files and re-injecting the creator overlays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
- s3_prefix.py regenerated from atlanhq/models#2093 with this branch's overlays: _QUALIFIED_NAME_PATTERN is now ^.+/[^/]+/$, so creator output passes validate(for_creation=True); the strict xfail becomes a real test. flow_control_operation.py and tag_attachment.py regenerate byte-identical. - Integration tests: S3Prefix (root + nested, parent relationship), FlowControlOperation (Fabric notebook + Spark job, SageMaker job), TagAttachment (all three qn_style shapes). - AtlanConnectorType.FABRIC ("fabric", bi) and SAGEMAKER ("sagemaker", SaaS), matching the connector values in atlan-fabric-app / atlan-sagemaker-app. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
…ay migration 76c5b17 added `create_with_prefix = creator_with_prefix` to the hand-written s3_object.py; 65ac20e moved the class to Pkl generation + overlays without carrying the alias into _overlays/s3_object.py, so it disappeared and tests_v9/integration/s3_asset_test.py (which uses it) has errored since. Re-add it in the overlay (same alias style as AirflowDag.create), regenerated from models#2093: the diff in s3_object.py is exactly the alias. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
…andler - S3Object.creator / creator_with_prefix now set bucket=RelatedS3Bucket(qualified_name=s3_bucket_qualified_name), matching pyatlan's creators; without it bucket.objects came back empty. - delete_handler (Atlas deleteHandler) on Entity, ReferenceableNested and the nested conversions, regenerated from models#2093's renderer change. Only the target files are regenerated here (entity, referenceable, s3_object and the three FND-3846 types); the sync bot regenerates the rest after models merges. - s3_asset_test.py: v9 returns relationships as RelatedS3Object, so assert that type. The delete tests now pass and confirm deleteHandler is in the payload. The file passes in full against a tenant (17 passed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ Description
Adds
creator()to three shared types that more than one app builds. Each creator reproduces every app's existing qualifiedName, so no app changes identity.Linear: FND-3846. The issue comments hold the template-reconciliation and required-attribute tables.
qn_style="tag_object"(default){tag_qn}/{object_qn}qn_style="tag_attachments_object"{tag_qn}/attachments/{object_qn}qn_style="object_tag"{object_qn}/{tag_name}{bucket_qn}/{prefix}/(trailing slash)scope{conn}/{scope}/{source_id}parent_qualified_name{parent_qn}/jobs/{source_id}+flow_controlled_byNotes:
How the creators are added: as hand-written overlays in
pyatlan_v9/model/assets/_overlays/, spliced into the generated class files the same way the generator does it (FND-3843 decision).TagAttachment is
passthrough = truein models, so its class is hand-managed. The creator is added directly totag_attachment.py. The overlay copy only takes effect once passthrough types are generated.S3Prefix also sets the
s3_bucketrelationship,s3_parent_prefix_qualified_nameands3_prefix_hierarchy, matching atlan-s3-app. Thes3_parent_prefixrelationship is left to the caller.Models PR atlanhq/models#2093 adds
qualifiedNameFormulafor S3Prefix and FlowControlOperation.s3_prefix.pyis regenerated from that branch, so the S3Prefix pattern is now^.+/[^/]+/$and creator output passesvalidate(for_creation=True). The other two files regenerate byte-identical.TagAttachment is now generated by models
master(the passthrough fix landed), and the generated file matches this PR'stag_attachment.pybyte for byte. It has noqualifiedNameFormula, because the apps build three different shapes.New connector types:
AtlanConnectorType.FABRIC("fabric", BI) andSAGEMAKER("sagemaker", SaaS), matching the connector values in atlan-fabric-app and atlan-sagemaker-app. The integration tests need them.S3Object fixes, which make
tests_v9/integration/s3_asset_test.pypass in full (17 passed against a tenant):S3Object.create_with_prefix. 76c5b17 added it to the hand-written model, and it was lost when 65ac20e moved the class to overlays.creatorandcreator_with_prefixnow set thebucketrelationship, as pyatlan's creators do. Without itbucket.objectscame back empty.delete_handler(AtlasdeleteHandler) toEntity,ReferenceableNestedand the nested conversions. It comes from models#2093's renderer change. The delete tests read"SOFT"from the delete response, so the field really is in the payload.entity,referenceable,s3_objectand the three FND-3846 types. The sync bot regenerates the rest after models merges.Merge order
The sync bot regenerates using the overlays on
main. Merged in this order, its sync PR only changes the S3Prefix pattern line.🧩 Type of change
✅ How has this been tested?
tests_v9/unit/model/{s3_prefix,flow_control_operation,tag_attachment}_test.pyhave one parity test per app template, plus tests for invalid and blank inputs.uv run pytest tests_v9/unitgives 8336 passed, 5 skipped.tests_v9/integration/s3_asset_test.py::test_s3_prefix: root and nested prefix, bucket and parent-prefix relationships.tests_v9/integration/flow_control_operation_asset_test.py: Fabric notebook and Spark job, SageMaker job.tests_v9/integration/tag_attachment_asset_test.py: all threeqn_styleshapes.CI triage (run 39263757980)
qa-checks-and-unit-testsandv9-qa-checks-and-unit-testsjobs;flow_control_operation_asset_test.pyandtag_attachment_asset_test.py;s3_asset_test.py::test_s3_prefix, which passes inside thes3_asset_test.pyjob.mainand are unrelated to this PR:s3_asset_test.pynow passes in full against the tenant (17 passed). See the S3Object fixes above.test_client.py(v9 and aio):add_or_update_classificationsis not defined on the v9 assets.custom_metadata_test.py(v9 and aio): the tenant returnedATLAS-423 Failed to get the lock.aio/test_index_search.py:IndexSearchRequestis not JSON serializable.tests/integration/test_client.py: audit response validation.📋 Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01Wc98jPXjP7pdqJoAh3vtfY