'gzip_append': 'skytools.gzlog:gzip_append',
# skytools.parsing
'dedent': 'skytools.parsing:dedent',
+ 'hsize_to_bytes': 'skytools.parsing:hsize_to_bytes',
'parse_acl': 'skytools.parsing:parse_acl',
'parse_logtriga_sql': 'skytools.parsing:parse_logtriga_sql',
'parse_pgarray': 'skytools.parsing:parse_pgarray',
import os, os.path, ConfigParser, socket
+import skytools
+
__all__ = ['Config']
class Config(object):
return fn
+ def getbytes(self, key, default=None):
+ """Reads a size value in human format, if not set then default.
+
+ Examples: 1, 2 B, 3K, 4 MB
+ """
+ try:
+ s = self.cf.get(self.main_section, key)
+ except ConfigParser.NoOptionError:
+ if default is None:
+ raise Exception("Config value not set: " + key)
+ s = default
+ return skytools.hsize_to_bytes(s)
+
def get_wildcard(self, key, values=[], default=None):
"""Reads a wildcard property from conf and returns its string value, if not set then default."""
__all__ = [
"parse_pgarray", "parse_logtriga_sql", "parse_tabbed_table",
"parse_statements", 'sql_tokenizer', 'parse_sqltriga_sql',
- "parse_acl", "dedent"]
+ "parse_acl", "dedent", "hsize_to_bytes"]
_rc_listelem = re.compile(r'( [^,"}]+ | ["] ( [^"\\]+ | [\\]. )* ["] )', re.X)
def parse_tabbed_table(txt):
r"""Parse a tab-separated table into list of dicts.
-
+
Expect first row to be column names.
Very primitive.
res.append('')
return '\n'.join(res)
+
+def hsize_to_bytes (input):
+ """ Convert sizes from human format to bytes (string to integer) """
+
+ assert isinstance (input, str)
+ m = re.match (r"^([0-9]+) *([KMGTPEZY]?)B?$", input.strip(), re.IGNORECASE)
+ if not m: raise ValueError ("cannot parse: %s" % input)
+ units = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']
+ bytes = int(m.group(1)) * 1024 ** units.index(m.group(2).upper())
+ return bytes
+
+
if __name__ == '__main__':
import doctest
doctest.testmod()
-