Skip to main content

Parses a superset of Python allowing for inline module import expressions

Project description

Import Expression Parser (for lack of a better name)

Build Status Coverage Status

Import Expression Parser converts code like this:

x = collections.deque!(maxsize=2)

Into this roughly equivalent code:

from collections import deque
x = deque(maxsize=2)
del deque

Usage

>>> import import_expression
>>> import_expression.eval('collections!.Counter("bccdddeeee")')
Counter({'e': 4, 'd': 3, 'c': 2, 'b': 1})

By default, the filename for SyntaxErrors is <string>. To change this, pass in a filename via the filename kwarg.

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 !a, a!b, urllib!.parse! is not yet detected.
  • Due to python limitations, results of import_expression.exec will have no effect on the caller's globals without an explicit globals 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 this new hipster cool cat license called the Charity Public License v1.10.0. If you are not a hipster cool cat, please contact me to arrange a private license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

import_expression-0.2.0-py3-none-any.whl (9.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page