def test_get_relpath(): relpath = Path('abc') assert relpath.get_relpath() is relpath assert relpath.get_relpath(os.path.curdir) == relpath cwd = os.getcwd() pardir = os.path.basename(cwd) assert relpath.get_relpath(os.path.pardir) == os.path.join(pardir, 'abc')
def test_is_abspath(): abspath = Path.from_argv() assert abspath.is_abspath() assert abspath == sys.argv[0] relpath = Path('abc') # rel path assert relpath.get_abspath().is_abspath() assert relpath.get_abspath() == os.path.abspath('abc')
def test_abspath_get_parent_on_unix(): src_path = os.path.join('/', 'd', 'e') path = Path(src_path) assert path.get_parent(1) == path.dirname assert path.get_parent(1) == os.path.join('/', 'd') assert path.get_parent(2) == '/' assert path.get_parent(3) is None assert path.get_parent(4) is None
def test_relpath_get_parent_when_root_is_curdir(): src_path = os.path.join(os.path.curdir, 'a', 'b', 'c') path = Path(src_path) assert path.get_parent(1) == path.dirname assert path.get_parent(1) == os.path.join(os.path.curdir, 'a', 'b') assert path.get_parent(2) == os.path.join(os.path.curdir, 'a') assert path.get_parent(3) == os.path.curdir for i in range(1, 10): assert path.get_parent(3+i) == os.path.join(*([os.path.pardir] * i))
def test_path_equals_on_win32(): # ignore case for l, r in itertools.product(['c:', 'C:'], repeat=2): assert Path(l) == Path(r) # ignore drive sep for l, r in itertools.product(['c:\\', 'C:'], repeat=2): assert Path(l) == Path(r) path_str, path = get_path_from_argv_0() assert path == path_str.upper() assert path == path_str.lower() assert path == os.path.normcase(path_str.upper()) assert path == os.path.normcase(path_str.lower())
def test_path_div(): ' allow to use `Path() / str()` expr ' path = Path.from_argv() new_path = path / 'abc' assert isinstance(path, Path) assert new_path == os.path.join(sys.argv[0], 'abc')
def pipenv_context(pipfile_path): from pipenv.project import Project proj = Project(chdir=False) proj._pipfile_location = pipfile_path activate_this_path = Path( proj.virtualenv_location) / 'Scripts' / 'activate_this.py' run_py(activate_this_path) yield
def test_abspath_with_root_on_win32(): path_str = 'c:\\' path = Path(path_str) assert os.path.isabs(path_str) assert path.is_abspath() == os.path.isabs(path_str) assert path.get_abspath().is_abspath() assert path.get_abspath() == os.path.abspath(path_str) # c: should be abspath path_str = 'c:' path = Path(path_str) assert not os.path.isabs(path_str) assert path.is_abspath() assert path.get_abspath() == os.path.abspath('c:\\')
def test_abspath_dirname_and_name(): path_str, path = get_path_from_argv_0() assert path.dirname == os.path.dirname(path_str) assert path.name == os.path.basename(path_str) if NT: path = Path('a:\\b\\c\\d') dirname = path.dirname assert str(dirname) == 'a:\\b\\c' dirname = dirname.dirname assert str(dirname) == 'a:\\b' dirname = dirname.dirname assert str(dirname) == 'a:\\' assert Path('C:').dirname is None assert Path('C:\\').dirname is None else: assert Path('/').dirname is None
def __init__(self, cwd): self._local_file = self._get_exists_or_first(NodeInfo.from_path(cwd), CONF_NAMES) self._global_file = self._get_exists_or_first( NodeInfo.from_path(Path.from_home()), CONF_NAMES) self._local_conf: dict = None self._global_conf: dict = None self._is_local_new: bool = None self._local_changed = False
def __init__(self): self._template_dir = Path(sys.argv[0]).dirname self._setup = self._open_text('setup.py') self._templates = {} self._add_template('install-from-pypi.bat') self._add_template('uninstall.bat') self._readonlys = {} self._add_readonly('install.bat') self._add_readonly('upload.bat') self._add_readonly('upload_proxy.bat')
def cmds_in_dir(self, path, desc=None): if not os.path.isdir(path): return names = [] for name in os.listdir(path): names.append(Path(name).pure_name) msg = 'commands in {}' if desc: msg += f' ({desc})' self.log_info(msg, path) self.print_cmds(names)
def __init__(self, ctx: click.Context, root=None): if root is None: cwd = Path.from_cwd() else: dirinfo =DirectoryInfo(root) if not dirinfo.is_directory(): ctx.fail(f'{root} is not a dir') cwd = dirinfo.path from .core.ioc import pkgit_ioc pkgit_ioc.register_value('cwd', cwd)
def test_path_from_caller_module_root(): path = Path.from_caller_module_root() assert path == __file__ dot = os.path.abspath('.') caller_module_root = [ m.path_caller_module_root for m in _get_example_modules() ] assert caller_module_root == [ os.path.join(dot, 'tests', 'ex_module_2.py'), os.path.join(dot, 'tests', 'ex_package_1', '__init__.py'), os.path.join(dot, 'tests', 'ex_package_1', '__init__.py'), os.path.join(dot, 'tests', 'ex_package_1', '__init__.py'), os.path.join(dot, 'tests', 'ex_package_1', '__init__.py'), ]
def create(cls, path): metadata = PackageMetadata() packages = find_packages(where=Path(path).dirname or '.') if packages: metadata.name = cls.optional_strip('name', packages[0]) else: metadata.name = cls.input_str('name') metadata.version = cls.optional_strip('version', metadata.version) metadata.author = cls.input_str('author') metadata.author_email = cls.input_str('author email') metadata.url = cls.input_str('url') return metadata
def run(self, argv): args = docopt(__doc__) # mode if args['--with-workdir']: self._mode = 'cd' p = os.path.abspath(args['<dirpath>']) if not os.path.isdir(p): self.log_error('{} is not a directory', p) exit(1) path = Path(p) content = self.load_template(self._get_template_name()).format_map( {'path': path}) self.write_script(path, args['--dest'] or path.name, content)
def pick(): print(yellow('[?]'), 'please pick a file that contains entry points:') idx = pick_item(filelist, defidx=find_default_on_files(filelist)) if idx == -1: return filepath = filelist[idx] content = FileInfo(filepath).read_text() matches = re.findall('^def ([^(]+)\\(.+$', content, flags=re.M) # func names def find_default_on_funcs(items): for wkname in ('cli', 'main',): for i, x in enumerate(items): if x == wkname: return i if not matches: logger.error('no python files was founds from {}.'.format(lightgreen(filepath))) return print(yellow('[?]'), 'please pick a func from {}:'.format(lightgreen(Path(filepath).name))) idx = pick_item(matches, defidx=find_default_on_funcs(matches)) if idx == -1: return funcname = matches[idx] msg = yellow('[?]') msg += 'please input the entry points name (default is {})'.format( lightgreen(packages_names[0]) ) print(msg, end='') entry_points = input().strip() or packages_names[0] module_name = filepath[:-3].replace(os.sep, '.') # remove `.py` and more script = '{entry_points}={module_name}:{funcname}'.format( entry_points=entry_points, module_name=module_name, funcname=funcname, ) if script not in console_scripts: console_scripts.append(script) return _pick_more('entry_points')
def test_relpath_dirname_and_name(): path_str = 's' path = Path(path_str) dirname, name = path.dirname, path.name assert str(dirname) == '.' assert str(name) == 's' dirname, name = dirname.dirname, dirname.name assert str(dirname) == '..' assert str(name) == '.' dirname, name = dirname.dirname, dirname.name assert str(dirname) == os.path.join('..', '..') assert str(name) == '..' dirname, name = dirname.dirname, dirname.name assert str(dirname) == os.path.join('..', '..', '..') assert str(name) == '..' dirname, name = dirname.dirname, dirname.name assert str(dirname) == os.path.join('..', '..', '..', '..') assert str(name) == '..'
def load_template(self, name): path = os.path.join(Path(sys.argv[0]).dirname, 'templates', name) return FileInfo(path).read_text()
def get_conf_file() -> FileInfo: path = Path.from_home() / '.config' / 'clearcache' / 'conf.json' return FileInfo(path)
def test_abspath_property_on_win32(): # test root: for root_str in ['c:', 'c:\\']: root_path = Path(root_str) assert root_path.name == 'c:'
def test_abspath_propertye_on_unix(): # test root: root_path = Path('/') assert root_path.name == '/'
def test_relpath_get_parent_when_path_is_pardir(): src_path = os.path.pardir path = Path(src_path) assert path.get_parent(1) == path.dirname for i in range(1, 10): assert path.get_parent(i) == os.path.join(*([os.path.pardir] * (1+i)))
def test_get_abspath(): relpath = Path('abc') abspath = relpath.get_abspath() assert abspath.is_abspath() assert abspath == os.path.abspath('abc')
def test_abspath_join(): # join with pardir path = Path.from_argv() / os.path.pardir assert path.is_abspath() assert path == os.path.dirname(sys.argv[0])
def test_is_abspath(): assert not Path('abc').is_abspath()
import coloredlogs from fsoopify import Path, FileInfo SCRIPTS_ROOT = os.environ.get('SCRIPTS_ROOT', None) def get_logger(name): logger = logging.getLogger(name) coloredlogs.install( level='DEBUG', logger=logger, fmt='[%(levelname)s] %(name)s: %(message)s', field_styles={'levelname': {'color': 'cyan'}} ) return logger MAIN_NAME = Path(sys.argv[0]).name.pure_name APP_LOGGER = get_logger(MAIN_NAME) if not SCRIPTS_ROOT: APP_LOGGER.error('Please setup the env-var `SCRIPTS_ROOT`') exit(1) if not os.path.isdir(SCRIPTS_ROOT): APP_LOGGER.error(f'<{SCRIPTS_ROOT}> is not a dir.') exit(2) class BaseApp: ctx: click.Context = None path: str = None name: str = None
# -*- coding: utf-8 -*- # # Copyright (c) 2019~2999 - Cologler <*****@*****.**> # ---------- # a module use for test Path.from_caller_? api # ---------- from fsoopify import Path path_caller_file = Path.from_caller_file() path_caller_module_root = Path.from_caller_module_root()
def test_path_from_argv(): path = Path.from_argv() assert path == sys.argv[0]
def test_path_from_main_file(): path = Path.from_main_file() assert path.endswith('.py') # should run by pytest