# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from .util import Specification, is_url, is_email
from . import compat
[docs]class Person(Specification):
"""
Person object which can be added to a DataPackage object, e.g. as
maintainers, contributors or publishers. Person could in theory also
be an organisation but is left here as a Person.
From the specification:
[A] hash which must have a "name" property and may optionally provide
"email" and "web" properties.
"""
SPECIFICATION = {'name': compat.str,
'web': compat.str,
'email': compat.str}
REQUIRED = ('name',)
@property
def name(self):
"""
Name of the person or organisation
"""
return self['name']
@name.setter
[docs] def name(self, value):
if not value:
raise ValueError('A person must have a name')
self['name'] = compat.str(value)
@property
def web(self):
"""
Link to the person's or organisation's website
"""
return self['web']
@web.setter
[docs] def web(self, value):
if not value:
if 'web' in self:
del self['web']
return
if not is_url(value):
raise ValueError("not a url: {0}".format(value))
self['web'] = compat.str(value)
@property
def email(self):
"""
Email address of the person or organisation.
"""
return self['email']
@email.setter
[docs] def email(self, value):
if not value:
if 'email' in self:
del self['email']
return
if not is_email(value):
raise ValueError("not an email address: {0}".format(value))
self['email'] = compat.str(value)