Serialize components, close #8
This commit is contained in:
parent
fba52b9da6
commit
834d4dc8a1
|
@ -46,6 +46,13 @@ class Component(metaclass=ComponentMetaclass, register=False):
|
|||
def generate(self):
|
||||
pass
|
||||
|
||||
def serialize(self):
|
||||
"""
|
||||
Should return a JSON/YAML/TOML-compatible structure which can be used
|
||||
to export a component to a file.
|
||||
"""
|
||||
return self.__dict__.copy()
|
||||
|
||||
@abstractproperty
|
||||
def combinations(self):
|
||||
"""
|
||||
|
@ -136,6 +143,11 @@ class Reference(Component, key='ref'):
|
|||
raise TypeError('Unresolved reference to {!r}'.format(self.ref))
|
||||
return self.to.generate()
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
'ref': self.ref,
|
||||
}
|
||||
|
||||
|
||||
class Value(Component, key='value'):
|
||||
"""
|
||||
|
@ -157,6 +169,14 @@ class Value(Component, key='value'):
|
|||
if not self.optional or random.randrange(2):
|
||||
return self.value
|
||||
|
||||
def serialize(self):
|
||||
if self.optional:
|
||||
return {
|
||||
'optional': True,
|
||||
'value': self.value,
|
||||
}
|
||||
return self.value
|
||||
|
||||
|
||||
class Include(Component, key='include'):
|
||||
"""
|
||||
|
@ -180,3 +200,9 @@ class Include(Component, key='include'):
|
|||
|
||||
def generate(self):
|
||||
return self.to.generate()
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
'include': self.include,
|
||||
'format': self.format,
|
||||
}
|
||||
|
|
|
@ -32,3 +32,13 @@ class Generator(Component, key='main'):
|
|||
|
||||
def generate(self):
|
||||
return self.main.generate()
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
'version': self.version,
|
||||
'components': {
|
||||
name: component.serialize()
|
||||
for name, component in self.components.items()
|
||||
},
|
||||
'main': self.main.serialize()
|
||||
}
|
||||
|
|
|
@ -82,6 +82,14 @@ class CompoundComponent(Component, register=False):
|
|||
for item in self.items:
|
||||
item.resolve_references(references)
|
||||
|
||||
def serialize(self):
|
||||
data = super().serialize()
|
||||
del data['items']
|
||||
data[self.items_key] = [
|
||||
child.serialize() for child in self.items
|
||||
]
|
||||
return data
|
||||
|
||||
|
||||
class AllOf(CompoundComponent, key='allOf'):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue