2e reviewed manuscript
This commit is contained in:
@@ -54,12 +54,15 @@ class FrozenJSON:
|
||||
except AttributeError:
|
||||
return FrozenJSON.build(self.__data[name]) # <4>
|
||||
|
||||
def __dir__(self): # <5>
|
||||
return self.__data.keys()
|
||||
|
||||
@classmethod
|
||||
def build(cls, obj): # <5>
|
||||
if isinstance(obj, abc.Mapping): # <6>
|
||||
def build(cls, obj): # <6>
|
||||
if isinstance(obj, abc.Mapping): # <7>
|
||||
return cls(obj)
|
||||
elif isinstance(obj, abc.MutableSequence): # <7>
|
||||
elif isinstance(obj, abc.MutableSequence): # <8>
|
||||
return [cls.build(item) for item in obj]
|
||||
else: # <8>
|
||||
else: # <9>
|
||||
return obj
|
||||
# end::EXPLORE0[]
|
||||
|
||||
@@ -62,11 +62,14 @@ class FrozenJSON:
|
||||
# end::EXPLORE1[]
|
||||
|
||||
def __getattr__(self, name):
|
||||
if hasattr(self.__data, name):
|
||||
try:
|
||||
return getattr(self.__data, name)
|
||||
else:
|
||||
except AttributeError:
|
||||
return FrozenJSON.build(self.__data[name])
|
||||
|
||||
def __dir__(self): # <5>
|
||||
return self.__data.keys()
|
||||
|
||||
@classmethod
|
||||
def build(cls, obj):
|
||||
if isinstance(obj, abc.Mapping):
|
||||
|
||||
@@ -47,8 +47,11 @@ class FrozenJSON:
|
||||
self.__data[key] = value
|
||||
|
||||
def __getattr__(self, name):
|
||||
if hasattr(self.__data, name):
|
||||
try:
|
||||
return getattr(self.__data, name)
|
||||
else:
|
||||
except AttributeError:
|
||||
return FrozenJSON(self.__data[name]) # <4>
|
||||
|
||||
def __dir__(self):
|
||||
return self.__data.keys()
|
||||
# end::EXPLORE2[]
|
||||
|
||||
@@ -23,8 +23,7 @@ class Record:
|
||||
self.__dict__.update(kwargs) # <1>
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>' # <2>
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>' # <2>
|
||||
|
||||
def load(path=JSON_PATH):
|
||||
records = {} # <3>
|
||||
|
||||
@@ -29,8 +29,7 @@ class Record:
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>'
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>'
|
||||
|
||||
@staticmethod # <3>
|
||||
def fetch(key):
|
||||
@@ -44,10 +43,9 @@ class Record:
|
||||
class Event(Record): # <1>
|
||||
|
||||
def __repr__(self):
|
||||
if hasattr(self, 'name'): # <2>
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} {self.name!r}>'
|
||||
else:
|
||||
try:
|
||||
return f'<{self.__class__.__name__} {self.name!r}>' # <2>
|
||||
except AttributeError:
|
||||
return super().__repr__()
|
||||
|
||||
@property
|
||||
|
||||
@@ -33,8 +33,7 @@ class Record:
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>'
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>'
|
||||
|
||||
@staticmethod
|
||||
def fetch(key):
|
||||
@@ -46,11 +45,10 @@ class Record:
|
||||
class Event(Record):
|
||||
|
||||
def __repr__(self):
|
||||
if hasattr(self, 'name'): # <3>
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} {self.name!r}>'
|
||||
else:
|
||||
return super().__repr__() # <4>
|
||||
try:
|
||||
return f'<{self.__class__.__name__} {self.name!r}>'
|
||||
except AttributeError:
|
||||
return super().__repr__()
|
||||
|
||||
@property
|
||||
def venue(self):
|
||||
|
||||
@@ -32,8 +32,7 @@ class Record:
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>'
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>'
|
||||
|
||||
@staticmethod
|
||||
def fetch(key):
|
||||
@@ -52,11 +51,10 @@ class Event(Record):
|
||||
# end::SCHEDULE4_INIT[]
|
||||
|
||||
def __repr__(self):
|
||||
if hasattr(self, 'name'):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} {self.name!r}>'
|
||||
else:
|
||||
return super().__repr__() # <4>
|
||||
try:
|
||||
return f'<{self.__class__.__name__} {self.name!r}>'
|
||||
except AttributeError:
|
||||
return super().__repr__()
|
||||
|
||||
@property
|
||||
def venue(self):
|
||||
|
||||
@@ -31,8 +31,7 @@ class Record:
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>'
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>'
|
||||
|
||||
@staticmethod
|
||||
def fetch(key):
|
||||
@@ -44,11 +43,10 @@ class Record:
|
||||
class Event(Record):
|
||||
|
||||
def __repr__(self):
|
||||
if hasattr(self, 'name'):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} {self.name!r}>'
|
||||
else:
|
||||
return super().__repr__() # <4>
|
||||
try:
|
||||
return f'<{self.__class__.__name__} {self.name!r}>'
|
||||
except AttributeError:
|
||||
return super().__repr__()
|
||||
|
||||
@property
|
||||
def venue(self):
|
||||
|
||||
@@ -36,8 +36,7 @@ class Record:
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} serial={self.serial!r}>'
|
||||
return f'<{self.__class__.__name__} serial={self.serial!r}>'
|
||||
|
||||
@staticmethod
|
||||
def fetch(key):
|
||||
@@ -49,10 +48,9 @@ class Record:
|
||||
class Event(Record):
|
||||
|
||||
def __repr__(self):
|
||||
if hasattr(self, 'name'):
|
||||
cls_name = self.__class__.__name__
|
||||
return f'<{cls_name} {self.name!r}>'
|
||||
else:
|
||||
try:
|
||||
return f'<{self.__class__.__name__} {self.name!r}>'
|
||||
except AttributeError:
|
||||
return super().__repr__()
|
||||
|
||||
# tag::SCHEDULE5_CACHED_PROPERTY[]
|
||||
|
||||
Reference in New Issue
Block a user