@@ -51,6 +51,7 @@ from pyatlan.model.structs import (
51
51
PopularityInsights,
52
52
)
53
53
from pyatlan.utils import next_id
54
+ from urllib.parse import quote, unquote
54
55
55
56
def validate_single_required_field(field_names: list[str], values: list[Any]):
56
57
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
231
232
232
233
ba_id = CustomMetadataCache.get_id_for_name(name)
233
234
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")
235
236
for a_type in CustomMetadataCache.types_by_asset[self.type_name]:
236
237
if (
237
238
hasattr(a_type, "_meta_data_type_name")
@@ -343,15 +344,29 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
343
344
{% - if entity_def .name == "Readme" %}
344
345
@classmethod
345
346
# @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:
347
350
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
352
367
)
353
368
{% - endif %}
354
- {% - if entity_def .attribute_defs %}
369
+ {% - if entity_def .attribute_defs or entity_def . relationship_attribute_defs %}
355
370
class Attributes({{super_classes[0] }}.Attributes):
356
371
{% - for attribute_def in entity_def .attribute_defs %}
357
372
{% - set type = attribute_def .typeName | get_type %}
@@ -424,6 +439,30 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
424
439
raise ValueError(
425
440
"One of admin_user, admin_groups or admin_roles is required"
426
441
)
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
+ )
427
466
{% - elif entity_def .name == "Database" %}
428
467
@classmethod
429
468
# @validate_arguments()
0 commit comments