Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tierra-colada/pythonguts

Tool aimed at python code correction that allows to automatically find and replace function definition
https://github.com/tierra-colada/pythonguts

Last synced: 4 days ago
JSON representation

Tool aimed at python code correction that allows to automatically find and replace function definition

Awesome Lists containing this project

README

        

# pythonguts
If your project depends on some external python projects and
you want to make some changes in external functions/methods
and then copy/paste these changes automatically - this package may help you.

There is a tool `editpy` wich we will discuss.

Same tool aimed at editing `cpp` files is also available as [cppguts](https://github.com/tierra-colada/cppguts)

## Installation
`pythonguts` is available at [PyPI](https://pypi.org/project/pythonguts/):

```bash
pip install pythonguts
```

## The idea behind `editpy` tool
`editpy` uses [astor](https://github.com/berkerpeksag/astor) to find replaceable functions and replaces matching functions.

To find common function `editpy` checks:
* are they both _functions?_
* do they both have the same name?
* do they both have the same args?
* do they both have the same parent (i.e. classname for example)?

## Example
original function/method definition file **dest.py**:
```python
class MyClass:
def my_method(self, i: float, j: int, k: float) -> float:
return 0

def foo(i: float) -> float:
return i

def bar():
return 0

# this function stays unchanged
def unchanged():
return 0
```

new function/method definition file **src.py**:
```python
class MyClass:
def my_method(self, i: float, j: int, k: float) -> float:
print('new definition')
return 0

def foo(i: float) -> float:
print('new definition')
return i

def bar():
print('new definition')
return 0
```
Run:

`editpy --src-file=src.py --dest-file=dest.py --oldfile-keep`

`--oldfile-keep` (default) is used to keep the original file (it will be renamed by adding `_OLD_N` suffix). Otherwise use `--oldfile-delete` to delete the original file.

Another option is to run the test (though the test deletes all the generated files so you better take a look in `/tests` dir):

`python -m unittest pythonguts.tests.test_pythonguts`