def _load_ptl(name, filename, file=None): if not file: try: file = open(filename, "rb") except IOError: return None path, ext = os.path.splitext(filename) pyc_filename = path + ".pyc" module = _load_pyc(name, filename, pyc_filename) if module is not None: return module try: output = open(pyc_filename, "wb") except IOError: output = None try: code = compile_template(file, filename, output) except: if output: output.close() os.unlink(pyc_filename) raise else: if output: output.close() return _exec_module_code(code, name, filename)
return _exec_module_code(code, name, filename) def _load_ptl(name, filename, file=None): if not file: try: file = open(filename, "rb") except IOError: return None path, ext = os.path.splitext(filename) ptlc_filename = path + PTLC_EXT try: output = open(ptlc_filename, "wb") except IOError, msg: output = None try: code = compile_template(file, filename, output) except: # don't leave a corrupt .ptlc file around if output: output.close() os.unlink(ptlc_filename) raise else: if output: output.close() return _exec_module_code(code, name, filename) # Constant used to signal a PTL files PTLC_FILE = 128 PTL_FILE = 129
ptlc_filename = path + PTLC_EXT try: output_fd = os.open(ptlc_filename, os.O_WRONLY | os.O_CREAT, 0644) try: fcntl.flock(output_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError, e: if e.errno == errno.EWOULDBLOCK: fcntl.flock(output_fd, fcntl.LOCK_EX) os.close(output_fd) return _load_ptlc(name, ptlc_filename) raise output = os.fdopen(output_fd, 'wb') except (OSError, IOError), e: output = None try: code = compile_template(file, filename, output) except: # don't leave a corrupt .ptlc file around if output: output.close() os.unlink(ptlc_filename) raise else: if output: output.close() return _exec_module_code(code, name, filename) # Constant used to signal a PTL files PTLC_FILE = 128 PTL_FILE = 129