Package: ideas
ideasIdeas: making it easier to extend Python’s syntax.DocumentationEverything you need will eventually be found here.Installationpython -m pip install ideasDepending on your OS, you might need to writepython3orpyinstead ofpythonin the above.Dependenciestoken-utilsPython 3.6+Some examples, using custom encoding, bytecode transformations or
AST transformations do not work with Python 3.8 and/or later versions.
However, they could be adapted to work with these later versions.UsageSuppose that you want to usefunctionas a keyword in Python, to mean
the same thing aslambda, enabling you to write# my_program.pysquare=functionx:x**2print(f"{square(4)}is the square of 4.")if__name__=="__main__":print("This is run as the main module.")You can do this using an import hook.The simplest (but flawed) way to create such an import hook withideaswould be as follows:fromideasimportimport_hookdeftransform(source,**kwargs):returnsource.replace("function","lambda")import_hook.create_hook(transform_source=transform)Then, you'd need to use it. Since there is already an example import hook
that does this, we'll use it instead.  All you have to do
is instruct Python to add the import hook, and it will be used
from that point on. There are two ways to do so.The first method would be to create a second file which adds the
required import hook and then imports your program.# Let's call this 'loader.py'fromideas.examplesimportfunction_keywordfunction_keyword.add_hook()importmy_programYou could then run this second file the normal way.python loader.pySo,my_program.py, and any other module that could be
loaded by it would recognize thatfunctionis a valid alternative tolambda.
However, using this method,loaderwould be the__main__script, and
the code block defined byif __name__ == "__main__":inmy_programwould be ignored.The second way is to skip the creation of a loader, and runmy_programdirectly
usingideas:python -m ideas my_program -t function_keywordThis method will ensure thatmy_programis the__main__module.Many more examples can be found in thedocumentation,
including a better way to create such an import hook and information about
a console (REPL) that supports code transformations.ToolsThis project usesblackfor formatting,pytestfor running tests,
andflake8for linting with custom
settings compatible with black.ContactYou can either file an issue or email me atAndre.Roberge@gmail.com.LicenseMITInfrequently asked questions, comments and answersAs I write (and occasionally update) this README file, nobody else knows
about this project. So, it is impossible for there to be some Frequently Asked
Questions.  In their absence, the following imaginary dialogue has been written.Why?Because it is fun. If this is not enough of a justification for you, have a look atmotivationwhich contains a longer, and possibly more serious answer.Is it safe to use in production code?Most probably not.But your example works perfectly well in my code; can I use it in my
project?I don't think you should if your project is to be used by anyone else
but yourself.I found a bug.Wonderful, please file an issue so that I can attempt to fix it. Note however
that some examples are just proof of concepts and are not meant to be robust.Can I contribute code for a new example?Yes, please, by all means. But I suggest that you first create an issue that gives
an overview of what you wish to accomplish.I found a cool use of import hooks in another project, different from
all of your examples. Could you include it?Please, give me the details, and I will see if I caneasilyinclude
a similar example and if I think it is worthwhile to do so.I think that the explanation you have written for X could be improved upon.Please tell me more by filing an issue first and possibly creating a pull-request afterwards.I have an idea for a new example, but do not know how to write the code for it.First, make sure you go through all the existing examples to confirm that
none can easily be adapted to do what you want.
If that is the case, file an issue ...
but please don't be offended if I don't write code for it
and end up closing the issue: I already have too many ideas of my own
for this project, too many other projects, and not
enough time to do all that I want.That being said, I do like tinkering with import hooks ...In file X.py, you do not respect convention Y from PEP-8. This is unacceptable
in a Python project.Seriously?This project is all about exploring potential changes
to Python's syntax, some of which are downright crazy, and you complain
about a PEP-8 violation? ...Ok, perhaps you can tell me, and I will see if it makes sense to change what I wrote.People from the Python-ideas mailing lists mentioned that I should look
at this project for my idea, but I don't know where to start.Please, have a look at thedocumentation.
If you go through all the examples in the order that they are presented, you
might learn how to implement your idea.What about something likefrom __future__ import braces?No.SeeExamples that will never be included.You're no fun. Anyway, why this silly name for a project?
The word "ideas" has nothing to do with import hooks in Python.For this project, I was thinking of usingimporthook(singular) orimporthooks(plural). However, there is already a project namedimporthookon Pypi and I thought that using the plural form would
likely be just too confusing.I settled onideasas I am guessing that the main application would be
for people to try out suggestions from or forpython-ideas.
A few days later, I came up with the above image and this cemented my
highly subjective opinion that this choice of name might not such a bad idea.Anyway, enough of this banter. If you want to know more about this project,
please consult thedocumentation.