Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

automodinit

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

automodinit

Solves the problem of forgetting to keep __init__.py files up to date

  • 0.16
  • PyPI
  • Socket score

Maintainers
1

automodinit v0.16 5th March 2017: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Niall Douglas http://www.nedproductions.biz/ See http://pypi.python.org/pypi/automodinit for latest version Go to http://github.com/ned14/automodinit to report bugs

This package fixes a small problem which has been bugging me throughout years of python development: forgetting to keep a module's init.py up to date with new files added. This causes the following, irritating problems:

  1. Test suites don't find docstring tests.
  2. Static analysis tools don't see some module content in all.
  3. Things which scan themselves for plugins mismatch what os.listdir() returns as against what the module import table has.
  4. I waste time over something which should take care of itself.
  5. os.listdir() based solutions tend to fail when freezed into an executable binary because they don't understand running from inside a ZIP archive.

So here's how to make the problem go away forever:

  1. Include the automodinit package into your setup.py dependencies.
  2. Replace all init.py files like this:

all = ["I will get rewritten"]

Don't modify the line above, or this line!

import automodinit automodinit.automodinit(name, file, globals()) del automodinit

Anything else you want can go after here, it won't get modified.

  1. That's it! From now on importing a module will set all to a list of .py[co] files in the module and will also import each of those files as though you had typed:

    for x in all: import x

    Therefore the effect of "from M import *" matches exactly "import M".

Customising: -=-=-=-=-=-= automodinit can take the following additional parameters:

filter: This is a callable which will be passed a list of tuples (loader, modulename, ispkg) which is the output of pkgutil.iter_modules() for the calling module. Return only those which you want to be imported. importFindings: Defaults to True. Set to False to not auto-import the contents of all.

Version history: -=-=-=-=-=-=-=-=

  • v0.16 5th Mar 2017

    • Fixed stripping of init.py file encoding. Thanks to wtyerogers for reporting this.
    • Removed suggestion this is the smallest package on pypi. Thanks to asl97 for reporting this.
    • Tell PyPi we are under the MIT licence. Thanks to njwhite for reporting this.
  • v0.13 9th Feb 2013

    • Fixed a bug where the source distribution would fail to install due to not including distribute_setup.py. Thanks to kanzure for reporting this.
  • v0.12 5th Mar 2012

    • Fixed a bug where isinstance would occasionally fail. Turns out the pkgutil loading mechanism doesn't check to see if the module is already loaded, so it was loading duplicates whose types wouldn't compare.
  • v0.11 5th Mar 2012

    • Fixed some typos in Readme.txt
    • Typically what worked before packaging did not work after. Fixed!
  • v0.10 5th Mar 2012 First release

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