summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mcrute@gmail.com>2015-12-13 17:40:25 -0800
committerMike Crute <mcrute@gmail.com>2015-12-13 17:40:25 -0800
commitded63104b0c0e3977874142c37c6768381f468d8 (patch)
treef9a1647da81f144b9edea04f554416169a5f0664
downloadcloudfront_logs_packaging-master.tar.bz2
cloudfront_logs_packaging-master.tar.xz
cloudfront_logs_packaging-master.zip
Initial importHEADmaster
-rw-r--r--shim.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/shim.py b/shim.py
new file mode 100644
index 0000000..aa74f92
--- /dev/null
+++ b/shim.py
@@ -0,0 +1,105 @@
1import re
2import os
3import atexit
4import shutil
5import subprocess
6import __builtin__
7from cStringIO import StringIO
8
9FILES = []
10
11_fdopen = os.fdopen
12_oopen = os.open
13_open = __builtin__.open
14def write_files():
15 os.open = _oopen
16 os.fdopen = _fdopen
17 __builtin__.open = _open
18
19 for file in FILES:
20 if not file._safe_name():
21 continue
22 _open(file._safe_name(), 'w').write(file.buffer.getvalue())
23
24
25atexit.register(write_files)
26
27
28class FakeOpenFile:
29
30 def __init__(self, name=None):
31 self.name = name
32 self.buffer = StringIO()
33 FILES.append(self)
34
35 def _safe_name(self):
36 name = self.name
37 if hasattr(self.name, 'name'):
38 name = self.name.name
39 if isinstance(name, int):
40 return None
41 return str(name).replace("/", "__")
42
43 def readline(self):
44 return "Ubuntu"
45
46 def writelines(self, lines):
47 self.buffer.write(lines)
48
49 def write(self, lines):
50 self.buffer.write(lines)
51
52 def read(self):
53 return ""
54
55 def close(self):
56 pass
57
58 def __enter__(self):
59 return self
60
61 def __exit__(self, exc_type, exc_val, exc_tb):
62 pass
63
64
65shutil.copyfile = lambda x, y: False
66
67def patched_call(*args, **kwargs):
68 print "CALL: {!r} {!r}".format(args, kwargs)
69 return 0
70
71subprocess.call = patched_call
72
73os.geteuid = lambda: 0
74
75def patched_system(*args, **kwargs):
76 print "SYSTEM: {!r} {!r}".format(args, kwargs)
77
78os.system = patched_system
79
80_old_open = __builtin__.open
81def patched_open(name):
82 def opener(*args, **kwargs):
83 if args[0] == os.devnull:
84 return _old_open(os.devnull)
85
86 print "{}: {!r} {!r}".format(name, args, kwargs)
87
88 return FakeOpenFile(args[0])
89 return opener
90
91os.open = patched_open("OS.OPEN")
92os.fdopen = patched_open("OS.FDOPEN")
93__builtin__.open = patched_open("OPEN")
94
95def patched_mkdir(*args, **kwargs):
96 print "MKDIR: {!r} {!r}".format(args, kwargs)
97
98os.mkdir = patched_mkdir
99
100def patched_raw_input(prompt):
101 print prompt
102 value = re.findall('\[([^\]]+)\]', prompt)[0]
103 return value if value != 'Y' else 'n'
104
105__builtin__.raw_input = patched_raw_input