Source code for contentful_management.content_type_metadata
"""
contentful_management.content_type_metadata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This module implements the ContentTypeMetadata class.
:copyright: (c) 2018 by Contentful GmbH.
:license: MIT, see LICENSE for more details.
"""
[docs]class ContentTypeMetadata(object):
"""
Represents metadata for a content type.
"""
def __init__(self, metadata_data):
self.raw = metadata_data
self.taxonomy = self._hydrate_taxonomy(metadata_data.get('taxonomy', []))
# Add other metadata fields as-is for future extensibility
for key, value in metadata_data.items():
if key != 'taxonomy':
setattr(self, key, value)
def _hydrate_taxonomy(self, taxonomy_data):
"""
Hydrates taxonomy with proper object types.
"""
from .taxonomy_concept import TaxonomyConcept
from .taxonomy_concept_scheme import TaxonomyConceptScheme
taxonomy_objects = []
for taxonomy in taxonomy_data:
link_type = taxonomy.get('sys', {}).get('linkType')
if link_type == 'TaxonomyConcept':
taxonomy_objects.append(TaxonomyConcept(taxonomy))
elif link_type == 'TaxonomyConceptScheme':
taxonomy_objects.append(TaxonomyConceptScheme(taxonomy))
return taxonomy_objects
[docs] def to_json(self):
"""
Returns the JSON representation of the content type metadata.
"""
result = {}
# Handle taxonomy specially
if self.taxonomy:
taxonomy_links = []
for t in self.taxonomy:
taxonomy_link = {
'sys': t.sys
}
# Try to get the required field from raw data if it exists
if hasattr(t, 'raw') and 'required' in t.raw:
taxonomy_link['required'] = t.raw['required']
taxonomy_links.append(taxonomy_link)
result['taxonomy'] = taxonomy_links
# Add other metadata fields
for key, value in self.raw.items():
if key != 'taxonomy':
result[key] = value
return result
def __repr__(self):
return "<ContentTypeMetadata taxonomy_count='{0}'>".format(
len(self.taxonomy) if self.taxonomy else 0
)