def ocropus_find_file(fname, gz=True): """Search for `fname` in one of the OCRopus data directories, as well as the current directory). If `gz` is True, search also for gzipped files. Result of searching $fname is the first existing in: * $base/$fname * $base/$fname.gz # if gz * $base/model/$fname * $base/model/$fname.gz # if gz * $base/data/$fname * $base/data/$fname.gz # if gz * $base/gui/$fname * $base/gui/$fname.gz # if gz $base can be four base paths: * `$OCROPUS_DATA` environment variable * current working directory * ../../../../share/ocropus from this file's install location * `/usr/local/share/ocropus` * `$PREFIX/share/ocropus` ($PREFIX being the Python installation prefix, usually `/usr`) """ possible_prefixes = [] if os.getenv("OCROPUS_DATA"): possible_prefixes.append(os.getenv("OCROPUS_DATA")) possible_prefixes.append(os.curdir) possible_prefixes.append(os.path.normpath(os.path.join( os.path.dirname(inspect.getfile(inspect.currentframe())), os.pardir, os.pardir, os.pardir, os.pardir, "share", "ocropus"))) possible_prefixes.append("/usr/local/share/ocropus") # datarootdir is None in windows so don't add it to search list if sysconfig.get_config_var("datarootdir") is not None: possible_prefixes.append(os.path.join( sysconfig.get_config_var("datarootdir"), "ocropus")) # Unique entries with preserved order in possible_prefixes # http://stackoverflow.com/a/15637398/201318 possible_prefixes = [possible_prefixes[i] for i in sorted(numpy.unique(possible_prefixes, return_index=True)[1])] for prefix in possible_prefixes: if not os.path.isdir(prefix): continue for basename in [".", "models", "data", "gui"]: if not os.path.isdir(os.path.join(prefix, basename)): continue full = os.path.join(prefix, basename, fname) if os.path.exists(full): return full if gz and os.path.exists(full + ".gz"): return full + ".gz" raise FileNotFound(fname)
def glob_all(args): """Given a list of command line arguments, expand all of them with glob.""" result = [] for arg in args: if arg[0] == "@": with open(arg[1:], "r") as stream: expanded = stream.read().split("\n") expanded = [s for s in expanded if s != ""] else: expanded = sorted(glob.glob(arg)) if len(expanded) < 1: raise FileNotFound("%s: expansion did not yield any files" % arg) result += expanded return result
def finddir(name): """Find some OCRopus-related resource by looking in a bunch off standard places. (This needs to be integrated better with setup.py and the build system.)""" local = getlocal() path = name if os.path.exists(path) and os.path.isdir(path): return path path = local+name if os.path.exists(path) and os.path.isdir(path): return path _,tail = os.path.split(name) path = tail if os.path.exists(path) and os.path.isdir(path): return path path = local+tail if os.path.exists(path) and os.path.isdir(path): return path raise FileNotFound("file '"+path+"' not found in . or /usr/local/share/ocropus/")