Skip to content

Commit 768c449

Browse files
kaya-davidkmeinerz
andauthored
Dev eventmetadata class implementation (#823)
* add new namespac (ng package) for new architecture implementations * update changelog * add abstract event metadata class * implement concrete kafka metaclass * add unittests for kafka metaclass * update CHANGELOG.md * temporarily disable pylint warning for abstract EventMetadata class * refactor: fix some typos ind docs * refactor: fix doc * Update CHANGELOG.md Co-authored-by: kmeinerz <meinerzkai@gmail.com> * Update CHANGELOG.md Co-authored-by: kmeinerz <meinerzkai@gmail.com> * remove unnecessary tests --------- Co-authored-by: kmeinerz <meinerzkai@gmail.com>
1 parent 14a2045 commit 768c449

File tree

7 files changed

+63
-0
lines changed

7 files changed

+63
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
### Breaking
55

66
### Features
7+
78
### Improvements
9+
* add ng packages as namespace in dirs 'unit' and 'logprep' as preparation for new architecture implementation
10+
* add abstract EventMetadata class and KafkaInputMetadata class
11+
812
### Bugfix
913

1014
## 17.0.0

logprep/ng/__init__.py

Whitespace-only changes.

logprep/ng/abc/event_metadata.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# pylint: disable=too-few-public-methods
2+
# -> deactivate temporarily pylint issue here
3+
4+
"""abstract module for event related datatypes"""
5+
6+
from abc import ABC
7+
8+
9+
class EventMetadata(ABC):
10+
"""Abstract EventMetadata Class to define the Interface"""

logprep/ng/inputs/__init__.py

Whitespace-only changes.

logprep/ng/inputs/kafka_input.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""kafka input classes and logic"""
2+
3+
import attrs
4+
5+
from logprep.ng.abc.event_metadata import EventMetadata
6+
7+
8+
@attrs.define(slots=True, kw_only=True)
9+
class KafkaInputMetadata(EventMetadata):
10+
"""Concrete EventMetadata holding Kafka input metadata."""
11+
12+
partition: int = attrs.field(validator=attrs.validators.instance_of(int))
13+
offset: int = attrs.field(validator=attrs.validators.instance_of(int))

tests/unit/ng/__init__.py

Whitespace-only changes.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# pylint: disable=missing-docstring
2+
# pylint: disable=attribute-defined-outside-init
3+
4+
import pytest
5+
6+
from logprep.ng.abc.event_metadata import EventMetadata
7+
from logprep.ng.inputs.kafka_input import KafkaInputMetadata
8+
9+
10+
class TestKafkaInputMetadata:
11+
def test_inherits_event_metadata(self):
12+
meta = KafkaInputMetadata(partition=1, offset=0)
13+
assert isinstance(meta, EventMetadata)
14+
15+
def test_valid_instantiation(self):
16+
meta = KafkaInputMetadata(partition=3, offset=100)
17+
assert meta.partition == 3
18+
assert meta.offset == 100
19+
20+
@pytest.mark.parametrize("invalid_partition", ["0", None, 1.5, [], {}])
21+
def test_invalid_partition_type_raises(self, invalid_partition):
22+
with pytest.raises(TypeError):
23+
KafkaInputMetadata(partition=invalid_partition, offset=10)
24+
25+
@pytest.mark.parametrize("invalid_offset", ["0", None, 1.5, [], {}])
26+
def test_invalid_offset_type_raises(self, invalid_offset):
27+
with pytest.raises(TypeError):
28+
KafkaInputMetadata(partition=1, offset=invalid_offset)
29+
30+
def test_slots_are_used(self):
31+
assert hasattr(KafkaInputMetadata, "__slots__")
32+
33+
def test_accessing_unknown_attribute_raises(self):
34+
meta = KafkaInputMetadata(partition=1, offset=2)
35+
with pytest.raises(AttributeError):
36+
getattr(meta, "topic")

0 commit comments

Comments
 (0)