Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/breuleux/codefind
Find code objects and their referents
https://github.com/breuleux/codefind
Last synced: 9 days ago
JSON representation
Find code objects and their referents
- Host: GitHub
- URL: https://github.com/breuleux/codefind
- Owner: breuleux
- Created: 2021-05-21T18:42:30.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-09-08T23:31:26.000Z (2 months ago)
- Last Synced: 2024-10-18T18:55:24.660Z (28 days ago)
- Language: Python
- Size: 53.7 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Codefind
* Find code objects from filename and qualname
* Find all functions that have a certain code
* Change the code of functions
* Used by [jurigged](https://github.com/breuleux/jurigged)## find_code
```python
from codefind import find_codedef f(x):
return x + xdef adder(x):
def f(y):
return x + yreturn f
add1 = adder(1)
assert find_code("f" filename=__file__) is f.__code__
# Can find inner closures
assert find_code("adder", "f", filename=__file__) is add1.__code__# Also works with module name
assert find_code("adder", "f", module=__module__) is add1.__code__
```## get_functions
```python
from codefind import get_functionsdef f(x):
return x + xdef adder(x):
def f(y):
return x + yreturn f
add1 = adder(1)
add2 = adder(2)
add3 = adder(3)assert get_functions(f.__code__) == [f]
# Finds all functions with the same code (in any order)
assert set(get_functions(add1.__code__)) == {add1, add2, add3}
```## conform
### Simple usage
```python
from codefind import conformdef f(x):
return x + xdef g(x):
return x * xprint(f(5)) # 10
conform(f, g)
print(f(5)) # 25
```### Updating all closures
```python
def adder(x):
def f(y):
return x + yreturn f
def muller(x):
def f(y):
return x * yreturn f
add1 = adder(1)
add2 = adder(2)
add3 = adder(3)print(add1(5)) # 6
print(add2(5)) # 7
print(add3(5)) # 8conform(add1.__code__, muller(0).__code__)
print(add1(5)) # 5
print(add2(5)) # 10
print(add3(5)) # 15
```