Skip to content

Commit 398ad03

Browse files
Merge pull request #187 from contentstack/enh/dx-4422-dam2.0
Added asset_fields() for DAM 2.0 support
2 parents f28d591 + a53c98c commit 398ad03

File tree

4 files changed

+118
-0
lines changed

4 files changed

+118
-0
lines changed

contentstack/asset.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,35 @@ def include_fallback(self):
118118
self.asset_params['include_fallback'] = "true"
119119
return self
120120

121+
def asset_fields(self, *field_names):
122+
r"""Include specific asset fields in the response.
123+
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
124+
Pass one or more field names. Can be called multiple times to add more fields.
125+
126+
:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
127+
:return: `Asset`, so we can chain the call
128+
----------------------------
129+
Example::
130+
>>> import contentstack
131+
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
132+
>>> asset = stack.asset(uid='asset_uid')
133+
>>> result = asset.asset_fields('user_defined_fields', 'visual_markups').fetch()
134+
----------------------------
135+
"""
136+
if field_names:
137+
values = []
138+
for name in field_names:
139+
if isinstance(name, (list, tuple)):
140+
values.extend(str(v) for v in name)
141+
else:
142+
values.append(str(name))
143+
if values:
144+
existing = self.asset_params.get('asset_fields[]', [])
145+
if not isinstance(existing, list):
146+
existing = [existing]
147+
self.asset_params['asset_fields[]'] = existing + values
148+
return self
149+
121150
def fetch(self):
122151
r"""This call fetches the latest version of a specific asset of a particular stack.
123152
:return: json response of asset

contentstack/assetquery.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,36 @@ def locale(self, locale: str):
157157
self.asset_query_params['locale'] = locale
158158
return self
159159

160+
def asset_fields(self, *field_names):
161+
r"""Include specific asset fields in the response.
162+
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
163+
Pass one or more field names. Can be called multiple times to add more fields.
164+
165+
:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
166+
:return: AssetQuery: so we can chain the call
167+
168+
-----------------------------
169+
[Example]:
170+
171+
>>> import contentstack
172+
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
173+
>>> result = stack.asset_query().asset_fields('user_defined_fields', 'visual_markups').find()
174+
------------------------------
175+
"""
176+
if field_names:
177+
values = []
178+
for name in field_names:
179+
if isinstance(name, (list, tuple)):
180+
values.extend(str(v) for v in name)
181+
else:
182+
values.append(str(name))
183+
if values:
184+
existing = self.asset_query_params.get('asset_fields[]', [])
185+
if not isinstance(existing, list):
186+
existing = [existing]
187+
self.asset_query_params['asset_fields[]'] = existing + values
188+
return self
189+
160190
def find(self):
161191
r"""This call fetches the list of all the assets of a particular stack.
162192
It also returns the content of each asset in JSON format.

contentstack/entry.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,26 @@ def include_embedded_items(self):
176176
self.entry_param['include_embedded_items[]'] = "BASE"
177177
return self
178178

179+
def asset_fields(self, *field_names):
180+
"""Include specific asset fields in the response.
181+
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
182+
Pass one or more field names. Can be called multiple times to add more fields.
183+
184+
:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
185+
:return: Entry, so we can chain the call
186+
----------------------------
187+
Example::
188+
189+
>>> import contentstack
190+
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
191+
>>> content_type = stack.content_type('content_type_uid')
192+
>>> entry = content_type.entry(uid='entry_uid')
193+
>>> entry = entry.asset_fields('user_defined_fields', 'visual_markups')
194+
>>> result = entry.fetch()
195+
----------------------------
196+
"""
197+
return super().asset_fields(*field_names)
198+
179199
def __get_base_url(self, endpoint=''):
180200
if endpoint is not None and endpoint.strip(): # .strip() removes leading/trailing whitespace
181201
self.http_instance.endpoint = endpoint

contentstack/entryqueryable.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,45 @@ def include_metadata(self):
167167
self.entry_queryable_param['include_metadata'] = 'true'
168168
return self
169169

170+
def asset_fields(self, *field_names):
171+
"""
172+
Include specific asset fields in the response.
173+
Supported values: user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups.
174+
Pass one or more field names. Can be called multiple times to add more fields.
175+
176+
:param field_names: One or more asset field names (user_defined_fields, embedded_metadata, ai_generated_metadata, visual_markups)
177+
:return: self: so you can chain this call.
178+
179+
Example (Query):
180+
>>> import contentstack
181+
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
182+
>>> content_type = stack.content_type('content_type_uid')
183+
>>> query = content_type.query()
184+
>>> query = query.asset_fields('user_defined_fields', 'visual_markups')
185+
>>> result = query.find()
186+
187+
Example (Entry):
188+
>>> import contentstack
189+
>>> stack = contentstack.Stack('api_key', 'delivery_token', 'environment')
190+
>>> content_type = stack.content_type('content_type_uid')
191+
>>> entry = content_type.entry('entry_uid')
192+
>>> entry = entry.asset_fields('user_defined_fields', 'visual_markups')
193+
>>> result = entry.fetch()
194+
"""
195+
if field_names:
196+
values = []
197+
for name in field_names:
198+
if isinstance(name, (list, tuple)):
199+
values.extend(str(v) for v in name)
200+
else:
201+
values.append(str(name))
202+
if values:
203+
existing = self.entry_queryable_param.get('asset_fields[]', [])
204+
if not isinstance(existing, list):
205+
existing = [existing]
206+
self.entry_queryable_param['asset_fields[]'] = existing + values
207+
return self
208+
170209
def add_param(self, key: str, value: str):
171210
"""
172211
This method adds key and value to an Entry.

0 commit comments

Comments
 (0)