dgkafka 1.0.0a6__tar.gz → 1.0.0a8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgkafka
3
- Version: 1.0.0a6
3
+ Version: 1.0.0a8
4
4
  Summary: Kafka clients
5
5
  Home-page: https://gitlab.com/gng-group/dgkafka.git
6
6
  Author: Malanris
@@ -0,0 +1,82 @@
1
+ from typing import Dict, Any, Optional, Literal
2
+ from pydantic import BaseModel, Field, ConfigDict
3
+ from enum import Enum
4
+
5
+ class SecurityProtocol(str, Enum):
6
+ PLAINTEXT = "PLAINTEXT"
7
+ SSL = "SSL"
8
+ SASL_PLAINTEXT = "SASL_PLAINTEXT"
9
+ SASL_SSL = "SASL_SSL"
10
+
11
+ class KafkaConfig(BaseModel):
12
+ """Base configuration for all Kafka clients"""
13
+ bootstrap_servers: str = Field(..., alias="bootstrap.servers")
14
+ security_protocol: Literal["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"] = Field(default="SSL",
15
+ alias="security.protocol")
16
+ ssl_ca_location: Optional[str] = Field(default=None, alias="ssl.ca.location")
17
+ ssl_certificate_location: Optional[str] = Field(default=None, alias="ssl.certificate.location")
18
+ ssl_key_location: Optional[str] = Field(default=None, alias="ssl.key.location")
19
+ ssl_endpoint_identification_algorithm: Optional[str] = Field(default=None,
20
+ alias="ssl.endpoint.identification.algorithm")
21
+
22
+ model_config = ConfigDict(
23
+ populate_by_name=True,
24
+ extra="forbid",
25
+ protected_namespaces=()
26
+ )
27
+
28
+ def get(self) -> Dict[str, Any]:
29
+ """Get config in format suitable for confluent_kafka"""
30
+ return self.model_dump(by_alias=True, exclude_none=True)
31
+
32
+ @classmethod
33
+ def set(cls, config_dict: Dict[str, Any]) -> "KafkaConfig":
34
+ """Create config from dictionary"""
35
+ return cls(**config_dict)
36
+
37
+ class ConsumerConfig(KafkaConfig):
38
+ """Base consumer configuration"""
39
+ group_id: str = Field(..., alias="group.id")
40
+ enable_auto_commit: bool = Field(default=False, alias="enable.auto.commit")
41
+ auto_offset_reset: Literal["earliest", "latest"] = Field(
42
+ default="earliest", alias="auto.offset.reset")
43
+ session_timeout_ms: int = Field(default=10000, alias="session.timeout.ms")
44
+ max_poll_interval_ms: int = Field(default=300000, alias="max.poll.interval.ms")
45
+
46
+ class ProducerConfig(KafkaConfig):
47
+ """Base producer configuration"""
48
+ acks: Literal["all", "0", "1"] = Field(default="all")
49
+ retries: int = Field(default=0)
50
+ compression_type: str = Field(default="none", alias="compression.type")
51
+ batch_size: int = Field(default=16384, alias="batch.size")
52
+ linger_ms: int = Field(default=0, alias="linger.ms")
53
+
54
+
55
+ class AvroConfigMixin:
56
+ schema_registry_url: str = Field(..., alias="schema.registry.url")
57
+ schema_registry_ssl_ca_location: Optional[str] = Field(
58
+ default=None, alias="schema.registry.ssl.ca.location")
59
+ schema_registry_basic_auth_user_info: Optional[str] = Field(
60
+ default=None, alias="basic.auth.user.info")
61
+
62
+
63
+ class AvroConsumerConfig(ConsumerConfig, AvroConfigMixin):
64
+ """Avro consumer configuration with Schema Registry support"""
65
+
66
+ @classmethod
67
+ def set(cls, config_dict: Dict[str, Any]) -> "AvroConsumerConfig":
68
+ """Create from dictionary with Schema Registry validation"""
69
+ if "schema.registry.url" not in config_dict:
70
+ raise ValueError("schema.registry.url is required for AvroConsumer")
71
+ return cls(**config_dict)
72
+
73
+ class AvroProducerConfig(ProducerConfig, AvroConfigMixin):
74
+ """Avro producer configuration with Schema Registry support"""
75
+ max_schemas_per_subject: int = Field(default=1000, alias="max.schemas.per.subject")
76
+
77
+ @classmethod
78
+ def set(cls, config_dict: Dict[str, Any]) -> "AvroProducerConfig":
79
+ """Create from dictionary with Schema Registry validation"""
80
+ if "schema.registry.url" not in config_dict:
81
+ raise ValueError("schema.registry.url is required for AvroProducer")
82
+ return cls(**config_dict)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgkafka
3
- Version: 1.0.0a6
3
+ Version: 1.0.0a8
4
4
  Summary: Kafka clients
5
5
  Home-page: https://gitlab.com/gng-group/dgkafka.git
