示例#1
0
文件: strutils.py 项目: feythin/flib
def bool_from_string(subject, strict=False, default=False):
    """Interpret a string as a boolean.
    A case-insensitive match is performed such that strings matching 't',
    'true', 'on', 'y', 'yes', or '1' are considered True and, when
    `strict=False`, anything else returns the value specified by 'default'.
    Useful for JSON-decoded stuff and config file parsing.
    If `strict=True`, unrecognized values, including None, will raise a
    ValueError which is useful when parsing values passed in from an API call.
    Strings yielding False are 'f', 'false', 'off', 'n', 'no', or '0'.
    """
    if not isinstance(subject, six.string_types):
        subject = six.text_type(subject)

    lowered = subject.strip().lower()

    if lowered in TRUE_STRINGS:
        return True
    elif lowered in FALSE_STRINGS:
        return False
    elif strict:
        acceptable = ', '.join(
            "'%s'" % s for s in sorted(TRUE_STRINGS + FALSE_STRINGS))
        msg = _("Unrecognized value '%(val)s', acceptable values are:"
                " %(acceptable)s") % {'val': subject,
                                      'acceptable': acceptable}
        raise ValueError(msg)
    else:
        return default
示例#2
0
文件: strutils.py 项目: feythin/flib
def string_to_bytes(text, unit_system='IEC', return_int=False):
    """Converts a string into an float representation of bytes.
    The units supported for IEC ::
        Kb(it), Kib(it), Mb(it), Mib(it), Gb(it), Gib(it), Tb(it), Tib(it)
        KB, KiB, MB, MiB, GB, GiB, TB, TiB
    The units supported for SI ::
        kb(it), Mb(it), Gb(it), Tb(it)
        kB, MB, GB, TB
    Note that the SI unit system does not support capital letter 'K'
    :param text: String input for bytes size conversion.
    :param unit_system: Unit system for byte size conversion.
    :param return_int: If True, returns integer representation of text
                       in bytes. (default: decimal)
    :returns: Numerical representation of text in bytes.
    :raises ValueError: If text has an invalid value.
    """
    try:
        base, reg_ex = UNIT_SYSTEM_INFO[unit_system]
    except KeyError:
        msg = _('Invalid unit system: "%s"') % unit_system
        raise ValueError(msg)
    match = reg_ex.match(text)
    if match:
        magnitude = float(match.group(1))
        unit_prefix = match.group(2)
        if match.group(3) in ['b', 'bit']:
            magnitude /= 8
    else:
        msg = _('Invalid string format: %s') % text
        raise ValueError(msg)
    if not unit_prefix:
        res = magnitude
    else:
        res = magnitude * pow(base, UNIT_PREFIX_EXPONENT[unit_prefix])
    if return_int:
        return int(math.ceil(res))
    return res
示例#3
0
文件: log.py 项目: feythin/flib
    def deprecated(self, msg, *args, **kwargs):
        """Call this method when a deprecated feature is used.
        If the system is configured for fatal deprecations then the message
        is logged at the 'critical' level and :class:`DeprecatedConfig` will
        be raised.
        Otherwise, the message will be logged (once) at the 'warn' level.
        :raises: :class:`DeprecatedConfig` if the system is configured for
                 fatal deprecations.
        """
        stdmsg = _("Deprecated: %s") % msg
        if CONF.fatal_deprecations:
            self.critical(stdmsg, *args, **kwargs)
            raise DeprecatedConfig(msg=stdmsg)

        # Using a list because a tuple with dict can't be stored in a set.
        sent_args = self._deprecated_messages_sent.setdefault(msg, list())

        if args in sent_args:
            # Already logged this message, so don't log it again.
            return

        sent_args.append(args)
        self.warn(stdmsg, *args, **kwargs)
示例#4
0
文件: log.py 项目: feythin/flib
def _find_facility_from_conf():
    facility_names = logging.handlers.SysLogHandler.facility_names
    facility = getattr(logging.handlers.SysLogHandler, CONF.syslog_log_facility, None)

    if facility is None and CONF.syslog_log_facility in facility_names:
        facility = facility_names.get(CONF.syslog_log_facility)

    if facility is None:
        valid_facilities = facility_names.keys()
        consts = [
            "LOG_AUTH",
            "LOG_AUTHPRIV",
            "LOG_CRON",
            "LOG_DAEMON",
            "LOG_FTP",
            "LOG_KERN",
            "LOG_LPR",
            "LOG_MAIL",
            "LOG_NEWS",
            "LOG_AUTH",
            "LOG_SYSLOG",
            "LOG_USER",
            "LOG_UUCP",
            "LOG_LOCAL0",
            "LOG_LOCAL1",
            "LOG_LOCAL2",
            "LOG_LOCAL3",
            "LOG_LOCAL4",
            "LOG_LOCAL5",
            "LOG_LOCAL6",
            "LOG_LOCAL7",
        ]
        valid_facilities.extend(consts)
        raise TypeError(_("syslog facility must be one of: %s") % ", ".join("'%s'" % fac for fac in valid_facilities))

    return facility