mirror of https://github.com/docker/compose.git
86 lines
2.0 KiB
Python
86 lines
2.0 KiB
Python
from __future__ import unicode_literals
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
import datetime
|
|
import os
|
|
import socket
|
|
from .errors import UserError
|
|
|
|
|
|
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=0o700):
|
|
if not os.path.exists(path):
|
|
os.mkdir(path)
|
|
|
|
os.chmod(path, permissions)
|
|
|
|
return path
|
|
|
|
|
|
def docker_url():
|
|
return os.environ.get('DOCKER_HOST')
|