{"shas":[["02553907cfa5b4877ad27f154aa685b09ed70063","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Move the ExtensionResource class into webapi/resources.py.\n\nExtensionResource is no longer provided by webapi. This separates the\ncode out cleanly, and prevents the webapi code from failing to import if\nextension support wasn't turned on for a Django project.","Christian Hammond"],["27f2d51a6554e9b35c7bc4685b41c65071fb66c4","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Fix some missing imports.","Christian Hammond"],["e670e14be6835af84b60355e5c4698c505714b0f","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Merge branch 'master' into extensions","Christian Hammond"],["006c4505bdf75b4ccbc4a764ec6f19070891bce0","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Bump to version 0.7.0 dev.\n\nThis will be the first release with extensions.","Christian Hammond"],["8ed04e3e06729a04457f9aa65ed91fd0c7edfcae","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Introduce support for loadable extensions.\n\nThis provides a framework for loadable extensions. Installable Django\napps can make use of this to allow third parties to extend their app.\n\nApps can provide various hooks into their codebase. These can come in\nthe form of template hooks, URL hooks, admin UI hooks, and other\nin-process hooks.\n\nA webapp will provide a single ExtensionManager, specifying the name of\na Python setuptools entrypoint. This entrypoint will be scanned for any\ninstalled packages on the system that provide Extension subclasses.\nIntegration in the Administration UI is provided by linking to the\nprovided admin URLs.\n\nWebApps will typically only have a single ExtensionManager, but it is\npossible for it to have multiple ExtensionManagers, allowing different\nmodules to provide their own extension mechanisms.\n\nExtensions themselves can depend on other extensions. Dependency\nresolution happens automatically when enabling extensions.\n\nExtensions also have easy support for configuration forms in the admin\nUI. All data is automatically loaded and stored in the database.","Christian Hammond"],["663b9e764c95429c6fe831125a84f1074c45a7b3","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Fix extensions with no listed webapi resources.\n\nExtensions that didn't contain webapi resources would fail, due to the\nExtension.resources list not being defined. We now define this by\ndefault for all extensions.","Christian Hammond"],["ad45cf7dbc6ac270fe027a35b6c4373c6c85dc8e","a3e5bf1e23f9b398fd796b3f030b30fdb8b825f9@chipx86.com","Fix unintentional loading of extensions by Django's template system.\n\nDjango 1.3 changed how variable resolution works by calling any callable\nvariable it finds. This includes classes. That meant that when listing\nextensions, we would end up having every extension invoked, multiple\ntimes. A typical extension would end up being instantiated and hooked\ninto every hook over 10 times.\n\nNow instead of passing the class, a dict is passed with all the info we\ncare about. It also allows us to get rid of a filter that was being\nused, which is keeps things a little bit simpler.","Christian Hammond"]],"ref":"refs/heads/master","size":7,"head":"ad45cf7dbc6ac270fe027a35b6c4373c6c85dc8e","push_id":43568043}