Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging Kafka metadata. #37

Merged
merged 20 commits into from
Jan 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4
- name: Install Poetry
run: |
pipx install poetry
pipx install 'poetry<2'
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
Expand All @@ -38,7 +38,7 @@ jobs:
- uses: actions/checkout@v4
- name: Install Poetry
run: |
pipx install poetry
pipx install 'poetry<2'
- uses: actions/setup-python@v5
with:
python-version: "3.12"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
python-version: "3.12"
- name: Install dependencies
run: |
pipx install poetry
pipx install 'poetry<2'
- name: Build package
run: |
poetry build
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sphinx.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
python-version: "3.12"
- name: Install Poetry
run: |
pipx install poetry
pipx install 'poetry<2'
- name: Install dependencies
run: poetry install --with docs
- name: Setup Pages
Expand Down
4 changes: 3 additions & 1 deletion esgf_playground_utils/config/kafka.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@ class Settings(BaseSettings):
bootstrap_servers: List[str] = ["localhost"]
consumer_group: Optional[str] = None
kafka_topics: Pattern[str] = compile(r".*\..*\..*")
error_topic: str = "esgf_consumer_error"
sasl_mechanism: str = "PLAIN"
sasl_plain_username: Optional[str] = None
sasl_plain_password: Optional[str] = None
stac_server: HttpUrl = HttpUrl("http://localhost:9010")
39 changes: 17 additions & 22 deletions esgf_playground_utils/models/kafka.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,28 +87,30 @@ class Data(BaseModel):
payload: Union[CreatePayload, RevokePayload, UpdatePayload, PartialUpdatePayload]


class Auth(BaseModel):
class RequesterData(BaseModel):
"""
Model describing the ``AUTH`` component of a Kafka message.

.. note::

This is not an authorisation token or other verified identity. It is the simply an indication of the institute
providing the message.
Model describing ``Requests Data`` for the ``Auth`` component of a Kafka message in more detail.
"""

client_id: str
server: str
iss: str
sub: str
identity_provider: str
identity_provider_display_name: str


class AuthData(BaseModel):
class Auth(BaseModel):
"""
Model describing ``Auth`` component of a Kafka message in more detail.

.. note::

This is not an authorisation token or other verified identity. It is the simply an indication of the institute
providing the message.
"""

auth_policy_id: str
client_id: str
requester_data: Dict[str, str]
requester_data: RequesterData


