# -*- coding: utf-8 -*-
# Auto-generated by Stone, do not modify.
# flake8: noqa
# pylint: skip-file
try:
    from . import stone_validators as bv
    from . import stone_base as bb
except (SystemError, ValueError):
    # Catch errors raised when importing a relative module when not in a package.
    # This makes testing this file directly (outside of a package) easier.
    import stone_validators as bv
    import stone_base as bb

class InvalidPathRootError(object):
    """
    :ivar path_root: The latest path root id for user's team if the user is
        still in a team.
    """

    __slots__ = [
        '_path_root_value',
        '_path_root_present',
    ]

    _has_required_fields = False

    def __init__(self,
                 path_root=None):
        self._path_root_value = None
        self._path_root_present = False
        if path_root is not None:
            self.path_root = path_root

    @property
    def path_root(self):
        """
        The latest path root id for user's team if the user is still in a team.

        :rtype: str
        """
        if self._path_root_present:
            return self._path_root_value
        else:
            return None

    @path_root.setter
    def path_root(self, val):
        if val is None:
            del self.path_root
            return
        val = self._path_root_validator.validate(val)
        self._path_root_value = val
        self._path_root_present = True

    @path_root.deleter
    def path_root(self):
        self._path_root_value = None
        self._path_root_present = False

    def __repr__(self):
        return 'InvalidPathRootError(path_root={!r})'.format(
            self._path_root_value,
        )

InvalidPathRootError_validator = bv.Struct(InvalidPathRootError)

class PathRoot(bb.Union):
    """
    This class acts as a tagged union. Only one of the ``is_*`` methods will
    return true. To get the associated value of a tag (if one exists), use the
    corresponding ``get_*`` method.

    :ivar home: Paths are relative to the authenticating user's home directory,
        whether or not that user belongs to a team.
    :ivar member_home: Paths are relative to the authenticating team member's
        home directory. (This results in ``PathRootError.invalid`` if the user
        does not belong to a team.).
    :ivar str team: Paths are relative to the given team directory. (This
        results in :field:`PathRootError.invalid` if the user is not a member of
        the team associated with that path root id.).
    :ivar user_home: Paths are relative to the user's home directory. (This
        results in ``PathRootError.invalid`` if the belongs to a team.).
    :ivar str namespace_id: Paths are relative to given namespace id (This
        results in :field:`PathRootError.no_permission` if you don't have access
        to this namespace.).
    """

    _catch_all = 'other'
    # Attribute is overwritten below the class definition
    home = None
    # Attribute is overwritten below the class definition
    member_home = None
    # Attribute is overwritten below the class definition
    user_home = None
    # Attribute is overwritten below the class definition
    other = None

    @classmethod
    def team(cls, val):
        """
        Create an instance of this class set to the ``team`` tag with value
        ``val``.

        :param str val:
        :rtype: PathRoot
        """
        return cls('team', val)

    @classmethod
    def namespace_id(cls, val):
        """
        Create an instance of this class set to the ``namespace_id`` tag with
        value ``val``.

        :param str val:
        :rtype: PathRoot
        """
        return cls('namespace_id', val)

    def is_home(self):
        """
        Check if the union tag is ``home``.

        :rtype: bool
        """
        return self._tag == 'home'

    def is_member_home(self):
        """
        Check if the union tag is ``member_home``.

        :rtype: bool
        """
        return self._tag == 'member_home'

    def is_team(self):
        """
        Check if the union tag is ``team``.

        :rtype: bool
        """
        return self._tag == 'team'

    def is_user_home(self):
        """
        Check if the union tag is ``user_home``.

        :rtype: bool
        """
        return self._tag == 'user_home'

    def is_namespace_id(self):
        """
        Check if the union tag is ``namespace_id``.

        :rtype: bool
        """
        return self._tag == 'namespace_id'

    def is_other(self):
        """
        Check if the union tag is ``other``.

        :rtype: bool
        """
        return self._tag == 'other'

    def get_team(self):
        """
        Paths are relative to the given team directory. (This results in
        ``PathRootError.invalid`` if the user is not a member of the team
        associated with that path root id.).

        Only call this if :meth:`is_team` is true.

        :rtype: str
        """
        if not self.is_team():
            raise AttributeError("tag 'team' not set")
        return self._value

    def get_namespace_id(self):
        """
        Paths are relative to given namespace id (This results in
        ``PathRootError.no_permission`` if you don't have access to this
        namespace.).

        Only call this if :meth:`is_namespace_id` is true.

        :rtype: str
        """
        if not self.is_namespace_id():
            raise AttributeError("tag 'namespace_id' not set")
        return self._value

    def __repr__(self):
        return 'PathRoot(%r, %r)' % (self._tag, self._value)

PathRoot_validator = bv.Union(PathRoot)

class PathRootError(bb.Union):
    """
    This class acts as a tagged union. Only one of the ``is_*`` methods will
    return true. To get the associated value of a tag (if one exists), use the
    corresponding ``get_*`` method.

    :ivar InvalidPathRootError invalid: The path root id value in
        Dropbox-API-Path-Root header is no longer valid.
    :ivar no_permission: You don't have permission to access the path root id in
        Dropbox-API-Path-Root  header.
    """

    _catch_all = 'other'
    # Attribute is overwritten below the class definition
    no_permission = None
    # Attribute is overwritten below the class definition
    other = None

    @classmethod
    def invalid(cls, val):
        """
        Create an instance of this class set to the ``invalid`` tag with value
        ``val``.

        :param InvalidPathRootError val:
        :rtype: PathRootError
        """
        return cls('invalid', val)

    def is_invalid(self):
        """
        Check if the union tag is ``invalid``.

        :rtype: bool
        """
        return self._tag == 'invalid'

    def is_no_permission(self):
        """
        Check if the union tag is ``no_permission``.

        :rtype: bool
        """
        return self._tag == 'no_permission'

    def is_other(self):
        """
        Check if the union tag is ``other``.

        :rtype: bool
        """
        return self._tag == 'other'

    def get_invalid(self):
        """
        The path root id value in Dropbox-API-Path-Root header is no longer
        valid.

        Only call this if :meth:`is_invalid` is true.

        :rtype: InvalidPathRootError
        """
        if not self.is_invalid():
            raise AttributeError("tag 'invalid' not set")
        return self._value

    def __repr__(self):
        return 'PathRootError(%r, %r)' % (self._tag, self._value)

PathRootError_validator = bv.Union(PathRootError)

Date_validator = bv.Timestamp(u'%Y-%m-%d')
DisplayName_validator = bv.String(min_length=1, pattern=u'[^/:?*<>"|]*')
DisplayNameLegacy_validator = bv.String(min_length=1)
DropboxTimestamp_validator = bv.Timestamp(u'%Y-%m-%dT%H:%M:%SZ')
EmailAddress_validator = bv.String(max_length=255, pattern=u"^['&A-Za-z0-9._%+-]+@[A-Za-z0-9-][A-Za-z0-9.-]*.[A-Za-z]{2,15}$")
# A ISO639-1 code.
LanguageCode_validator = bv.String(min_length=2)
NamePart_validator = bv.String(min_length=1, max_length=100, pattern=u'[^/:?*<>"|]*')
NamespaceId_validator = bv.String(pattern=u'[-_0-9a-zA-Z:]+')
OptionalNamePart_validator = bv.String(max_length=100, pattern=u'[^/:?*<>"|]*')
PathRootId_validator = NamespaceId_validator
SessionId_validator = bv.String()
SharedFolderId_validator = NamespaceId_validator
InvalidPathRootError._path_root_validator = bv.Nullable(PathRootId_validator)
InvalidPathRootError._all_field_names_ = set(['path_root'])
InvalidPathRootError._all_fields_ = [('path_root', InvalidPathRootError._path_root_validator)]

PathRoot._home_validator = bv.Void()
PathRoot._member_home_validator = bv.Void()
PathRoot._team_validator = PathRootId_validator
PathRoot._user_home_validator = bv.Void()
PathRoot._namespace_id_validator = PathRootId_validator
PathRoot._other_validator = bv.Void()
PathRoot._tagmap = {
    'home': PathRoot._home_validator,
    'member_home': PathRoot._member_home_validator,
    'team': PathRoot._team_validator,
    'user_home': PathRoot._user_home_validator,
    'namespace_id': PathRoot._namespace_id_validator,
    'other': PathRoot._other_validator,
}

PathRoot.home = PathRoot('home')
PathRoot.member_home = PathRoot('member_home')
PathRoot.user_home = PathRoot('user_home')
PathRoot.other = PathRoot('other')

PathRootError._invalid_validator = InvalidPathRootError_validator
PathRootError._no_permission_validator = bv.Void()
PathRootError._other_validator = bv.Void()
PathRootError._tagmap = {
    'invalid': PathRootError._invalid_validator,
    'no_permission': PathRootError._no_permission_validator,
    'other': PathRootError._other_validator,
}

PathRootError.no_permission = PathRootError('no_permission')
PathRootError.other = PathRootError('other')

ROUTES = {
}

