python类string_types()的实例源码

version_utils.py 文件源码 项目:my_utils 作者: aploium 项目源码 文件源码 阅读 19 收藏 0 点赞 0 评论 0
def guess_range(versions, digits=2):
    """
    ????????????????
    ?? group_digits ?????????

    Examples?
        (digits=1) "1.1|1.2|1.3|1.4" --> ">=1.1,<=1.4"
        (digits=1) "1.1|1.2|1.3|1.4|2.1|2.2|2.3" --> ">=1.1,<=1.4|>=2.1,<=2.3"

        '1.1.1|1.1.2|1.1.3|1.2|1.2.4|2.0|2.0.2|3.0'
         --> '>=1.1.1,<=1.1.3|>=1.2,<=1.2.4|>=2.0,<=2.0.2|3.0'


    Args:
        versions (list[str]|str): ?????????
        digits (int): ?????????

    Returns:
        VersionRange
    """
    if isinstance(versions, six.string_types):
        versions = [Version(x) for x in versions.split('|')]
    else:
        versions = [Version(x) for x in versions]

    versions.sort()

    if not versions:
        raise ValueError('must given at least one version')

    sections = []
    group_buff = [versions[0]]

    for version in versions[1:]:
        if version.version[:digits] == group_buff[0].version[:digits]:
            group_buff.append(version)
        else:
            sections.append(_internal_guess_range(group_buff))
            group_buff = [version]
    # ????
    sections.append(_internal_guess_range(group_buff))

    version_ranges = []
    for low, high in sections:
        if low == high:
            cg = low.vstring
        else:
            cg = ">={},<={}".format(low, high)
        version_ranges.append(cg)

    vr = VersionRange(version_ranges)

    return vr

# -----------------------------------------------------
# ------------------- BEGIN   TESTS -------------------
# -----------------------------------------------------
langstrings.py 文件源码 项目:idealoom 作者: conversence 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def _do_create_from_json(
            cls, json, parse_def, context,
            duplicate_handling=None, object_importer=None):
        # Special case for JSON-LD
        added = False
        ls = cls()
        def guess_lang(value):
            from .discussion import Discussion
            discussion = context.get_instance_of_class(Discussion)
            if discussion:
                tr_service = discussion.translation_service()
                lang, _ = tr_service.identify(value)
            return LocaleLabel.UNDEFINED

        if isinstance(json, list):
            for entry_record in json:
                value = entry_record['@value']
                if value:
                    added = True
                    lang = entry_record.get('@language', None) or guess_lang(value)
                    ls.add_value(value, lang)
        elif isinstance(json, dict):
            if '@id' in json or '@type' in json:
                return super(LangString, cls)._do_create_from_json(
                    json, parse_def, context,
                    duplicate_handling, object_importer)
            elif '@value' in json:
                value = json['@value']
                if value:
                    added = True
                    lang = json.get('@language', None) or guess_lang(value)
                    ls.add_value(value, lang)
            else:
                for lang, value in json.items():
                    if value:
                        added = True
                        ls.add_value(value, lang)
        elif isinstance(json, string_types):
            if json:
                added = True
                lang = guess_lang(json)
                ls.add_value(json, lang)
        else:
            raise ValueError("Not a valid langstring: " + json)
        i_context = ls.get_instance_context(context)
        if added:
            cls.default_db.add(ls)
        else:
            i_context._instance = None
        return i_context
langstrings.py 文件源码 项目:idealoom 作者: conversence 项目源码 文件源码 阅读 18 收藏 0 点赞 0 评论 0
def _do_update_from_json(
            self, json, parse_def, context,
            duplicate_handling=None, object_importer=None):
        # Special case for JSON-LD
        if isinstance(json, list):
            for entry_record in json:
                lang = entry_record.get('@language', LocaleLabel.UNDEFINED)
                value = entry_record['@value']
                entry = self.entries_as_dict.get(lang, None)
                if entry:
                    entry.set_value(value)
                elif value:
                    self.add_value(value, lang)
        elif isinstance(json, dict):
            if '@id' in json or '@type' in json:
                return super(LangString, self)._do_update_from_json(
                    json, parse_def, context,
                    duplicate_handling, object_importer)
            elif '@value' in json:
                value = json['@value']
                if value:
                    lang = json.get('@language', LocaleLabel.UNDEFINED)
                    entry = self.entries_as_dict.get(lang, None)
                    if entry:
                        entry.set_value(value)
                    elif value:
                        self.add_value(value, lang)
            else:
                for lang, value in json.items():
                    entry = self.entries_as_dict.get(lang, None)
                    if entry:
                        entry.set_value(value)
                    elif value:
                        self.add_value(value, lang)
        elif isinstance(json, string_types):
            from .discussion import Discussion
            lang = LocaleLabel.UNDEFINED
            discussion = context.get_instance_of_class(Discussion)
            if discussion:
                tr_service = discussion.translation_service()
                lang, _ = tr_service.identify(json)
            entry = self.entries_as_dict.get(lang, None)
            if entry:
                entry.set_value(json)
            elif json:
                self.add_value(json, lang)
        else:
            raise ValueError("Not a valid langstring: " + json)
        return self

    # TODO: Reinstate when the javascript can handle empty body/subject.
    # def generic_json(
    #         self, view_def_name='default', user_id=None,
    #         permissions=(P_READ, ), base_uri='local:'):
    #     if self.id == self.EMPTY_ID:
    #         return None
    #     return super(LangString, self).generic_json(
    #         view_def_name=view_def_name, user_id=user_id,
    #         permissions=permissions, base_uri=base_uri)
