Giter VIP home page Giter VIP logo

import-expression-parser's Introduction

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 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 SyntaxErrors 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 was urllib.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 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 <[email protected]>. All Rights Reserved.
Licensed under the MIT License. See the LICENSE.md file for details.

import-expression-parser's People

Contributors

ioistired avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.