Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import os
3from .iface import Filter, Input, Output
4from .jinjafilter import *
5from .multifilter import *
6from .reversefilter import *
7from .strfilter import *
8from .makofilter import *
9from .nullfilter import *
10from .tar import *
11from .zip import *
12from .dirtree import *
13from .git import *
16def isX(v, x):
17 if not isinstance(v, type):
18 return False
19 if not issubclass(v, x):
20 return False
21 if "Abstract" in v.__name__:
22 return False
23 if v is x:
24 return False
25 return True
28def input_items():
29 for k, v in globals().items():
30 if isX(v, Input):
31 if k.endswith("Input"):
32 k = k[:-len("Input")]
33 yield k, v
36def output_items():
37 for k, v in globals().items():
38 if isX(v, Output):
39 if k.endswith("Output"):
40 k = k[:-len("Output")]
41 yield k, v
44def filter_items():
45 for k, v in globals().items():
46 if isX(v, Filter):
47 if k.endswith("Filter"):
48 k = k[:-len("Filter")]
49 yield k, v
52def auto_detect(filename, defval):
53 extmap = {
54 ".tar.gz": "Tar",
55 ".tar.bz2": "Tar",
56 ".tar.xz": "Tar",
57 ".tar": "Tar",
58 ".tgz": "Tar",
59 ".tbz2": "Tar",
60 ".txz": "Tar",
61 ".zip": "Zip",
62 ".git": "Git",
63 }
64 if os.path.isdir(filename):
65 return "Dir"
66 for k, v in extmap.items():
67 if filename.endswith(k):
68 return v
69 if os.path.exists(os.path.join(filename, ".git")) or filename.startswith("http"):
70 return "Git"
71 if os.path.exists(filename):
72 return "Single"
73 return defval
76def detect_input(fn: str, guess: str) -> Input:
77 return dict(input_items()).get(auto_detect(fn, guess))
80def detect_output(fn: str, guess: str) -> Output:
81 return dict(output_items()).get(auto_detect(fn, guess), DirOutput)