Import Expression Parser (for lack of a better name)
Import Expression Parser converts code like this:
urllib.parse!.quote('hello there')
Into this equivalent code:
__import__('importlib').import_module('urllib.parse').quote('hello there')
Usage
>>> import import_expression
>>> import_expression.eval('collections!.Counter("bccdddeeee")')
Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1})
The other public functions are exec, compile, parse, and find_imports.
See their docstrings for details.
By default, the filename for SyntaxErrors is <string>.
To change this, pass in a filename via the filename kwarg.
Reusing compiled code objects
import_expression.eval/exec/compile should not be passed strings in a tight loop.
Doing so will recompile the string every time. Instead, you should pre-compile the string to a code object
and pass that to import_expression.eval / import_expression.exec.
For example, instead of this:
for line in sys.stdin:
print(import_expression.eval('foo!.bar(l)', dict(l=line))
Prefer this:
code = import_expression.compile('foo!.bar(l)', mode='eval')
for line in sys.stdin:
print(import_expression.eval(code, dict(l=line)))
REPL usage
Run import-expression for an import expression enabled REPL.
Run import-expression -a for a REPL that supports both import expressions and top level await (3.8+).
Combine these with -i to open a REPL after running the file specified on the command line. -ia allows top-level await.
See import-expression --help for more details.
Running a file
Run import-expression <filename.py>.
Limitations / Known Issues
- Due to the hell that is f-string parsing, and because
!is already an operator inside f-strings, import expressions inside f-strings will likely never be supported. - Due to python limitations, results of
import_expression.execwill have no effect on the caller's globals or locals without an explicitglobalsargument. - Unlike real operators, spaces before and after the import expression operator (such as
x ! .y) are not supported.
License
Copyright © io mintz <io@mintz.cc>. All Rights Reserved.
Licensed under the MIT License. See the LICENSE file for details.
Metadata
Release files for import-expression 2.2.1.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| import_expression-2.2.1.post1.tar.gz | 16.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| import_expression-2.2.1.post1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.0 kB
Release files / import_expression-2.2.1.post1.tar.gz
| Download URL | import_expression-2.2.1.post1.tar.gz |
|---|---|
| Size | 16.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c831bf26bef7edf36a97b34c687b962e7abe06116c66f00e14f9a3218623d4f
|
|
BLAKE2b-256 checksum How to use checksums |
95dd4c561ce20064985b2a7d3eadb4002c981c8906a4efd309a0b595acb2727a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.12.7
|
Release files / import_expression-2.2.1.post1-py3-none-any.whl
| Download URL | import_expression-2.2.1.post1-py3-none-any.whl |
|---|---|
| Size | 23.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b3677e889816e0dbdcc7f42f4534071c54c667f32c71097522ea602f6497902
|
|
BLAKE2b-256 checksum How to use checksums |
3892437a1dbc58241770198dc4d966a2e6363bd684f961070623aec975cfe03f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.12.7
|