preferences.py 文件源码 项目:idealoom 作者: conversence 项目源码 文件源码 阅读 31 收藏 0 点赞 0 评论 0
def validate_single_value(self, key, value, pref_data, data_type):
        # TODO: Validation for the datatypes.
        # base_type: (bool|json|int|string|text|scalar|url|email|domain|locale|langstr|permission|role)
        # type: base_type|list_of_(type)|dict_of_(base_type)_to_(type)
        if data_type.startswith("list_of_"):
            assert isinstance(value, (list, tuple)), "Not a list"
            return [
                self.validate_single_value(key, val, pref_data, data_type[8:])
                for val in value]
        elif data_type.startswith("dict_of_"):
            assert isinstance(value, (dict)), "Not a dict"
            key_type, value_type = data_type[8:].split("_to_", 1)
            assert "_" not in key_type
            return {
                self.validate_single_value(key, k, pref_data, key_type):
                self.validate_single_value(key, v, pref_data, value_type)
                for (k, v) in value.items()}
        elif data_type == "langstr":
            # Syntactic sugar for dict_of_locale_to_string
            assert isinstance(value, (dict)), "Not a dict"
            return {
                self.validate_single_value(key, k, pref_data, "locale"):
                self.validate_single_value(key, v, pref_data, "string")
                for (k, v) in value.items()}
        elif data_type == "bool":
            assert isinstance(value, bool), "Not a boolean"
        elif data_type == "int":
            assert isinstance(value, int), "Not an integer"
        elif data_type == "json":
            pass  # no check
        else:
            assert isinstance(value, string_types), "Not a string"
            if data_type in ("string", "text"):
                pass
            elif data_type == "scalar":
                assert value in pref_data.get("scalar_values", ()), (
                    "value not allowed: " + value)
            elif data_type == "url":
                from urllib.parse import urlparse
                assert urlparse(value).scheme in (
                    'http', 'https'), "Not a HTTP URL"
            elif data_type == "email":
                from pyisemail import is_email
                assert is_email(value), "Not an email"
            elif data_type == "locale":
                pass  # TODO
            elif data_type == "permission":
                assert value in ASSEMBL_PERMISSIONS
            elif data_type == "role":
                if value not in SYSTEM_ROLES:
                    from .auth import Role
                    assert self.db.query(Role).filter_by(
                        name=value).count() == 1, "Unknown role"
            elif data_type == "domain":
                from pyisemail.validators.dns_validator import DNSValidator
                v = DNSValidator()
                assert v.is_valid(value), "Not a valid domain"
                value = value.lower()
            else:
                raise RuntimeError("Invalid data_type: " + data_type)
        return value
__init__.py 文件源码 项目:idealoom 作者: conversence 项目源码 文件源码 阅读 47 收藏 0 点赞 0 评论 0
def update_from_form(instance, form_data=None):
    mapper = inspect(instance.__class__)
    cols = {c.key: c for c in mapper.columns if not c.foreign_keys}
    setables = dict(pyinspect.getmembers(
        instance.__class__, lambda p:
        pyinspect.isdatadescriptor(p) and getattr(p, 'fset', None)))
    relns = {r.key: r for r in mapper.relationships if not r.uselist and
             len(r._calculated_foreign_keys) == 1 and iter(
                 r._calculated_foreign_keys).next().table == mapper.local_table
             }
    unknown = set(form_data.keys()) - (
        set(cols.keys()).union(set(setables.keys())).union(set(relns.keys())))
    if unknown:
        raise HTTPBadRequest("Unknown keys: "+",".join(unknown))
    params = dict(form_data)
    # type checking
    columns = {c.key: c for c in mapper.columns}
    for key, value in params.items():
        if key in relns and isinstance(value, string_types):
            val_inst = relns[key].class_.get_instance(value)
            if not val_inst:
                raise HTTPBadRequest("Unknown instance: "+value)
            params[key] = val_inst
        elif key in columns and isinstance(columns[key].type, DeclEnumType) \
                and isinstance(value, string_types):
            val_det = columns[key].type.enum.from_string(value)
            if not val_det:
                raise HTTPBadRequest("Cannot interpret " + value)
            params[key] = val_det
        elif key in columns and columns[key].type.python_type == datetime.datetime \
                and isinstance(value, string_types):
            val_dt = datetime.datetime.strpstr(value)
            if not val_dt:
                raise HTTPBadRequest("Cannot interpret " + value)
            params[key] = val_dt
        elif key in columns and columns[key].type.python_type == int \
                and isinstance(value, string_types):
            try:
                params[key] = int(value)
            except ValueError:
                raise HTTPBadRequest("Not a number: " + value)
        elif key in columns and not isinstance(value, columns[key].type.python_type):
            raise HTTPBadRequest("Value %s for key %s should be a %s" % (
                value, key, columns[key].type.python_type))
    try:
        for key, value in params.items():
            setattr(instance, key, value)
    except:
        raise HTTPBadRequest()


问题


面经


文章

微信
公众号

扫码关注公众号