[rhinstaller/blivet/pulls/251 master] Use libbytesize's Size class as a base for our Size class
jkonecny12
installerbot-noreply at redhat.com
Fri Oct 16 14:26:56 UTC 2015
> @@ -19,229 +19,20 @@
> #
> # Red Hat Author(s): David Cantrell <dcantrell at redhat.com>
>
> -import re
> -import string # pylint: disable=deprecated-module
> -import locale
> -import sys
> -from collections import namedtuple
> -
> -from decimal import Decimal
> -from decimal import InvalidOperation
> -from decimal import ROUND_DOWN, ROUND_UP, ROUND_HALF_UP
> import six
>
> -from .errors import SizePlacesError
> -from .i18n import _, N_
> -from .util import stringize, unicodeize
> -
> -ROUND_DEFAULT = ROUND_HALF_UP
> -
> -# Container for size unit prefix information
> -_Prefix = namedtuple("Prefix", ["factor", "prefix", "abbr"])
> -
> -_DECIMAL_FACTOR = 10 ** 3
> -_BINARY_FACTOR = 2 ** 10
> -
> -_BYTES_SYMBOL = N_("B")
> -_BYTES_WORDS = (N_("bytes"), N_("byte"))
> -
> -# Symbolic constants for units
> -B = _Prefix(1, "", "")
> -
> -KB = _Prefix(_DECIMAL_FACTOR ** 1, N_("kilo"), N_("k"))
> -MB = _Prefix(_DECIMAL_FACTOR ** 2, N_("mega"), N_("M"))
> -GB = _Prefix(_DECIMAL_FACTOR ** 3, N_("giga"), N_("G"))
> -TB = _Prefix(_DECIMAL_FACTOR ** 4, N_("tera"), N_("T"))
> -PB = _Prefix(_DECIMAL_FACTOR ** 5, N_("peta"), N_("P"))
> -EB = _Prefix(_DECIMAL_FACTOR ** 6, N_("exa"), N_("E"))
> -ZB = _Prefix(_DECIMAL_FACTOR ** 7, N_("zetta"), N_("Z"))
> -YB = _Prefix(_DECIMAL_FACTOR ** 8, N_("yotta"), N_("Y"))
> -
> -KiB = _Prefix(_BINARY_FACTOR ** 1, N_("kibi"), N_("Ki"))
> -MiB = _Prefix(_BINARY_FACTOR ** 2, N_("mebi"), N_("Mi"))
> -GiB = _Prefix(_BINARY_FACTOR ** 3, N_("gibi"), N_("Gi"))
> -TiB = _Prefix(_BINARY_FACTOR ** 4, N_("tebi"), N_("Ti"))
> -PiB = _Prefix(_BINARY_FACTOR ** 5, N_("pebi"), N_("Pi"))
> -EiB = _Prefix(_BINARY_FACTOR ** 6, N_("exbi"), N_("Ei"))
> -ZiB = _Prefix(_BINARY_FACTOR ** 7, N_("zebi"), N_("Zi"))
> -YiB = _Prefix(_BINARY_FACTOR ** 8, N_("yobi"), N_("Yi"))
> -
> -# Categories of symbolic constants
> -_DECIMAL_PREFIXES = [KB, MB, GB, TB, PB, EB, ZB, YB]
> -_BINARY_PREFIXES = [KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB]
> -_EMPTY_PREFIX = B
> -
> -if six.PY2:
> - _ASCIIlower_table = string.maketrans(string.ascii_uppercase, string.ascii_lowercase) # pylint: disable=no-member
> -else:
> - _ASCIIlower_table = str.maketrans(string.ascii_uppercase, string.ascii_lowercase) # pylint: disable=no-member
> -
> -def _lowerASCII(s):
> - """Convert a string to lowercase using only ASCII character definitions.
> -
> - :param s: string instance to convert
> - :type s: str or bytes
> - :returns: lower-cased string
> - :rtype: str
> - """
> -
> - # XXX: Python 3 has str.maketrans() and bytes.maketrans() so we should
> - # ideally use one or the other depending on the type of 's'. But it turns
> - # out we expect this function to always return string even if given bytes.
> - if not six.PY2 and isinstance(s, bytes):
> - s = s.decode(sys.getdefaultencoding())
> - return s.translate(_ASCIIlower_table) # pylint: disable=no-member
> -
> -def _makeSpec(prefix, suffix, xlate, lowercase=True):
> - """ Synthesizes a whole word from prefix and suffix.
> -
> - :param str prefix: a prefix
> - :param str suffixes: a suffix
> - :param bool xlate: if True, treat as locale specific
> - :param bool lowercase: if True, make all lowercase
> -
> - :returns: whole word
> - :rtype: str
> - """
> - if xlate:
> - word = (_(prefix) + _(suffix))
> - return word.lower() if lowercase else word
> - else:
> - word = prefix + suffix
> - return _lowerASCII(word) if lowercase else word
> -
> -def unitStr(unit, xlate=False):
> - """ Return a string representation of unit.
> -
> - :param unit: a named unit, e.g., KiB
> - :param bool xlate: if True, translate to current locale
> - :rtype: some kind of string type
> - :returns: string representation of unit
> - """
> - return _makeSpec(unit.abbr, _BYTES_SYMBOL, xlate, lowercase=False)
> -
> -def parseUnits(spec, xlate):
> - """ Parse a unit specification and return corresponding factor.
> -
> - :param spec: a units specifier
> - :type spec: any type of string like object
> - :param bool xlate: if True, assume locale specific
> -
> - :returns: a named constant corresponding to spec, if found
> - :rtype: _Prefix or NoneType
> -
> - Looks first for exact matches for a specifier, but, failing that,
> - searches for partial matches for abbreviations.
> -
> - Normalizes units to lowercase, e.g., MiB and mib are treated the same.
> - """
> - if spec == "":
> - return B
> -
> - if xlate:
> - spec = spec.lower()
> - else:
> - spec = _lowerASCII(spec)
> -
> - # Search for complete matches
> - for unit in [_EMPTY_PREFIX] + _BINARY_PREFIXES + _DECIMAL_PREFIXES:
> - if spec == _makeSpec(unit.abbr, _BYTES_SYMBOL, xlate) or \
> - spec in (_makeSpec(unit.prefix, s, xlate) for s in _BYTES_WORDS):
> - return unit
> -
> - # Search for unambiguous partial match among binary abbreviations
> - matches = [p for p in _BINARY_PREFIXES if _makeSpec(p.abbr, "", xlate).startswith(spec)]
> - if len(matches) == 1:
> - return matches[0]
> -
> - return None
> -
> -def parseSpec(spec):
> - """ Parse string representation of size.
> +from gi.repository import ByteSize
> +from gi.repository.ByteSize import ROUND_DOWN, ROUND_UP
>
> - :param spec: the specification of a size with, optionally, units
> - :type spec: any type of string like object
> - :returns: numeric value of the specification in bytes
> - :rtype: Decimal
> +# we just need to make these objects available here
> +# pylint: disable=unused-import
> +from gi.repository.ByteSize import B, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB, KB, MB, GB, TB, PB, EB, ZB, YB
Can this be changed to import `gi.repository.ByteSize`, this seems to me odd and error-prone.
--
To view this pull request on github, visit https://github.com/rhinstaller/blivet/pull/251#discussion_r42248141
More information about the anaconda-patches
mailing list