diff --git a/glare/objects/base.py b/glare/objects/base.py index 375be09..73aa7fd 100644 --- a/glare/objects/base.py +++ b/glare/objects/base.py @@ -744,6 +744,8 @@ Possible values: schema['required_on_activate'] = False if field._default is not None: schema['default'] = field._default + if field.metadata is not None: + schema['metadata'] = field.metadata schema['filter_ops'] = field.filter_ops diff --git a/glare/objects/meta/wrappers.py b/glare/objects/meta/wrappers.py index 0069d1a..8d9ce5d 100644 --- a/glare/objects/meta/wrappers.py +++ b/glare/objects/meta/wrappers.py @@ -32,7 +32,8 @@ DEFAULT_MAX_FOLDER_SIZE = 2673868800 # 2550 Megabytes class Field(object): def __init__(self, field_class, mutable=False, required_on_activate=True, system=False, validators=None, nullable=True, default=None, - sortable=False, filter_ops=None, description=""): + sortable=False, filter_ops=None, description="", + metadata=None): """Init and validate field. Each artifact field has several common properties: @@ -82,6 +83,7 @@ class Field(object): self.required_on_activate = required_on_activate self.system = system self.sortable = sortable + self.metadata = metadata try: default_ops = self.get_default_filter_ops(self.element_type) @@ -101,7 +103,8 @@ class Field(object): self.filter_ops = filter_ops self.field_props = ['mutable', 'required_on_activate', 'system', - 'sortable', 'filter_ops', 'description'] + 'sortable', 'filter_ops', 'description', + 'metadata'] self.description = description @staticmethod diff --git a/glare/tests/functional/test_schemas.py b/glare/tests/functional/test_schemas.py index 2862905..d427437 100644 --- a/glare/tests/functional/test_schemas.py +++ b/glare/tests/functional/test_schemas.py @@ -483,7 +483,15 @@ fixtures = { u'readOnly': True, u'sortable': True, u'type': [u'string', - u'null']} + u'null']}, + u'metadata_attribute': {u'default': u'default', + u'filter_ops': [u'eq', u'neq', u'in'], + u'glareType': u'String', + u'maxLength': 255, + u'metadata': { + u'metadata1': u'value1', + u'metadata2': u'blahblahblah'}, + u'type': [u'string', u'null']}, }), u'required': [u'name'], u'title': u'Artifact type sample_artifact of version 1.0', diff --git a/glare/tests/sample_artifact.py b/glare/tests/sample_artifact.py index c3df5df..5ec638e 100644 --- a/glare/tests/sample_artifact.py +++ b/glare/tests/sample_artifact.py @@ -135,7 +135,10 @@ class SampleArtifact(base_artifact.BaseArtifact): max_size=3), 'system_attribute': Field(fields.StringField, system=True, sortable=True, - default="default") + default="default"), + 'metadata_attribute': Field(fields.StringField, default="default", + metadata={"metadata1": "value1", + "metadata2": "blahblahblah"}) } @classmethod