Skip to content

Commit

Permalink
AVRO-3796: Use Property Decorator (#2348)
Browse files Browse the repository at this point in the history
  • Loading branch information
kojiromike committed Jul 16, 2023
1 parent 3b6fd80 commit 12d0585
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 32 deletions.
54 changes: 40 additions & 14 deletions lang/py/avro/ipc.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,27 +77,41 @@ def __init__(self, local_protocol, transceiver):
self._send_protocol = None

# read-only properties
local_protocol = property(lambda self: self._local_protocol)
transceiver = property(lambda self: self._transceiver)
@property
def local_protocol(self):
return self._local_protocol

@property
def transceiver(self):
return self._transceiver

# read/write properties
def set_remote_protocol(self, new_remote_protocol):
@property
def remote_protocol(self):
return self._remote_protocol

@remote_protocol.setter
def remote_protocol(self, new_remote_protocol):
self._remote_protocol = new_remote_protocol
REMOTE_PROTOCOLS[self.transceiver.remote_name] = self.remote_protocol

remote_protocol = property(lambda self: self._remote_protocol, set_remote_protocol)
@property
def remote_hash(self):
return self._remote_hash

def set_remote_hash(self, new_remote_hash):
@remote_hash.setter
def remote_hash(self, new_remote_hash):
self._remote_hash = new_remote_hash
REMOTE_HASHES[self.transceiver.remote_name] = self.remote_hash

remote_hash = property(lambda self: self._remote_hash, set_remote_hash)
@property
def send_protocol(self):
return self._send_protocol

def set_send_protocol(self, new_send_protocol):
@send_protocol.setter
def send_protocol(self, new_send_protocol):
self._send_protocol = new_send_protocol

send_protocol = property(lambda self: self._send_protocol, set_send_protocol)

def request(self, message_name, request_datum):
"""
Writes a request message and reads a response or error message.
Expand Down Expand Up @@ -236,9 +250,17 @@ def __init__(self, local_protocol):
self.set_protocol_cache(self.local_hash, self.local_protocol)

# read-only properties
local_protocol = property(lambda self: self._local_protocol)
local_hash = property(lambda self: self._local_hash)
protocol_cache = property(lambda self: self._protocol_cache)
@property
def local_protocol(self):
return self._local_protocol

@property
def local_hash(self):
return self._local_hash

@property
def protocol_cache(self):
return self._protocol_cache

# utility functions to manipulate protocol cache
def get_protocol_cache(self, hash):
Expand Down Expand Up @@ -371,7 +393,9 @@ def __init__(self, reader):
self._reader = reader

# read-only properties
reader = property(lambda self: self._reader)
@property
def reader(self):
return self._reader

def read_framed_message(self):
message = []
Expand Down Expand Up @@ -401,7 +425,9 @@ def __init__(self, writer):
self._writer = writer

# read-only properties
writer = property(lambda self: self._writer)
@property
def writer(self):
return self._writer

def write_framed_message(self, message):
message_length = len(message)
Expand Down
80 changes: 62 additions & 18 deletions lang/py/avro/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,17 @@ def name_ref(self, names):
return self.name if self.namespace == names.default_namespace else self.fullname

# read-only properties
name = property(lambda self: self.get_prop("name"))
namespace = property(lambda self: self.get_prop("namespace"))
fullname = property(lambda self: self._fullname)
@property
def name(self):
return self.get_prop("name")

@property
def namespace(self):
return self.get_prop("namespace")

@property
def fullname(self):
return self._fullname


#
Expand Down Expand Up @@ -347,10 +355,21 @@ def __init__(self, type_, name, has_default, default=None, order=None, names=Non
self.set_prop("doc", doc)

# read-only properties
default = property(lambda self: self.get_prop("default"))
has_default = property(lambda self: self._has_default)
order = property(lambda self: self.get_prop("order"))
doc = property(lambda self: self.get_prop("doc"))
@property
def default(self):
return self.get_prop("default")

@property
def has_default(self):
return self._has_default

@property
def order(self):
return self.get_prop("order")

@property
def doc(self):
return self.get_prop("doc")

def __str__(self):
return json.dumps(self.to_json())
Expand Down Expand Up @@ -449,8 +468,13 @@ def __init__(self, precision, scale=0, other_props=None):
self.set_prop("scale", scale)

# read-only properties
precision = property(lambda self: self.get_prop("precision"))
scale = property(lambda self: self.get_prop("scale"))
@property
def precision(self):
return self.get_prop("precision")

@property
def scale(self):
return self.get_prop("scale")

def to_json(self, names=None):
return self.props
Expand All @@ -477,7 +501,9 @@ def __init__(self, name, namespace, size, names=None, other_props=None, validate
self.set_prop("size", size)

# read-only properties
size = property(lambda self: self.get_prop("size"))
@property
def size(self):
return self.get_prop("size")

def match(self, writer):
"""Return True if the current schema (as reader) matches the writer schema.
Expand Down Expand Up @@ -531,8 +557,13 @@ def __init__(
self.set_prop("scale", scale)

# read-only properties
precision = property(lambda self: self.get_prop("precision"))
scale = property(lambda self: self.get_prop("scale"))
@property
def precision(self):
return self.get_prop("precision")

@property
def scale(self):
return self.get_prop("scale")

def to_json(self, names=None):
return self.props
Expand Down Expand Up @@ -587,7 +618,9 @@ def symbols(self) -> Sequence[str]:
return symbols
raise Exception

doc = property(lambda self: self.get_prop("doc"))
@property
def doc(self):
return self.get_prop("doc")

def match(self, writer):
"""Return True if the current schema (as reader) matches the writer schema.
Expand Down Expand Up @@ -645,7 +678,9 @@ def __init__(self, items, names=None, other_props=None, validate_names: bool = T
self.set_prop("items", items_schema)

# read-only properties
items = property(lambda self: self.get_prop("items"))
@property
def items(self):
return self.get_prop("items")

def match(self, writer):
"""Return True if the current schema (as reader) matches the writer schema.
Expand Down Expand Up @@ -697,7 +732,9 @@ def __init__(self, values, names=None, other_props=None, validate_names: bool =
self.set_prop("values", values_schema)

# read-only properties
values = property(lambda self: self.get_prop("values"))
@property
def values(self):
return self.get_prop("values")

def match(self, writer):
"""Return True if the current schema (as reader) matches the writer schema.
Expand Down Expand Up @@ -766,7 +803,9 @@ def __init__(self, schemas, names=None, validate_names: bool = True):
self._schemas = schema_objects

# read-only properties
schemas = property(lambda self: self._schemas)
@property
def schemas(self):
return self._schemas

def match(self, writer):
"""Return True if the current schema (as reader) matches the writer schema.
Expand Down Expand Up @@ -890,8 +929,13 @@ def __init__(
names.default_namespace = old_default

# read-only properties
fields = property(lambda self: self.get_prop("fields"))
doc = property(lambda self: self.get_prop("doc"))
@property
def fields(self):
return self.get_prop("fields")

@property
def doc(self):
return self.get_prop("doc")

@property
def fields_dict(self):
Expand Down

0 comments on commit 12d0585

Please sign in to comment.