# Path: m2core/utils/voluptuous_checkers.py
# def NotNone(msg=None):
#     """Checks that value is not None neither empty string"""
#     def f(v):
#         if v is not None:
#             if type(v) == str:
#                 if v == '':
#                     raise Error(msg or "value must be not empty")
#                 else:
#                     return v
#             return v
#         else:
#             raise Error(msg or "value must be not None")
#     return f


import re
from voluptuous import Schema, Required, Coerce, Boolean, Length, All, Range, In
from voluptuous.error import Error
from m2core.utils.voluptuous_checkers import NotNone


class UrlParserAttr:
    ATTR_TYPES = {
        'int': int,
        'float': float,
        'string': str,
        'bool': bool
    }


# Path: m2core/utils/voluptuous_checkers.py
# def NotNone(msg=None):
#     """Checks that value is not None neither empty string"""
#     def f(v):
#         if v is not None:
#             if type(v) == str:
#                 if v == '':
#                     raise Error(msg or "value must be not empty")
#                 else:
#                     return v
#             return v
#         else:
#             raise Error(msg or "value must be not None")
#     return f


# Path: m2core/utils/url_parser.py
import re
from voluptuous import Schema, Required, Coerce, Boolean, Length, All, Range, In
from voluptuous.error import Error
from m2core.utils.voluptuous_checkers import NotNone



class UrlParserAttr:
    ATTR_TYPES = {
        'int': int,
        'float': float,
        'string': str,
        'bool': bool
    }


    def __init__(self, attr_name: str, attr_type: str, type_params: str):