This repository has been archived on 2021-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
kaneton/test/packages/ktp/miscellaneous.py

283 lines
6.3 KiB
Python
Raw Normal View History

2013-02-11 21:04:30 +00:00
#
# ---------- header -----------------------------------------------------------
#
# project kaneton
#
# license kaneton
#
# file /home/mycure/KANE...EST-SYSTEM/packages/ktp/miscellaneous.py
#
# created julien quintard [mon oct 25 19:51:49 2010]
# updated julien quintard [sun feb 20 01:00:57 2011]
#
#
# ---------- packages ---------------------------------------------------------
#
import xmlrpclib
import tempfile
import os
import shutil
import re
import ktp
#
# ---------- definitions ------------------------------------------------------
#
OptionNone = 0
OptionFile = 1
OptionDirectory = 2
OptionRecursive = 3
#
# ---------- functions --------------------------------------------------------
#
#
# this function converts some data into its binary form.
#
def Binary(data):
return xmlrpclib.Binary(data)
#
# this function removes the target file system object.
#
def Remove(target):
entries = None
entry = None
if os.path.isfile(target) or os.path.islink(target):
os.unlink(target)
if os.path.isdir(target):
entries = os.listdir(target)
for entry in entries:
Remove(target + "/" + entry)
os.rmdir(target)
#
# this function writes data to a file.
#
def Push(content, path):
handle = None
handle = open(path, "w")
handle.write(content)
handle.close()
#
# this function reads data from a file.
#
def Pull(path):
handle = None
line = None
if not os.path.exists(path):
return None
try:
handle = open(path, "r")
except IOError:
return None
content = str()
for line in handle.readlines():
content += line
handle.close()
if len(content) == 0:
content = None
return content
#
# this function creates a temporary file or directory.
#
def Temporary(option):
location = None
if option == OptionFile:
tuple = tempfile.mkstemp()
os.close(tuple[0])
location = tuple[1]
elif option == OptionDirectory:
location = tempfile.mkdtemp()
return location
#
# this function copies one file to another target.
#
def Copy(path, target):
shutil.copy(path, target)
#
# this function searches for file names matching the given pattern.
#
def Search(directory, pattern, options):
elements = []
entries = None
entry = None
entries = os.listdir(directory)
for entry in entries:
if (options & OptionFile) and \
(os.path.isfile(directory + "/" + entry)) and \
(re.search(pattern, entry)):
elements += [ directory + "/" + entry ]
if (os.path.isdir(directory + "/" + entry)):
if (options & OptionDirectory) and \
(re.search(pattern, entry)):
elements += [ directory + "/" + entry ]
if (options & OptionRecursive) and \
(not os.path.islink(directory + "/" + entry)):
elements += Search(directory + "/" + entry, pattern, options)
return elements
#
# this function creates the directories up to the destination path.
#
def Dig(target):
path = None
steps = None
step = None
if target[0] == "/":
path = "/"
steps = os.path.dirname(target).strip("/").split("/")
for step in steps:
if not path:
path = step
else:
path = path + "/" + step
if not os.path.exists(path):
os.mkdir(path)
#
# this function transfers the content from one file to the other.
#
def Transfer(source, destination):
input = None
output = None
line = None
try:
input = open(source, "r")
output = open(destination, "a")
except IOError:
return None
line = input.read(256)
output.write(line)
output.close()
input.close()
def Email(source,
destination,
subject,
body,
attachment = None):
capability = None
content = None
configuration = None
message = None
stream = None
report = None
status = None
output = None
emails = None
a = None
# create a temporary file.
configuration = ktp.miscellaneous.Temporary(ktp.miscellaneous.OptionFile)
# create a configuration file.
content = """\
set realname = "%(from)s"
set from = "%(from)s"
set use_from = yes\
""" % { "from": source }
# store the temporary mutt configuration file.
ktp.miscellaneous.Push(content, configuration)
# create a temporary file.
message = ktp.miscellaneous.Temporary(ktp.miscellaneous.OptionFile)
# prepare the -a option depending on the presence of an attachment.
if attachment:
a = [ "-a", attachment ]
else:
a = []
# store the temporary message.
ktp.miscellaneous.Push(body, message)
# create a stream file.
stream = ktp.miscellaneous.Temporary(ktp.miscellaneous.OptionFile)
# email the capability to the supposed recipient.
status = ktp.process.Invoke("mutt",
a +
[ "-F", configuration,
"-s", subject,
" ".join(destination),
"<" + message ])
# retrieve the output.
output = ktp.miscellaneous.Pull(stream)
# remove the stream file.
ktp.miscellaneous.Remove(stream)
# remove the temporary files.
ktp.miscellaneous.Remove(message)
ktp.miscellaneous.Remove(configuration)
#
# this function transforms a Python data structure into a string
# representation.
#
def Stringify(data, margin = "", alignment = 26):
string = str()
key = None
length = None
if isinstance(data, dict):
for key in data:
if not isinstance(data[key], dict) and not isinstance(data[key], list):
length = len(margin) + len(str(key)) + 1
string += margin + str(key) + ":" + \
(alignment - length) * " " + str(data[key]) + "\n"
else:
string += margin + str(key) + ":" + "\n"
string += Stringify(data[key], margin + " ", alignment)
elif isinstance(data, list):
for element in data:
string += Stringify(element, margin, alignment)
else:
string += alignment * " " + str(data) + "\n"
return string