Metadata-Version: 2.1
Name: iabs2rel
Version: 0.1.0
Summary: A Python utility / library to convert absolute Python imports to relative
Home-page: https://github.com/PasaOpasen/iabs2rel
Author: Demetry Pascal
Author-email: qtckpuhdsa@gmail.com
Maintainer: Demetry Pascal
License: MIT
Keywords: import,absolute,relative,cli
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.8
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Requires-Dist: typing-extensions

[![PyPI version](https://badge.fury.io/py/iabs2rel.svg)](https://pypi.org/project/iabs2rel/)
[![Downloads](https://pepy.tech/badge/iabs2rel)](https://pepy.tech/project/iabs2rel)
[![Downloads](https://pepy.tech/badge/iabs2rel/month)](https://pepy.tech/project/iabs2rel)
[![Downloads](https://pepy.tech/badge/iabs2rel/week)](https://pepy.tech/project/iabs2rel)

# iabs2rel

```
pip install iabs2rel
```

A Python utility / library to convert absolute Python imports to relative

## About

This package is purposed for conversion python code imports from absolute to relative. It is very useful in case of nested packages there it is preferable to use `..parent.file` imports instead of `root.package1.package2.package3.parent.file`.

## Advantages

- many parameters to control imports depth and code zones
- high performance
- detailed logging
- CLI allowed

## Limitations

- only `from ... import ...`  imports are allowed; other imports will be not converted to relative
- to use this package u need Python3.8 environment at least, but updating (target) code may be written in older Python
- u often need to specify proper `--python-path` paths to resolve absolute imports 

## CLI

### `iabs2rel`

```
usage: iabs2rel [-h] [--dry-run] [--python-path PYTHON_PATH [PYTHON_PATH ...]] [--allowed-paths ALLOWED_PATHS [ALLOWED_PATHS ...]] [--denied-paths DENIED_PATHS [DENIED_PATHS ...]]
                [--loglevel {NO,ERROR,WARNING,INFO,DEBUG}] [--max-depth MAX_DEPTH]
                sources [sources ...]

Replaces absolute file imports to relative in all sources

positional arguments:
  sources               paths to python files or directories with python files

optional arguments:
  -h, --help            show this help message and exit
  --dry-run, -n         Whether to run without performing file processing operations (default: False)
  --python-path PYTHON_PATH [PYTHON_PATH ...], -p PYTHON_PATH [PYTHON_PATH ...]
                        PYTHONPATH elements to resolve absolute imports; if nothing set then only CWD will be used; absolute imports that cannot be resolved will not be converted to relative (default: )
  --allowed-paths ALLOWED_PATHS [ALLOWED_PATHS ...], -a ALLOWED_PATHS [ALLOWED_PATHS ...]
                        allowed import destination files/folder; if nothing set then any destination is allowed; if absolute import points not to allowed location it will not be converted to relative (default: )
  --denied-paths DENIED_PATHS [DENIED_PATHS ...], -e DENIED_PATHS [DENIED_PATHS ...]
                        forbidden import destination files/folder; if absolute import points to forbidden location (even allowed) it will not be converted to relative (default: )
  --loglevel {NO,ERROR,WARNING,INFO,DEBUG}, -l {NO,ERROR,WARNING,INFO,DEBUG}
                        using loglevel (default: DEBUG)
  --max-depth MAX_DEPTH, -d MAX_DEPTH
                        max relative import depth; 0 means only local imports to same package are allowed (start with 1 dot);1 means 0 + imports 1 level upper (start with 2 dots); higher values are available; values <0
                        disable any limits (default: 1)
```

## `iabs2rel-file`

```
usage: iabs2rel-file [-h] [--destination DESTINATION] [--python-path PYTHON_PATH [PYTHON_PATH ...]] [--allowed-paths ALLOWED_PATHS [ALLOWED_PATHS ...]] [--denied-paths DENIED_PATHS [DENIED_PATHS ...]]
                     [--loglevel {NO,ERROR,WARNING,INFO,DEBUG}] [--max-depth MAX_DEPTH]
                     source

Replaces absolute file imports to relative

positional arguments:
  source                python file path to replace imports

optional arguments:
  -h, --help            show this help message and exit
  --destination DESTINATION, -o DESTINATION
                        destination file; empty means to print to stdout (default: None)
  --python-path PYTHON_PATH [PYTHON_PATH ...], -p PYTHON_PATH [PYTHON_PATH ...]
                        PYTHONPATH elements to resolve absolute imports; if nothing set then only CWD will be used; absolute imports that cannot be resolved will not be converted to relative (default: )
  --allowed-paths ALLOWED_PATHS [ALLOWED_PATHS ...], -a ALLOWED_PATHS [ALLOWED_PATHS ...]
                        allowed import destination files/folder; if nothing set then any destination is allowed; if absolute import points not to allowed location it will not be converted to relative (default: )
  --denied-paths DENIED_PATHS [DENIED_PATHS ...], -e DENIED_PATHS [DENIED_PATHS ...]
                        forbidden import destination files/folder; if absolute import points to forbidden location (even allowed) it will not be converted to relative (default: )
  --loglevel {NO,ERROR,WARNING,INFO,DEBUG}, -l {NO,ERROR,WARNING,INFO,DEBUG}
                        using loglevel (default: DEBUG)
  --max-depth MAX_DEPTH, -d MAX_DEPTH
                        max relative import depth; 0 means only local imports to same package are allowed (start with 1 dot);1 means 0 + imports 1 level upper (start with 2 dots); higher values are available; values <0
                        disable any limits (default: 1)
```

