pyenv-virtualenv for Windows 1.2
A 'pyenv' plugin to manage Python virtual environments, depending on different Python versions, for various Python projects.
Loading...
Searching...
No Matches
tre Namespace Reference

Functions

str getProjectPropertyFileStr (str file_path)
 Get the content of project property file.
 
 tree ((Path, str) root_path, int recursion_level=-1, bool limit_to_directories=False, int length_limit=1000, tuple exclude=())
 Given a directory path, print a visual tree structure.
 

Variables

str space = '\x1b[94m \x1b[0m'
 
str branch = '\x1b[94m│ \x1b[0m'
 
str tee = '\x1b[94m├───\x1b[0m'
 
str last = '\x1b[94m└───\x1b[0m'
 

Function Documentation

◆ getProjectPropertyFileStr()

str tre.getProjectPropertyFileStr ( str file_path)

Get the content of project property file.

Parameters
file_pathPath to project property file.
Returns
Text, which the file is containing or empty string in case of error.

Definition at line 52 of file tre.py.

52def getProjectPropertyFileStr(file_path: str) -> str:
53 result = ''
54 # noinspection PyBroadException
55 try:
56 with open(file_path, 'r') as f:
57 result = f.read().strip()
58 return result
59 except:
60 log.error(sys.exc_info())
61 return ''
62
error((str, tuple) msg)
Log error message colored to console only.
Definition log.py:179

◆ tree()

tre.tree ( (Path, str) root_path,
int recursion_level = -1,
bool limit_to_directories = False,
int length_limit = 1000,
tuple exclude = () )

Given a directory path, print a visual tree structure.

Output and highlight the content of 'pyenv-virtualenv' project property files with colors:

  • LIGHT CYAN: Python version.
  • LIGHT YELLOW: Virtual environment name.
Parameters
root_pathFolder path, from which the tree will be parsed.
recursion_levelMax recursion level to parse. Default: -1 = unlimited recursion.
limit_to_directoriesFlag to permit parsing for folders only. Default: False = parse for both, files and folders
length_limitMax. output length of the tree in lines. Default: 1000.
excludeList of folder names to exclude. Default empty list = nothing to exclude.

Definition at line 78 of file tre.py.

84):
85 # Accept type "str" coercible to "Path"
86 if isinstance(root_path, str):
87 root_path = Path(root_path)
88 # Initialize
89 files = 0
90 directories = 0
91
92 def is_junction(path: str) -> bool:
93 import os
94 try:
95 return bool(os.readlink(path))
96 except OSError:
97 return False
98
99 def inner(
100 dir_path: Path,
101 prefix: str= '',
102 level: int = -1,
103 excl: tuple = ()
104 ):
105 nonlocal files, directories
106 if not level:
107 return # 0, stop iterating
108 # Scan for files and folders Path objects
109 if limit_to_directories:
110 objects = dir_path.iterdir()
111 contents = [d for d in objects if d.is_dir()]
112 contents1 = list(objects)
113 else:
114 contents = list(dir_path.iterdir())
115 contents1 = contents
116 # Detect file ".tree-excludes" in files
117 excl1 = excl
118 for content in contents1:
119 if content.is_file() and (content.name == '.tree-excludes'):
120 with open(content, 'r') as f:
121 excl1 = eval(f.read())
122 if content not in contents:
123 contents.insert(0, content)
124 break
125 # End if
126 # End for
127 pointers = [tee] * (len(contents) - 1) + [last]
128 for pointer, path in zip(pointers, contents):
129 if path.is_dir():
130 # Exclude spam folders
131 excluded = False
132 for item in excl1:
133 if path.parts[-1] == item:
134 excluded = True
135 break
136 # End if
137 # End for
138 if excluded: continue
139 # OUTPUT: colorized directory
140 name = path.name
141 if (
142 (hasattr(path, 'is_junction') and path.is_junction()) # Python 3.12+
143 or
144 (is_junction(str(path))) # Python 3.11-
145 ):
146 name = '\x1b[105m {} \x1b[0m \x1b[95m→\x1b[0m \x1b[104m {} \x1b[0m'.format(
147 name,
148 str(path.readlink()).split('\\\\?\\')[-1]
149 )
150 else: # Is directory
151 name = '\x1b[104m {} \x1b[0m'.format(name)
152 yield prefix + pointer + name
153 directories += 1
154 extension = branch if pointer == tee else space
155 # OUTPUT: path recursively
156 yield from inner(
157 path,
158 prefix=prefix+extension,
159 level=level - 1,
160 excl=excl1
161 )
162 elif not limit_to_directories:
163 # OUTPUT: colorized file
164 name = path.name
165 if path.is_symlink():
166 name1 = '\x1b[95m● {}\x1b[0m'.format(name)
167 if name == '.python-version':
168 name1 += ' \x1b[96m({})\x1b[0m'.format(
169 getProjectPropertyFileStr(str(path))
170 )
171 elif name == '.python-env':
172 name1 += ' \x1b[93m({})\x1b[0m'.format(
173 getProjectPropertyFileStr(str(path))
174 )
175 elif name == '.tree-excludes':
176 name1 += ' \x1b[95m{}\x1b[0m'.format(
177 getProjectPropertyFileStr(str(path))
178 )
179 else:
180 name1 = '\x1b[95m● {} → \x1b[37m● {}\x1b[0m'.format(
181 name,
182 str(path.readlink())
183 )
184 else: # Is file
185 name1 = '\x1b[37m● {}\x1b[0m'.format(name)
186 if name == '.python-version':
187 name1 += ' \x1b[96m({})\x1b[0m'.format(
188 getProjectPropertyFileStr(str(path))
189 )
190 elif name == '.python-env':
191 name1 += ' \x1b[93m({})\x1b[0m'.format(
192 getProjectPropertyFileStr(str(path))
193 )
194 elif name == '.tree-excludes':
195 name1 += ' \x1b[95m{}\x1b[0m'.format(
196 getProjectPropertyFileStr(str(path))
197 )
198 else:
199 name1 = '\x1b[37m● {}\x1b[0m'.format(name)
200 yield prefix + pointer + name1
201 files += 1
202
203 # Output the root directory path in the beginning
204 print('\x1b[104m {} \x1b[0m'.format(str(root_path)))
205 # Exclude spam folders
206 for excl_item in exclude:
207 if root_path.parts[-1] == excl_item:
208 return
209 # Iterate through the folder tree
210 iterator = inner(
211 root_path,
212 level=recursion_level,
213 excl=exclude
214 )
215 # OUTPUT: folder tree
216 for line in islice(iterator, length_limit):
217 print(line)
218 if next(iterator, None):
219 # Obey to the length_limit
220 print('... length_limit, {}, reached, counted:'.format(length_limit))
221 # OUTPUT: statistics
222 print(
223 '\n{} directories'.format(directories) + (
224 ', {} files'.format(files) if files else ''
225 )
226 )
227
228
229# --- END OF CODE ------------------------------------------------------

Variable Documentation

◆ space

str tre.space = '\x1b[94m \x1b[0m'

Definition at line 41 of file tre.py.

◆ branch

str tre.branch = '\x1b[94m│ \x1b[0m'

Definition at line 42 of file tre.py.

◆ tee

str tre.tee = '\x1b[94m├───\x1b[0m'

Definition at line 43 of file tre.py.

◆ last

str tre.last = '\x1b[94m└───\x1b[0m'

Definition at line 44 of file tre.py.