@@ -51,6 +51,7 @@ from pyatlan.model.structs import (
5151 PopularityInsights,
5252)
5353from pyatlan.utils import next_id
54+ from urllib.parse import quote, unquote
5455
5556def validate_single_required_field(field_names: list[str], values: list[Any]):
5657 indexes = [idx for idx, value in enumerate(values) if value is not None]
@@ -231,7 +232,7 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
231232
232233 ba_id = CustomMetadataCache.get_id_for_name(name)
233234 if ba_id is None:
234- raise ValueError(f"No business attributes with the name: {name} exist")
235+ raise ValueError(f"No custom metadata with the name: {name} exist")
235236 for a_type in CustomMetadataCache.types_by_asset[self.type_name]:
236237 if (
237238 hasattr(a_type, "_meta_data_type_name")
@@ -343,15 +344,29 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
343344 {% - if entity_def .name == "Readme" %}
344345 @classmethod
345346 # @validate_arguments()
346- def create(cls, asset: Asset) -> Readme:
347+ def create(
348+ cls, *, asset: Asset, content: str, asset_name: Optional[str] = None
349+ ) -> Readme:
347350 return Readme(
348- attributes=Readme.Attributes(
349- qualified_name=f"{asset.guid}/readme",
350- name=f"{asset.attributes.name} Readme",
351- ),
351+ attributes=Readme.Attributes.create(
352+ asset=asset, content=content, asset_name=asset_name
353+ )
354+ )
355+
356+ @property
357+ def description(self) -> Optional[str]:
358+ ret_value = self.attributes.description
359+ return unquote(ret_value) if ret_value is not None else ret_value
360+
361+ @description.setter
362+ def description(self, description: Optional[str]):
363+ if self.attributes is None:
364+ self.attributes = self.Attributes()
365+ self.attributes.description = (
366+ quote(description) if description is not None else description
352367 )
353368 {% - endif %}
354- {% - if entity_def .attribute_defs %}
369+ {% - if entity_def .attribute_defs or entity_def . relationship_attribute_defs %}
355370 class Attributes({{super_classes[0] }}.Attributes):
356371 {% - for attribute_def in entity_def .attribute_defs %}
357372 {% - set type = attribute_def .typeName | get_type %}
@@ -424,6 +439,30 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
424439 raise ValueError(
425440 "One of admin_user, admin_groups or admin_roles is required"
426441 )
442+ {% - elif entity_def .name == "Readme" %}
443+ @classmethod
444+ # @validate_arguments()
445+ def create(
446+ cls, *, asset: Asset, content: str, asset_name: Optional[str] = None
447+ ) -> Readme.Attributes:
448+ validate_required_fields(["asset", "content"], [asset, content])
449+ if not asset.name:
450+ if not asset_name:
451+ raise ValueError(
452+ "asset_name is required when name is not available from asset"
453+ )
454+ elif asset_name:
455+ raise ValueError(
456+ "asset_name can not be given when name is available from asset"
457+ )
458+ else:
459+ asset_name = asset.name
460+ return Readme.Attributes(
461+ qualified_name=f"{asset.guid}/readme",
462+ name=f"{asset_name} Readme",
463+ asset=asset,
464+ description=quote(content),
465+ )
427466 {% - elif entity_def .name == "Database" %}
428467 @classmethod
429468 # @validate_arguments()
0 commit comments