6
6
  Author: Malanris
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dgkafka"
7
- version = "1.0.0a6"
7
+ version = "1.0.0a8"
8
8
  authors = [
9
9
  {name = "Roman Rasputin", email = "admin@roro.su"},
10
10
  ]
@@ -1,92 +0,0 @@
1
- from typing import Literal, Optional
2
- from pydantic import BaseModel, Field, validator
3
- from enum import Enum
4
-
5
-
6
- class SecurityProtocol(str, Enum):
7
- PLAINTEXT = "PLAINTEXT"
8
- SSL = "SSL"
9
- SASL_PLAINTEXT = "SASL_PLAINTEXT"
10
- SASL_SSL = "SASL_SSL"
11
-
12
-
13
- class KafkaConfig(BaseModel):
14
- """Base configuration for all Kafka clients"""
15
- bootstrap_servers: str = Field(..., alias="bootstrap.servers",
16
- description="Comma-separated list of broker addresses")
17
- security_protocol: SecurityProtocol = Field(default=SecurityProtocol.SSL,
18
- alias="security.protocol")
19
- ssl_cafile: Optional[str] = Field(default=None, alias="ssl.ca.location")
20
- ssl_certfile: Optional[str] = Field(default=None, alias="ssl.certificate.location")
21
- ssl_keyfile: Optional[str] = Field(default=None, alias="ssl.key.location")
22
- ssl_check_hostname: bool = Field(default=True, alias="enable.ssl.certificate.verification")
23
- ssl_password: Optional[str] = Field(default=None, alias="ssl.key.password")
24
-
25
- def get(self) -> dict[str, Json]:
26
- return self.model_dump(by_alias=True)
27
-
28
- class Config:
29
- validate_by_name = True
30
- use_enum_values = True
31
- extra = "forbid"
32
-
33
-
34
- class ConsumerConfig(KafkaConfig):
35
- """Configuration for basic Kafka consumer"""
36
- group_id: str = Field(..., alias="group.id")
37
- enable_auto_commit: bool = Field(default=False, alias="enable.auto.commit")
38
- auto_offset_reset: Literal["earliest", "latest"] = Field(default="latest",
39
- alias="auto.offset.reset")
40
- session_timeout_ms: int = Field(default=10000, alias="session.timeout.ms")
41
- max_poll_interval_ms: int = Field(default=300000, alias="max.poll.interval.ms")
42
- fetch_max_bytes: int = Field(default=52428800, alias="fetch.max.bytes")
43
-
44
-
45
- class ProducerConfig(KafkaConfig):
46
- """Configuration for basic Kafka producer"""
47
- acks: Literal["all", "0", "1"] = Field(default="all")
48
- retries: int = Field(default=0)
49
- linger_ms: int = Field(default=0, alias="linger.ms")
50
- compression_type: Literal["none", "gzip", "snappy", "lz4", "zstd"] = Field(
51
- default="none", alias="compression.type")
52
- batch_size: int = Field(default=16384, alias="batch.size")
53
- max_in_flight: int = Field(default=1000000, alias="max.in.flight.requests.per.connection")
54
-
55
-
56
- class AvroConsumerConfig(ConsumerConfig):
57
- """Configuration for Avro consumer with Schema Registry"""
58
- schema_registry_url: str = Field(..., alias="schema.registry.url")
59
- schema_registry_ssl_cafile: Optional[str] = Field(default=None,
60
- alias="schema.registry.ssl.ca.location")
61
- schema_registry_basic_auth_user_info: Optional[str] = Field(default=None,
62
- alias="schema.registry.basic.auth.user.info")
63
- specific_avro_reader: bool = Field(default=False, alias="specific.avro.reader")
64
-
65
-
66
- class AvroProducerConfig(ProducerConfig):
67
- """Configuration for Avro producer with Schema Registry"""
68
- schema_registry_url: str = Field(..., alias="schema.registry.url")
69
- schema_registry_ssl_cafile: Optional[str] = Field(default=None,
70
- alias="schema.registry.ssl.ca.location")
71
- schema_registry_basic_auth_user_info: Optional[str] = Field(default=None,
72
- alias="schema.registry.basic.auth.user.info")
73
- max_schemas_per_subject: int = Field(default=1000, alias="max.schemas.per.subject")
74
-
75
-
76
- class JsonConsumerConfig(ConsumerConfig):
77
- """Configuration for JSON consumer"""
78
- json_deserializer: Optional[str] = None # Custom deserializer function
79
- encoding: str = Field(default="utf-8")
80
-
81
-
82
- class JsonProducerConfig(ProducerConfig):
83
- """Configuration for JSON producer"""
84
- json_serializer: Optional[str] = None # Custom serializer function
85
- encoding: str = Field(default="utf-8")
86
-
87
- @classmethod
88
- @validator("compression_type")
89
- def validate_compression(cls, v):
90
- if v not in ["none", "gzip", "snappy", "lz4", "zstd"]:
91
- raise ValueError("Unsupported compression type")
92
- return v
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes