Parses a superset of Python allowing for inline module import expressions
Project description
Import Expression Parser (for lack of a better name)
Import Expression Parser converts code like this:
x = collections.deque!(maxsize=2)
Into this equivalent code:
x = importlib.import_module('collections').deque(maxsize=2)
Usage
>>> import import_expression
>>> import_expression.eval('collections!.Counter("bccdddeeee")')
Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1})
By default, the filename for SyntaxError
s is <string>
.
To change this, pass in a filename via the filename
kwarg.
AST usage
Monkey Patching the REPL
>>> urllib.parse!.quote
File "<stdin>", line 1
urllib.parse!.quote
^
SyntaxError: invalid syntax
>>> import import_expression.patch
>>> import_expression.patch.patch(globals())
>>> urllib.parse!.quote
<function quote at 0xdeadbeef>
For convenience, you can also add the following two lines to your sitecustomize.py
:
import import_expression.patch
import_expression.patch.patch()
And all REPL sessions will use the import expression syntax.
Limitations / Known Issues
- Some invalid syntax, such as
urllib!.parse!
is not yet detected, though that still works as though it wasurllib.parse!
. - 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.exec
will have no effect on the caller's globals without an explicitglobals
argument.
FAQ
Actually asked questions for a new project! Golly gee!
-
Why not just use
__import__('x')
?
From the discord.py server:devon#4089: if i want to type
_("thing")
devon#4089: i have to move my fingers between three different locations
devon#4089: both at the end and start of the string
lambda#0987: yeah and [it's] also a pain to type on mobile so ok
devon#4089: <<x>> is slightly less grating \For context, the originally proposed syntax was <<x>>.
License
Copyright © 2018 Benjamin Mintz <bmintz@protonmail.com>. All Rights Reserved.
Licensed under the MIT License. See the LICENSE.md file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for import_expression-0.4.0.post1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24d80997e9eb29ce74fda6c6ea886bb1490f73106d5ac36983f7f02e163e8a16 |
|
MD5 | 6ad4abfcf8cec07d9f7a63484cc6097c |
|
BLAKE2b-256 | 94ffebfc85ae53e06069f6e0f46c46b01888b011bb343106ae7392a257df4c3b |
Hashes for import_expression-0.4.0.post1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4018dbd2a24e341b4720e6ce2ffb30a5ad7ba42b8afe12ffa09b74fe95927512 |
|
MD5 | 8bf6071eb424590bebe114a01128558a |
|
BLAKE2b-256 | 00c4e4b220dce7da425d1b99b053893fa3a65bb85e55696292f4b334fd5545f6 |