Source code for contentful_management.entry
from .resource import FieldsResource, PublishResource, ArchiveResource, EnvironmentAwareResource, MetadataResource
from .utils import is_link, is_link_array, snake_case
from .entry_snapshots_proxy import EntrySnapshotsProxy
"""
contentful_management.entry
~~~~~~~~~~~~~~~~~~~~~~~~~~~
This module implements the Entry class.
API reference: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries
:copyright: (c) 2018 by Contentful GmbH.
:license: MIT, see LICENSE for more details.
"""
[docs]class Entry(MetadataResource, FieldsResource, PublishResource, ArchiveResource, EnvironmentAwareResource):
"""
API reference: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries
"""
def __init__(self, *args, **kwargs):
self.__CONTENT_TYPE__ = None
super(Entry, self).__init__(*args, **kwargs)
[docs] def snapshots(self):
"""
Provides access to snapshot management methods for the given entry.
API reference: https://www.contentful.com/developers/docs/references/content-management-api/#/reference/snapshots
:return: :class:`EntrySnapshotsProxy <contentful_management.entry_snapshots_proxy.EntrySnapshotsProxy>` object.
:rtype: contentful.entry_snapshots_proxy.EntrySnapshotsProxy
Usage:
>>> entry_snapshots_proxy = entry.snapshots()
<EntrySnapshotsProxy space_id="cfexampleapi" environment_id="master" entry_id="nyancat">
"""
return EntrySnapshotsProxy(self._client, self.sys['space'].id, self._environment_id, self.sys['id'])
[docs] def update(self, attributes=None):
"""
Updates the entry with attributes.
"""
if attributes is None:
attributes = {}
attributes['content_type_id'] = self.sys['content_type'].id
return super(Entry, self).update(attributes)
def _coerce(self, value):
if is_link(value):
return self._build_link(value)
elif is_link_array(value):
return [self._build_link(link)
for link in value]
return super(Entry, self)._coerce(value)
def _missing_field_raw_id(self, name):
for field in self._content_type().fields:
if field.id == snake_case(name):
return field._real_id()
def _is_missing_field(self, name):
"""
Fields that are voided in the WebApp will be not returned in
API responses, therefore we need to check if they are part of
the content type to determine if they should or should not be
serialized.
"""
return self._missing_field_raw_id(name) is not None
def _content_type(self):
if self.__CONTENT_TYPE__ is None:
self.__CONTENT_TYPE__ = self.sys['content_type'].resolve(self.sys['space'].id, environment_id=self._environment_id)
return self.__CONTENT_TYPE__
def _real_field_id_for(self, field_id):
raw_field_id = super(Entry, self)._real_field_id_for(field_id)
if raw_field_id is None:
return self._missing_field_raw_id(field_id)
return raw_field_id
def __repr__(self):
return "<Entry[{0}] id='{1}'>".format(
self.sys['content_type'].sys.get('id', ''),
self.sys.get('id', '')
)