New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

import-expression

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

import-expression

Parses a superset of Python allowing for inline module import expressions

  • 2.2.1.post1
  • PyPI
  • Socket score

Maintainers
1

Import Expression Parser (for lack of a better name)

Coverage Status

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.exec will have no effect on the caller's globals or locals without an explicit globals argument.
  • 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.

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc