# Path: mapbox/errors.py
# class ValidationError(ValueError):
#     pass
# 
# class InvalidZoomError(ValidationError):
#     pass
# 
# class InvalidColumnError(ValidationError):
#     pass
# 
# class InvalidRowError(ValidationError):
#     pass
# 
# class InvalidFileFormatError(ValidationError):
#     pass
# 
# class InvalidPeriodError(ValidationError):
#     pass
# 
# class InvalidFeatureFormatError(ValidationError):
#     pass
# 
# class InvalidMarkerNameError(ValidationError):
#     pass
# 
# class InvalidLabelError(ValidationError):
#     pass
# 
# class InvalidColorError(ValidationError):
#     pass
# 
# Path: mapbox/services/base.py
# class Service(object):
#     """Service base class
# 
#     Attributes
#     ----------
#     default_host : str
#         Default service hostname: api.mapbox.com.
#     api_name : str
#         Mapbox API name.
#     api_version : str
#         API version string such as "v1" or "v5".
#     baseuri
#     username
# 
#     Methods
#     -------
#     handle_http_errors(response, custom_messages=None, raise_for_status=False)
#         Converts service errors to Python exceptions.
#     """
# 
#     default_host = 'api.mapbox.com'
#     api_name = 'hors service'
#     api_version = 'v0'
# 
#     def __init__(self, access_token=None, host=None, cache=None):
#         """Constructs a Service object
# 
#         This method should be overridden by subclasses.
# 
#         Parameters
#         ----------
#         access_token : str
#             Mapbox access token string.
#         host : str, optional
#             Mapbox API host (advanced usage only).
#         cache : CacheControl cache instance (Dict or FileCache), optional
#             Optional caching, not generally needed.
# 
#         Returns
#         -------
#         Service
#         """
#         self.session = Session(access_token)
#         self.host = host or os.environ.get('MAPBOX_HOST', self.default_host)
#         if cache:
#             self.session = CacheControl(self.session, cache=cache)
# 
#     @property
#     def baseuri(self):
#         """The service's base URI
# 
#         Returns
#         -------
#         str
#         """
#         return 'https://{0}/{1}/{2}'.format(
#             self.host, self.api_name, self.api_version)
# 
#     @property
#     def username(self):
#         """The username in the service's access token
# 
#         Returns
#         -------
#         str
#         """
#         token = self.session.params.get('access_token')
#         if not token:
#             raise errors.TokenError(
#                 "session does not have a valid access_token param")
#         data = token.split('.')[1]
#         # replace url chars and add padding
#         # (https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770)
#         data = data.replace('-', '+').replace('_', '/') + "==="
#         try:
#             return json.loads(base64.b64decode(data).decode('utf-8'))['u']
#         except (ValueError, KeyError):
#             raise errors.TokenError(
#                 "access_token does not contain username")
# 
#     def handle_http_error(self, response, custom_messages=None,
#                           raise_for_status=False):
#         """Converts service errors to Python exceptions
# 
#         Parameters
#         ----------
#         response : requests.Response
#             A service response.
#         custom_messages : dict, optional
#             A mapping of custom exception messages to HTTP status codes.
#         raise_for_status : bool, optional
#             If True, the requests library provides Python exceptions.
# 
#         Returns
#         -------
#         None
#         """
#         if not custom_messages:
#             custom_messages = {}
#         if response.status_code in custom_messages.keys():
#             raise errors.HTTPError(custom_messages[response.status_code])
#         if raise_for_status:
#             response.raise_for_status()


from re import (
    compile,
    match
)
from mapbox.errors import (
    ValidationError,
    InvalidZoomError,
    InvalidColumnError,
    InvalidRowError,
    InvalidFileFormatError,
    InvalidPeriodError,
    InvalidFeatureFormatError,
    InvalidMarkerNameError,
    InvalidLabelError,
    InvalidColorError
)
from mapbox.services.base import Service
from dateutil.parser import parse
from uritemplate import URITemplate
            )

        return file_format

    def _validate_timestamp(self, timestamp):
        """Validates timestamp, raising error if invalid."""

        try:
            parse(timestamp)
        except:
            raise InvalidPeriodError(
                "{} is not an ISO-formatted string".format(timestamp)
            )

        return timestamp

    def _validate_feature_format(self, feature_format):
        """Validates feature format, raising error if invalid."""

        if feature_format not in self.valid_feature_formats:
            raise InvalidFeatureFormatError(
                "{} is not a valid feature format".format(feature_format)
            )

        return feature_format

    def _validate_marker_name(self, marker_name):
        """Validates marker name, raising error if invalid."""

        if marker_name not in self.valid_marker_names:

# Path: mapbox/errors.py
# class ValidationError(ValueError):
#     pass
# 
# class InvalidZoomError(ValidationError):
#     pass
# 
# class InvalidColumnError(ValidationError):
#     pass
# 
# class InvalidRowError(ValidationError):
#     pass
# 
# class InvalidFileFormatError(ValidationError):
#     pass
# 
# class InvalidPeriodError(ValidationError):
#     pass
# 
# class InvalidFeatureFormatError(ValidationError):
#     pass
# 
# class InvalidMarkerNameError(ValidationError):
#     pass
# 
# class InvalidLabelError(ValidationError):
#     pass
# 
# class InvalidColorError(ValidationError):
#     pass
# 
# Path: mapbox/services/base.py
# class Service(object):
#     """Service base class
# 
#     Attributes
#     ----------
#     default_host : str
#         Default service hostname: api.mapbox.com.
#     api_name : str
#         Mapbox API name.
#     api_version : str
#         API version string such as "v1" or "v5".
#     baseuri
#     username
# 
#     Methods
#     -------
#     handle_http_errors(response, custom_messages=None, raise_for_status=False)
#         Converts service errors to Python exceptions.
#     """
# 
#     default_host = 'api.mapbox.com'
#     api_name = 'hors service'
#     api_version = 'v0'
# 
#     def __init__(self, access_token=None, host=None, cache=None):
#         """Constructs a Service object
# 
#         This method should be overridden by subclasses.
# 
#         Parameters
#         ----------
#         access_token : str
#             Mapbox access token string.
#         host : str, optional
#             Mapbox API host (advanced usage only).
#         cache : CacheControl cache instance (Dict or FileCache), optional
#             Optional caching, not generally needed.
# 
#         Returns
#         -------
#         Service
#         """
#         self.session = Session(access_token)
#         self.host = host or os.environ.get('MAPBOX_HOST', self.default_host)
#         if cache:
#             self.session = CacheControl(self.session, cache=cache)
# 
#     @property
#     def baseuri(self):
#         """The service's base URI
# 
#         Returns
#         -------
#         str
#         """
#         return 'https://{0}/{1}/{2}'.format(
#             self.host, self.api_name, self.api_version)
# 
#     @property
#     def username(self):
#         """The username in the service's access token
# 
#         Returns
#         -------
#         str
#         """
#         token = self.session.params.get('access_token')
#         if not token:
#             raise errors.TokenError(
#                 "session does not have a valid access_token param")
#         data = token.split('.')[1]
#         # replace url chars and add padding
#         # (https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770)
#         data = data.replace('-', '+').replace('_', '/') + "==="
#         try:
#             return json.loads(base64.b64decode(data).decode('utf-8'))['u']
#         except (ValueError, KeyError):
#             raise errors.TokenError(
#                 "access_token does not contain username")
# 
#     def handle_http_error(self, response, custom_messages=None,
#                           raise_for_status=False):
#         """Converts service errors to Python exceptions
# 
#         Parameters
#         ----------
#         response : requests.Response
#             A service response.
#         custom_messages : dict, optional
#             A mapping of custom exception messages to HTTP status codes.
#         raise_for_status : bool, optional
#             If True, the requests library provides Python exceptions.
# 
#         Returns
#         -------
#         None
#         """
#         if not custom_messages:
#             custom_messages = {}
#         if response.status_code in custom_messages.keys():
#             raise errors.HTTPError(custom_messages[response.status_code])
#         if raise_for_status:
#             response.raise_for_status()


# Path: mapbox/services/maps.py
from re import (
    compile,
    match
)
from mapbox.errors import (
    ValidationError,
    InvalidZoomError,
    InvalidColumnError,
    InvalidRowError,
    InvalidFileFormatError,
    InvalidPeriodError,
    InvalidFeatureFormatError,
    InvalidMarkerNameError,
    InvalidLabelError,
    InvalidColorError
)
from mapbox.services.base import Service
from dateutil.parser import parse
from uritemplate import URITemplate

            )

        return file_format

    def _validate_timestamp(self, timestamp):
        """Validates timestamp, raising error if invalid."""

        try:
            parse(timestamp)
        except:
            raise InvalidPeriodError(
                "{} is not an ISO-formatted string".format(timestamp)
            )

        return timestamp

    def _validate_feature_format(self, feature_format):
        """Validates feature format, raising error if invalid."""

        if feature_format not in self.valid_feature_formats:
            raise InvalidFeatureFormatError(
                "{} is not a valid feature format".format(feature_format)
            )

        return feature_format

    def _validate_marker_name(self, marker_name):
        """Validates marker name, raising error if invalid."""

        if marker_name not in self.valid_marker_names:

            raise InvalidMarkerNameError(