80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
|
import os
|
||
|
import tempfile
|
||
|
import locale
|
||
|
import sys
|
||
|
from exc import WorblehatException
|
||
|
|
||
|
stdout_encoding = locale.getpreferredencoding()
|
||
|
file_encoding = 'utf-8'
|
||
|
|
||
|
output = sys.stdout
|
||
|
|
||
|
# def write_tmpfile(pfix, content, encoding='utf8'):
|
||
|
# file = tempfile.NamedTemporaryFile(prefix=pfix+'-', dir='/tmp', delete=False)
|
||
|
# file.write(content.encode(encoding))
|
||
|
# name = file.name
|
||
|
# file.close()
|
||
|
# return name
|
||
|
|
||
|
def open_tmpfile(prefix):
|
||
|
global output
|
||
|
if output != sys.stdout:
|
||
|
raise WorblehatException('open_tmpfile: Already writing to a file')
|
||
|
tmpfile = tempfile.NamedTemporaryFile(prefix='worblehat-%s-' % prefix,
|
||
|
dir='/tmp',
|
||
|
delete=False)
|
||
|
output = tmpfile
|
||
|
return tmpfile.name
|
||
|
|
||
|
def close_tmpfile():
|
||
|
global output
|
||
|
if output == sys.stdout:
|
||
|
raise WorblehatException('close_tmpfile: No file open')
|
||
|
output.close()
|
||
|
output = sys.stdout
|
||
|
|
||
|
def output_encoding():
|
||
|
if output == sys.stdout:
|
||
|
return stdout_encoding
|
||
|
else:
|
||
|
return file_encoding
|
||
|
|
||
|
def encoding_comment():
|
||
|
return '# -*- coding: %s -*-\n' % file_encoding
|
||
|
|
||
|
def write(data):
|
||
|
if type(data) == unicode:
|
||
|
data = data.encode(output_encoding())
|
||
|
output.write(data)
|
||
|
|
||
|
def write_stderr(data):
|
||
|
if type(data) == unicode:
|
||
|
data = data.encode(output_encoding())
|
||
|
sys.stderr.write(data)
|
||
|
|
||
|
debugging = True
|
||
|
def debug(msg):
|
||
|
if debugging:
|
||
|
write_stderr('DEBUG: %s\n' % msg)
|
||
|
|
||
|
def tmpfile_name():
|
||
|
if output == sys.stdout:
|
||
|
raise WorblehatException('tmpfile_name: No file open')
|
||
|
return output.name
|
||
|
|
||
|
class tmpfile:
|
||
|
def __init__(self, prefix):
|
||
|
self.prefix = prefix
|
||
|
def __enter__(self):
|
||
|
open_tmpfile(self.prefix)
|
||
|
def __exit__(self, exc_type, exc, traceback):
|
||
|
close_tmpfile()
|
||
|
|
||
|
def run_editor(filename):
|
||
|
if os.path.exists(filename):
|
||
|
os.system("%s %s || /usr/bin/env vi %s" %
|
||
|
(os.getenv("EDITOR"), filename, filename))
|
||
|
else:
|
||
|
exit("Error: %s: File does not exist!" % filename)
|
||
|
|