Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions contentstack/asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,35 @@ def include_fallback(self):
self.asset_params['include_fallback'] = "true"
return self

def asset_fields(self, *field_names):
r"""Include specific asset fields in the response.
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
Pass one or more field names. Can be called multiple times to add more fields.

:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
:return: `Asset`, so we can chain the call
----------------------------
Example::
>>> import contentstack
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
>>> asset = stack.asset(uid='asset_uid')
>>> result = asset.asset_fields('user_defined_fields', 'visual_markups').fetch()
----------------------------
"""
if field_names:
values = []
for name in field_names:
if isinstance(name, (list, tuple)):
values.extend(str(v) for v in name)
else:
values.append(str(name))
if values:
existing = self.asset_params.get('asset_fields[]', [])
if not isinstance(existing, list):
existing = [existing]
self.asset_params['asset_fields[]'] = existing + values
return self

def fetch(self):
r"""This call fetches the latest version of a specific asset of a particular stack.
:return: json response of asset
Expand Down
30 changes: 30 additions & 0 deletions contentstack/assetquery.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,36 @@ def locale(self, locale: str):
self.asset_query_params['locale'] = locale
return self

def asset_fields(self, *field_names):
r"""Include specific asset fields in the response.
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
Pass one or more field names. Can be called multiple times to add more fields.

:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
:return: AssetQuery: so we can chain the call

-----------------------------
[Example]:

>>> import contentstack
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
>>> result = stack.asset_query().asset_fields('user_defined_fields', 'visual_markups').find()
------------------------------
"""
if field_names:
values = []
for name in field_names:
if isinstance(name, (list, tuple)):
values.extend(str(v) for v in name)
else:
values.append(str(name))
if values:
existing = self.asset_query_params.get('asset_fields[]', [])
if not isinstance(existing, list):
existing = [existing]
self.asset_query_params['asset_fields[]'] = existing + values
return self

def find(self):
r"""This call fetches the list of all the assets of a particular stack.
It also returns the content of each asset in JSON format.
Expand Down
20 changes: 20 additions & 0 deletions contentstack/entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,26 @@ def include_embedded_items(self):
self.entry_param['include_embedded_items[]'] = "BASE"
return self

def asset_fields(self, *field_names):
"""Include specific asset fields in the response.
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
Pass one or more field names. Can be called multiple times to add more fields.

:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
:return: Entry, so we can chain the call
----------------------------
Example::

>>> import contentstack
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
>>> content_type = stack.content_type('content_type_uid')
>>> entry = content_type.entry(uid='entry_uid')
>>> entry = entry.asset_fields('user_defined_fields', 'visual_markups')
>>> result = entry.fetch()
----------------------------
"""
return super().asset_fields(*field_names)

def __get_base_url(self, endpoint=''):
if endpoint is not None and endpoint.strip(): # .strip() removes leading/trailing whitespace
self.http_instance.endpoint = endpoint
Expand Down
39 changes: 39 additions & 0 deletions contentstack/entryqueryable.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,45 @@ def include_metadata(self):
self.entry_queryable_param['include_metadata'] = 'true'
return self

def asset_fields(self, *field_names):
"""
Include specific asset fields in the response.
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
Pass one or more field names. Can be called multiple times to add more fields.

:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
:return: self: so you can chain this call.

Example (Query):
>>> import contentstack
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
>>> content_type = stack.content_type('content_type_uid')
>>> query = content_type.query()
>>> query = query.asset_fields('user_defined_fields', 'visual_markups')
>>> result = query.find()

Example (Entry):
>>> import contentstack
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
>>> content_type = stack.content_type('content_type_uid')
>>> entry = content_type.entry('entry_uid')
>>> entry = entry.asset_fields('user_defined_fields', 'visual_markups')
>>> result = entry.fetch()
"""
if field_names:
values = []
for name in field_names:
if isinstance(name, (list, tuple)):
values.extend(str(v) for v in name)
else:
values.append(str(name))
if values:
existing = self.entry_queryable_param.get('asset_fields[]', [])
if not isinstance(existing, list):
existing = [existing]
self.entry_queryable_param['asset_fields[]'] = existing + values
return self

def add_param(self, key: str, value: str):
"""
This method adds key and value to an Entry.
Expand Down
Loading