summaryrefslogtreecommitdiff
path: root/slime-0.11/helpers.py
blob: 46a5e11f49ccf3e29bb9e697625f09561ee99737 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import spawn, tempfile, time, os, FCNTL

def run_pgp(path, username, password, options, files, stdin=""):
	env = {}
	for key in os.environ.keys():
		env[key] = os.environ[key]
	env["PGPPASSFD"] = "0"

	if password:
		stdin = password + "\n" + stdin

	args = options[:]
	if username:
		args.append("+myname=" + username)
	args = args + files
	
	return spawn.run(path, stdin=stdin, args=args, env=env)

def read_text_from_named_file(filename):
	f = open(filename, "r")
	text = f.read()
	f.close()
	return text

def write_text_to_named_file(filename, text):
	fd = os.open(filename, 
		FCNTL.O_WRONLY | FCNTL.O_CREAT | FCNTL.O_EXCL, 0600)
	os.write(fd, text)
	os.close(fd)

def rfc822_date():
	mon = ["", "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
	           "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
	dow = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

	if time.daylight:
		date = time.localtime(time.time())
		if time.altzone < 0:
			tzsign = '+'
			secs = -time.altzone
		else:
			tzsign = '-'
			secs = time.altzone
		tzhours = secs / (60*60)
		tzmins = secs % (60*60)
	else:
		date = time.gmtime(time.time())
		tzsign = '+'
		tzhours = 0
		tzmins = 0

	return "%s, %2d %s %d %02d:%02d:%02d %c%02d%02d" % \
		(dow[date[6]], date[2], mon[date[1]], date[0],
		 date[3], date[4], date[5], tzsign, tzhours, tzmins)

_name_to_folder_cache = {}

def clear_name_to_folder_cache():
	global _name_to_folder_cache
	_name_to_folder_cache = {}

def find_folder_by_name(folder_name, folder):
	global _name_to_folder_cache
	if _name_to_folder_cache.has_key(folder_name):
		return _name_to_folder_cache[folder_name]
	return recursive_find_folder_by_name(folder_name, folder)

def recursive_find_folder_by_name(folder_name, folder):
	global _name_to_folder_cache
	_name_to_folder_cache[repr(folder)] = folder

	if repr(folder) == folder_name:
		return folder
	was_open = folder.is_open()
	if not was_open:
		folder.open()
		folder.rescan_subfolders()
	f = None
	for subfolder in folder.list_all_subfolders():
		f = recursive_find_folder_by_name(folder_name, subfolder)
		if f:
			break
	if not was_open:
		folder.close()
	return f