class Publisher(BaseModel):
Expand All @@ -126,28 +128,21 @@ class Metadata(BaseModel):
Multiple metadata attributes required for ESGF but not part of the STAC payload.
"""

auth: Union[Auth, AuthData]
event_id: str
request_id: str
auth: Auth
publisher: Publisher
time: datetime
schema_version: str


class ExtendedMetadata(Metadata):
"""
An extension of the Metadata Model for Publish Events.
"""

event_id: str
request_id: str


class KafkaEvent(BaseModel):
"""
The full content of a Kafka message, containing both the STAC payload, the request description and the ESGF
mandated metadata.
"""

metadata: Union[Metadata, ExtendedMetadata]
metadata: Metadata
data: Data


Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
[tool.poetry]
name = "esgf-playground-utils"
version = "0.3.8"
version = "0.4.0"
description = "Common library and models for the ESGF-Playground"
readme = "README.rst"
authors = [
"David Poulter <[email protected]>",
"Rhys Evans <[email protected]>",
"Ed Borthwick <[email protected]>",
]
readme = "README.rst"

[tool.poetry.dependencies]
python = ">=3.9"
Expand Down
92 changes: 66 additions & 26 deletions test/functional_test/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,15 +149,23 @@ def test_create_payload_valid(self) -> None:
}
},
"metadata": {
"event_id": "3a8a2536-323b-4259-a218-6002a3491d25",
"request_id": "dee8c54c-e815-4863-87fb-7b606efd2501",
"auth": {
"client_id": "<KEY>",
"server": "<SERVER>"
"auth_policy_id": "ESGF-Publish-00012",
"client_id": "CEDA-transaction-client",
"requester_data": {
"iss": "auth.globus.org",
"sub": "b16b12b6-d274-11e5-8e41-5fea585a1aa2",
"identity_provider": "0dcf5063-bffd-40f7-b403-24f97e32fa47",
"identity_provider_display_name": "University of Chicago"
}
},
"publisher": {
"package": "some_python_package",
"version": "0.3.0"
"package": "some_python_package",
"version": "0.3.0"
},
"time": "2022-01-20T00:00:00Z",
"time": "2024-07-04T14:17:35Z",
"schema_version": "1.0.0"
}
}
Expand Down Expand Up @@ -299,15 +307,23 @@ def test_create_payload_invalid(self) -> None:
}
},
"metadata": {
"event_id": "3a8a2536-323b-4259-a218-6002a3491d25",
"request_id": "dee8c54c-e815-4863-87fb-7b606efd2501",
"auth": {
"client_id": "<KEY>",
"server": "<SERVER>"
"auth_policy_id": "ESGF-Publish-00012",
"client_id": "CEDA-transaction-client",
"requester_data": {
"iss": "auth.globus.org",
"sub": "b16b12b6-d274-11e5-8e41-5fea585a1aa2",
"identity_provider": "0dcf5063-bffd-40f7-b403-24f97e32fa47",
"identity_provider_display_name": "University of Chicago"
}
},
"publisher": {
"package": "some_python_package",
"version": "0.3.0"
"package": "some_python_package",
"version": "0.3.0"
},
"time": "2022-01-20T00:00:00Z",
"time": "2024-07-04T14:17:35Z",
"schema_version": "1.0.0"
}
}
Expand All @@ -325,19 +341,27 @@ def test_revoke_payload_soft(self) -> None:
"payload": {
"collection_id": "cmip6",
"method": "PATCH",
"item_id": "an_item"
"item_id": "an_item"
}
},
"metadata": {
"event_id": "3a8a2536-323b-4259-a218-6002a3491d25",
"request_id": "dee8c54c-e815-4863-87fb-7b606efd2501",
"auth": {
"client_id": "<KEY>",
"server": "<SERVER>"
"auth_policy_id": "ESGF-Publish-00012",
"client_id": "CEDA-transaction-client",
"requester_data": {
"iss": "auth.globus.org",
"sub": "b16b12b6-d274-11e5-8e41-5fea585a1aa2",
"identity_provider": "0dcf5063-bffd-40f7-b403-24f97e32fa47",
"identity_provider_display_name": "University of Chicago"
}
},
"publisher": {
"package": "some_python_package",
"version": "0.3.0"
"package": "some_python_package",
"version": "0.3.0"
},
"time": "2022-01-20T00:00:00Z",
"time": "2024-07-04T14:17:35Z",
"schema_version": "1.0.0"
}
}
Expand All @@ -360,15 +384,23 @@ def test_revoke_payload_hard(self) -> None:
}
},
"metadata": {
"event_id": "3a8a2536-323b-4259-a218-6002a3491d25",
"request_id": "dee8c54c-e815-4863-87fb-7b606efd2501",
"auth": {
"client_id": "<KEY>",
"server": "<SERVER>"
"auth_policy_id": "ESGF-Publish-00012",
"client_id": "CEDA-transaction-client",
"requester_data": {
"iss": "auth.globus.org",
"sub": "b16b12b6-d274-11e5-8e41-5fea585a1aa2",
"identity_provider": "0dcf5063-bffd-40f7-b403-24f97e32fa47",
"identity_provider_display_name": "University of Chicago"
}
},
"publisher": {
"package": "some_python_package",
"version": "0.3.0"
"package": "some_python_package",
"version": "0.3.0"
},
"time": "2022-01-20T00:00:00Z",
"time": "2024-07-04T14:17:35Z",
"schema_version": "1.0.0"
}
}
Expand Down Expand Up @@ -511,15 +543,23 @@ def test_update_payload_full(self) -> None:
}
},
"metadata": {
"event_id": "3a8a2536-323b-4259-a218-6002a3491d25",
"request_id": "dee8c54c-e815-4863-87fb-7b606efd2501",
"auth": {
"client_id": "<KEY>",
"server": "<SERVER>"
"auth_policy_id": "ESGF-Publish-00012",
"client_id": "CEDA-transaction-client",
"requester_data": {
"iss": "auth.globus.org",
"sub": "b16b12b6-d274-11e5-8e41-5fea585a1aa2",
"identity_provider": "0dcf5063-bffd-40f7-b403-24f97e32fa47",
"identity_provider_display_name": "University of Chicago"
}
},
"publisher": {
"package": "some_python_package",
"version": "0.3.0"
"package": "some_python_package",
"version": "0.3.0"
},
"time": "2022-01-20T00:00:00Z",
"time": "2024-07-04T14:17:35Z",
"schema_version": "1.0.0"
}
}
Expand Down
Loading