12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import datetime
- import os
- def cached_property(f):
- """
- returns a cached property that is calculated by function f
- http://code.activestate.com/recipes/576563-cached-property/
- """
- def get(self):
- try:
- return self._property_cache[f]
- except AttributeError:
- self._property_cache = {}
- x = self._property_cache[f] = f(self)
- return x
- except KeyError:
- x = self._property_cache[f] = f(self)
- return x
- return property(get)
- def yesno(prompt, default=None):
- """
- Prompt the user for a yes or no.
- Can optionally specify a default value, which will only be
- used if they enter a blank line.
- Unrecognised input (anything other than "y", "n", "yes",
- "no" or "") will return None.
- """
- answer = raw_input(prompt).strip().lower()
- if answer == "y" or answer == "yes":
- return True
- elif answer == "n" or answer == "no":
- return False
- elif answer == "":
- return default
- else:
- return None
- # http://stackoverflow.com/a/5164027
- def prettydate(d):
- diff = datetime.datetime.utcnow() - d
- s = diff.seconds
- if diff.days > 7 or diff.days < 0:
- return d.strftime('%d %b %y')
- elif diff.days == 1:
- return '1 day ago'
- elif diff.days > 1:
- return '{0} days ago'.format(diff.days)
- elif s <= 1:
- return 'just now'
- elif s < 60:
- return '{0} seconds ago'.format(s)
- elif s < 120:
- return '1 minute ago'
- elif s < 3600:
- return '{0} minutes ago'.format(s/60)
- elif s < 7200:
- return '1 hour ago'
- else:
- return '{0} hours ago'.format(s/3600)
- def mkdir(path, permissions=0700):
- if not os.path.exists(path):
- os.mkdir(path)
- os.chmod(path, permissions)
- return path
|