def timeElapsed( elapsed, short=False, leadingZeroes=False, years=True, weeks=True, days=True, hours=True, minutes=True, seconds=True ): """Given <elapsed> seconds, returns a string with an English description of the amount of time passed. leadingZeroes determines whether 0 days, 0 hours, etc. will be printed; the others determine what larger time periods should be used. """ ret = [] before = False def Format(s, i): if i or leadingZeroes or ret: if short: ret.append("%s%s" % (i, s[0])) else: ret.append(format("%n", (i, s))) elapsed = int(elapsed) # Handle negative times if elapsed < 0: before = True elapsed = -elapsed assert years or weeks or days or hours or minutes or seconds, "One flag must be True" if years: (yrs, elapsed) = (elapsed // 31536000, elapsed % 31536000) Format(_("year"), yrs) if weeks: (wks, elapsed) = (elapsed // 604800, elapsed % 604800) Format(_("week"), wks) if days: (ds, elapsed) = (elapsed // 86400, elapsed % 86400) Format(_("day"), ds) if hours: (hrs, elapsed) = (elapsed // 3600, elapsed % 3600) Format(_("hour"), hrs) if minutes or seconds: (mins, secs) = (elapsed // 60, elapsed % 60) if leadingZeroes or mins: Format(_("minute"), mins) if seconds: leadingZeroes = True Format(_("second"), secs) if not ret: raise ValueError, "Time difference not great enough to be noted." result = "" if short: result = " ".join(ret) else: result = format("%L", ret) if before: result = _("%s ago") % result return result
def timeElapsed(elapsed, short=False, leadingZeroes=False, years=True, weeks=True, days=True, hours=True, minutes=True, seconds=True): """Given <elapsed> seconds, returns a string with an English description of the amount of time passed. leadingZeroes determines whether 0 days, 0 hours, etc. will be printed; the others determine what larger time periods should be used. """ ret = [] before = False def Format(s, i): if i or leadingZeroes or ret: if short: ret.append('%s%s' % (i, s[0])) else: ret.append(format('%n', (i, s))) elapsed = int(elapsed) # Handle negative times if elapsed < 0: before = True elapsed = -elapsed assert years or weeks or days or \ hours or minutes or seconds, 'One flag must be True' if years: (yrs, elapsed) = (elapsed // 31536000, elapsed % 31536000) Format('year', yrs) if weeks: (wks, elapsed) = (elapsed // 604800, elapsed % 604800) Format('week', wks) if days: (ds, elapsed) = (elapsed // 86400, elapsed % 86400) Format('day', ds) if hours: (hrs, elapsed) = (elapsed // 3600, elapsed % 3600) Format('hour', hrs) if minutes or seconds: (mins, secs) = (elapsed // 60, elapsed % 60) if leadingZeroes or mins: Format('minute', mins) if seconds: leadingZeroes = True Format('second', secs) if not ret: raise ValueError, 'Time difference not great enough to be noted.' result = '' if short: result = ' '.join(ret) else: result = format('%L', ret) if before: result += ' ago' return result
def Format(s, i): if i or leadingZeroes or ret: if short: ret.append('%s%s' % (i, s[0])) else: ret.append(format('%n', (i, s)))
hasher = crypt.md5 return '|'.join([salt, hasher(salt + password).hexdigest()]) def safeEval(s, namespace={'True': True, 'False': False, 'None': None}): """Evaluates s, safely. Useful for turning strings into tuples/lists/etc. without unsafely using eval().""" try: node = compiler.parse(s) except SyntaxError, e: raise ValueError, 'Invalid string: %s.' % e nodes = compiler.parse(s).node.nodes if not nodes: if node.__class__ is compiler.ast.Module: return node.doc else: raise ValueError, format('Unsafe string: %q', s) node = nodes[0] if node.__class__ is not compiler.ast.Discard: raise ValueError, format('Invalid expression: %q', s) node = node.getChildNodes()[0] def checkNode(node): if node.__class__ is compiler.ast.Const: return True if node.__class__ in (compiler.ast.List, compiler.ast.Tuple, compiler.ast.Dict): return all(checkNode, node.getChildNodes()) if node.__class__ is compiler.ast.Name: if node.name in namespace: return True else:
return '|'.join([salt, hasher(salt + password).hexdigest()]) def safeEval(s, namespace={'True': True, 'False': False, 'None': None}): """Evaluates s, safely. Useful for turning strings into tuples/lists/etc. without unsafely using eval().""" try: node = compiler.parse(s) except SyntaxError, e: raise ValueError, 'Invalid string: %s.' % e nodes = compiler.parse(s).node.nodes if not nodes: if node.__class__ is compiler.ast.Module: return node.doc else: raise ValueError, format('Unsafe string: %q', s) node = nodes[0] if node.__class__ is not compiler.ast.Discard: raise ValueError, format('Invalid expression: %q', s) node = node.getChildNodes()[0] def checkNode(node): if node.__class__ is compiler.ast.Const: return True if node.__class__ in (compiler.ast.List, compiler.ast.Tuple, compiler.ast.Dict): return all(checkNode, node.getChildNodes()) if node.__class__ is compiler.ast.Name: if node.name in namespace: return True else:
return '|'.join([salt, hasher((salt + password).encode('utf8')).hexdigest()]) _astStr2 = ast.Str if sys.version_info[0] < 3 else ast.Bytes def safeEval(s, namespace={'True': True, 'False': False, 'None': None}): """Evaluates s, safely. Useful for turning strings into tuples/lists/etc. without unsafely using eval().""" try: node = ast.parse(s) except SyntaxError, e: raise ValueError, 'Invalid string: %s.' % e nodes = ast.parse(s).body if not nodes: if node.__class__ is ast.Module: return node.doc else: raise ValueError, format('Unsafe string: %q', s) node = nodes[0] def checkNode(node): if node.__class__ is ast.Expr: node = node.value if node.__class__ in (ast.Num, ast.Str, _astStr2): return True elif node.__class__ in (ast.List, ast.Tuple): return all([checkNode(x) for x in node.elts]) elif node.__class__ is ast.Dict: return all([checkNode(x) for x in node.values]) and \ all([checkNode(x) for x in node.values]) elif node.__class__ is ast.Name:
def Format(s, i): if i or leadingZeroes or ret: if short: ret.append("%s%s" % (i, s[0])) else: ret.append(format("%n", (i, s)))
_astStr2 = ast.Str if sys.version_info[0] < 3 else ast.Bytes def safeEval(s, namespace={"True": True, "False": False, "None": None}): """Evaluates s, safely. Useful for turning strings into tuples/lists/etc. without unsafely using eval().""" try: node = ast.parse(s) except SyntaxError, e: raise ValueError, "Invalid string: %s." % e nodes = ast.parse(s).body if not nodes: if node.__class__ is ast.Module: return node.doc else: raise ValueError, format("Unsafe string: %q", s) node = nodes[0] def checkNode(node): if node.__class__ is ast.Expr: node = node.value if node.__class__ in (ast.Num, ast.Str, _astStr2): return True elif node.__class__ in (ast.List, ast.Tuple): return all([checkNode(x) for x in node.elts]) elif node.__class__ is ast.Dict: return all([checkNode(x) for x in node.values]) and all([checkNode(x) for x in node.values]) elif node.__class__ is ast.Name: if node.id in namespace: return True else: