def open(self, src_file=None): """ Open command file Opens output files, if specified :src_file: Source file default, if no extension ext="csrc" If no extension: look for .py, then .csrc in source_directories else look for file in source_directories """ if src_file is None: src_file = self.src_file_name if src_file is None: raise SelectError("open has No src_file") """ Check name as given, then name.py, then name.csrc """ path = SlTrace.getSourcePath(src_file, report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".py", report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".crsrc", report=False, req=False) if path is None: raise SelectError("open can't find %s(.py, .crsrc) in %s" % (src_file, SlTrace.getSourceDirs(string=True))) ext = None match = re.search(r'\.([^.]+)$', path) self.file_type = "py" # Default type if match: ext = match.group(1) if ext == "py": self.file_type = "py" elif ext == "csrc": self.file_type = "csrc" else: self.file_type = "py" self.src_file_path = path self.src_file_name = os.path.basename(path) # Record self.eof = False # Set True at EOF if self.file_type == "csrc": try: if self.src_lst or SlTrace.trace("csrc"): SlTrace.lg("Open %s" % self.src_file_path) self.in_file = open(self.src_file_path, "r") except IOError as e: errno, strerror = e.args SlTrace.lg("Can't open command source file %s: %d %s" % (self.src_file_path, errno, strerror)) return False self.eof = False return True
def procFilePy(self, inFile): inPath = SlTrace.getSourcePath(inFile, req=False) if inPath is None: self.error("inFile({} was not found".format(inFile)) return False with open(inPath) as f: try: code = compile(f.read(), inPath, 'exec') except Exception as e: tbstr = traceback.extract_stack() SlTrace.lg("Compile Error in %s\n %s)" % (inPath, str(e))) return False try: exec(code) except Exception as e: etype, evalue, tb = sys.exc_info() tbs = traceback.extract_tb(tb) SlTrace.lg("Execution Error in %s\n%s)" % (inPath, str(e))) inner_cmds = False for tbfr in tbs: # skip bottom (in dots_commands.py) tbfmt = 'File "%s", line %d, in %s' % ( tbfr.filename, tbfr.lineno, tbfr.name) if not inner_cmds and tbfr.filename.endswith( "dots_commands.py"): inner_cmds = True SlTrace.lg(" --------------------" ) # show bottom (in dots_commands.py) SlTrace.lg(" %s\n %s" % (tbfmt, tbfr.line)) return False self.eof = True # Consider at end of file return True
def get_file_path(self, src_file=None, req=True): """ Get absolute file path, if one :src_file: name or relative path default: self.src_file_name :req: Raise error if not found default: True """ if src_file is None: src_file = self.src_file_name path = SlTrace.getSourcePath(src_file, report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".py", report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".csrc", report=False, req=False) if path is None: if req: dir_str = SlTrace.getSourceDirs(string=True) SelectReport(None, "File Control", f"open can't find {src_file}(.py, .csrc) in {dir_str}") return path
def get_file_path(self, src_file=None, req=True): """ Get absolute file path, if one :src_file: name or relative path default: self.src_file_name :req: Raise error if not found default: True """ if src_file is None: src_file = self.src_file_name path = SlTrace.getSourcePath(src_file, report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".py", report=False, req=False) if path is None: path = SlTrace.getSourcePath(src_file + ".csrc", report=False, req=False) if path is None: if req: raise SelectError( "open can't find %s(.py, .csrc) in %s" % (src_file, SlTrace.getSourceDirs(string=True))) return path