Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/virtualenv/run/app_data.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 import logging | |
2 import os | |
3 from argparse import Action, ArgumentError | |
4 from tempfile import mkdtemp | |
5 | |
6 from appdirs import user_data_dir | |
7 | |
8 from virtualenv.util.lock import ReentrantFileLock | |
9 from virtualenv.util.path import safe_delete | |
10 | |
11 | |
12 class AppData(object): | |
13 def __init__(self, folder): | |
14 self.folder = ReentrantFileLock(folder) | |
15 self.transient = False | |
16 | |
17 def __repr__(self): | |
18 return "{}".format(self.folder.path) | |
19 | |
20 def clean(self): | |
21 logging.debug("clean app data folder %s", self.folder.path) | |
22 safe_delete(self.folder.path) | |
23 | |
24 def close(self): | |
25 """""" | |
26 | |
27 | |
28 class TempAppData(AppData): | |
29 def __init__(self): | |
30 super(TempAppData, self).__init__(folder=mkdtemp()) | |
31 self.transient = True | |
32 logging.debug("created temporary app data folder %s", self.folder.path) | |
33 | |
34 def close(self): | |
35 logging.debug("remove temporary app data folder %s", self.folder.path) | |
36 safe_delete(self.folder.path) | |
37 | |
38 | |
39 class AppDataAction(Action): | |
40 def __call__(self, parser, namespace, values, option_string=None): | |
41 folder = self._check_folder(values) | |
42 if folder is None: | |
43 raise ArgumentError("app data path {} is not valid".format(values)) | |
44 setattr(namespace, self.dest, AppData(folder)) | |
45 | |
46 @staticmethod | |
47 def _check_folder(folder): | |
48 folder = os.path.abspath(folder) | |
49 if not os.path.exists(folder): | |
50 try: | |
51 os.makedirs(folder) | |
52 logging.debug("created app data folder %s", folder) | |
53 except OSError as exception: | |
54 logging.info("could not create app data folder %s due to %r", folder, exception) | |
55 return None | |
56 write_enabled = os.access(folder, os.W_OK) | |
57 if write_enabled: | |
58 return folder | |
59 logging.debug("app data folder %s has no write access", folder) | |
60 return None | |
61 | |
62 @staticmethod | |
63 def default(): | |
64 for folder in AppDataAction._app_data_candidates(): | |
65 folder = AppDataAction._check_folder(folder) | |
66 if folder is not None: | |
67 return AppData(folder) | |
68 return None | |
69 | |
70 @staticmethod | |
71 def _app_data_candidates(): | |
72 key = str("VIRTUALENV_OVERRIDE_APP_DATA") | |
73 if key in os.environ: | |
74 yield os.environ[key] | |
75 else: | |
76 yield user_data_dir(appname="virtualenv", appauthor="pypa") | |
77 | |
78 | |
79 __all__ = ( | |
80 "AppData", | |
81 "TempAppData", | |
82 "AppDataAction", | |
83 ) |