2018-04-07 01:23:03 +02:00
|
|
|
from __future__ import print_function
|
|
|
|
|
2018-11-19 22:12:24 +01:00
|
|
|
import errno
|
2018-04-07 01:23:03 +02:00
|
|
|
import logging
|
2018-09-23 18:58:41 +02:00
|
|
|
import os
|
2018-11-19 22:12:24 +01:00
|
|
|
import subprocess
|
2018-04-07 01:23:03 +02:00
|
|
|
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def ensure_unique_string(preferred_string, current_strings):
|
|
|
|
test_string = preferred_string
|
|
|
|
current_strings_set = set(current_strings)
|
|
|
|
|
|
|
|
tries = 1
|
|
|
|
|
|
|
|
while test_string in current_strings_set:
|
|
|
|
tries += 1
|
|
|
|
test_string = u"{}_{}".format(preferred_string, tries)
|
|
|
|
|
|
|
|
return test_string
|
|
|
|
|
|
|
|
|
|
|
|
def indent_all_but_first_and_last(text, padding=u' '):
|
|
|
|
lines = text.splitlines(True)
|
|
|
|
if len(lines) <= 2:
|
|
|
|
return text
|
|
|
|
return lines[0] + u''.join(padding + line for line in lines[1:-1]) + lines[-1]
|
|
|
|
|
|
|
|
|
|
|
|
def indent_list(text, padding=u' '):
|
|
|
|
return [padding + line for line in text.splitlines()]
|
|
|
|
|
|
|
|
|
|
|
|
def indent(text, padding=u' '):
|
|
|
|
return u'\n'.join(indent_list(text, padding))
|
|
|
|
|
|
|
|
|
2018-05-15 11:09:27 +02:00
|
|
|
# From https://stackoverflow.com/a/14945195/8924614
|
2018-05-17 19:57:55 +02:00
|
|
|
def cpp_string_escape(string, encoding='utf-8'):
|
|
|
|
if isinstance(string, unicode):
|
|
|
|
string = string.encode(encoding)
|
2018-05-15 11:09:27 +02:00
|
|
|
result = ''
|
2018-05-17 19:57:55 +02:00
|
|
|
for character in string:
|
|
|
|
if not (32 <= ord(character) < 127) or character in ('\\', '"'):
|
|
|
|
result += '\\%03o' % ord(character)
|
2018-05-15 11:09:27 +02:00
|
|
|
else:
|
2018-05-17 19:57:55 +02:00
|
|
|
result += character
|
2018-05-15 11:09:27 +02:00
|
|
|
return '"' + result + '"'
|
|
|
|
|
|
|
|
|
2018-11-24 18:32:18 +01:00
|
|
|
def color(the_color, message=''):
|
|
|
|
from esphomeyaml import core
|
2018-04-07 01:23:03 +02:00
|
|
|
from colorlog.escape_codes import escape_codes, parse_colors
|
2018-11-24 18:32:18 +01:00
|
|
|
|
2018-04-07 01:23:03 +02:00
|
|
|
if not message:
|
2018-11-24 18:32:18 +01:00
|
|
|
res = parse_colors(the_color)
|
|
|
|
else:
|
|
|
|
res = parse_colors(the_color) + message + escape_codes['reset']
|
|
|
|
|
|
|
|
if core.FROM_DASHBOARD:
|
|
|
|
res = res.replace('\033', '\\033')
|
|
|
|
return res
|
2018-09-23 18:58:41 +02:00
|
|
|
|
|
|
|
|
2018-11-19 22:12:24 +01:00
|
|
|
def run_system_command(*args):
|
|
|
|
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
stdout, stderr = p.communicate()
|
|
|
|
rc = p.returncode
|
|
|
|
return rc, stdout, stderr
|
|
|
|
|
|
|
|
|
|
|
|
def mkdir_p(path):
|
|
|
|
try:
|
|
|
|
os.makedirs(path)
|
|
|
|
except OSError as exc:
|
|
|
|
if exc.errno == errno.EEXIST and os.path.isdir(path):
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
raise
|