diff --git a/contentstack/asset.py b/contentstack/asset.py index 9b48f90..a6cb181 100644 --- a/contentstack/asset.py +++ b/contentstack/asset.py @@ -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 diff --git a/contentstack/assetquery.py b/contentstack/assetquery.py index ecdc34b..093e67e 100644 --- a/contentstack/assetquery.py +++ b/contentstack/assetquery.py @@ -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. diff --git a/contentstack/entry.py b/contentstack/entry.py index 3c20edf..b0bae6b 100644 --- a/contentstack/entry.py +++ b/contentstack/entry.py @@ -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 diff --git a/contentstack/entryqueryable.py b/contentstack/entryqueryable.py index 7426510..be10e81 100644 --- a/contentstack/entryqueryable.py +++ b/contentstack/entryqueryable.py @@ -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.