A tool to automatically fix Django deprecations.

Overview

Django Codemod

CI Status Documentation Status Test coverage percentage

Poetry black pre-commit

PyPi Status pyversions license LoC

A tool to help upgrade Django projects to newer version of the framework by automatically fixing deprecations.

The problem

When maintaining a Django site, over time you'll find yourself to a point where you'll need to update to the next major version of Django. When Django APIs changes, functions move or are removed, changing usages in your project might add up to many changes. Often these changes are simple to do, but sometimes a simple "find and replace" is not possible.

Take, for instance, the removal of the url() function from Django 4.0, to be replaced by re_path(). In simple cases, you might even want to switch to path(), which has a nicer API. A typical Django project easily has 100's or routes, so this simple decision becomes a much longer task when to be made for each of them.

This solution

This project solves this problem by providing codemodders for simple changes like this. A codemodder re-writes your code from the old way to the new way.

With the help of AST analysis, we're able to understand what modifications are applicable, remove imports as they become irrelevant, and add missing ones as they are needed.

To continue the example, the tool will look at the route in the url() call, and decide whether the regular expression may be replaced by one of the built-in URL converters and use path() or stick to a regex and use re_path().

Interested? Check out the documentation for usage and the full list of codemodders.

What this tool is not

  • This tool is best suited for Django sites, NOT for reusable Django applications. The project needs to target a single Django version, e.g. 3.1.x.
  • You do NOT need to install this tool as part of your project dependencies, it is a CLI tool, not a Django package to be installed in your site.

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Bruno Alla

πŸ’» πŸ“– πŸ€”

Aarni Koskela

πŸ’» πŸ€” ⚠️

Adam Johnson

πŸ“–

Nikita Sobolev

πŸ“–

Chris VanderKolk

πŸ’»

John Vandenberg

πŸ› πŸ’»

Anjishnu

πŸš‡

Drew Winstel

πŸ€”

This project follows the all-contributors specification. Contributions of any kind welcome!

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

Comments
  • Add an option to skip paths (e.g. node_modules)

    Add an option to skip paths (e.g. node_modules)

    Is your feature request related to a problem? Please describe. I use django-tailwind for CSS in a project. One of the JS libraries it imports has some Python 2 code that it puts inside my theme/static_src/node_modules/ directory, which is already in my .gitignore. Because my project is using Python 3.8, the code modder throws syntax errors for those 23 files (which is technically correct).

    Describe the solution you'd like I'd like the ability to exclude paths (via a command-line switch or other means) or have the option to have django-codemod skip files ignored by git.

    Additional context N/A, but this tool is excellent!

    enhancement 
    opened by drewbrew 8
  • Add support for adding `on_delete` for `ForeignKey` and `OneToOneField`

    Add support for adding `on_delete` for `ForeignKey` and `OneToOneField`

    Adding a feature to handle adding the on_delete argument to ForeignKey and OneToOneField types: https://docs.djangoproject.com/en/dev/releases/1.9/#foreignkey-and-onetoonefield-on-delete-argument

    TODO:

    • [x] Add some more tests
    • [x] Address adding the models import if it doesn't exist
    • [x] Support detecting the on_delete call when passed as the second position argument
    • [x] Fix on_delete matcher which doesn't seem to be finding things right
    • [x] Test internally with a complicated codebase πŸ’ƒ

    Stretch:

    • [ ] ~Add an input so folks can add in subclasses~ (Edit: Probably going to do this in a future PR)

    Refs #23

    enhancement 
    opened by cvanderkolk 7
  • Allow both removed-in and deprecated-in

    Allow both removed-in and deprecated-in

    I'm not sure if this is a bit controversial since the original explicitly only allowed either option, but I don't see harm in a "just bring me up to date fam" option (speaking of which, --all could be added separately).

    • makes --removed-in and --deprecated-in repeatable
    • allows mixing and matching the two * adds an --all option
    opened by akx 6
  • codemod goes all over the place and triggers OOM

    codemod goes all over the place and triggers OOM

    I was building my first fixer, found at its current horrid state at https://github.com/browniebroke/django-codemod/pull/123 (4803651c26), then I ran the following on a file which definitely needs the update

    djcodemod --removed-in 2.0 redirect_urls/utils.py
    

    The file in question can be found at https://github.com/pmac/django-redirect-urls/

    I go get a coffee, and get otherwise distracted, etc, etc. A few hours later I come back and find my machine is out of memory, and codemod is having fun in my pnpm global node_modules , which is rather large.

    I am sure I will find out how and why, but it isnt immediately clear to me, and I dare say something needs to prevent this happening to other people.

    I had thousands of these:

    Codemodding /home/jayvdb/.asdf/installs/nodejs/8.14.0/.npm/pnpm-global/1/node_modules/.registry.npmjs.org/node-gyp/3.8.0/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
    Traceback (most recent call last):
      File "/usr/lib/python3.8/site-packages/libcst/_parser/base_parser.py", line 152, in _add_token
        plan = stack[-1].dfa.transitions[transition]
    KeyError: ReservedString(,)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.8/site-packages/libcst/codemod/_cli.py", line 283, in _parallel_exec_process_stub
        input_tree = parse_module(
      File "/usr/lib/python3.8/site-packages/libcst/_parser/entrypoints.py", line 71, in parse_module
        result = _parse(
      File "/usr/lib/python3.8/site-packages/libcst/_parser/entrypoints.py", line 51, in _parse
        result = parser.parse()
      File "/usr/lib/python3.8/site-packages/libcst/_parser/base_parser.py", line 111, in parse
        self._add_token(token)
      File "/usr/lib/python3.8/site-packages/libcst/_parser/base_parser.py", line 187, in _add_token
        raise ParserSyntaxError(
    libcst._exceptions.ParserSyntaxError: Syntax Error @ 31:17.
    Incomplete input. Encountered ',', but expected ':'.
    
      except OSError, e:
                    ^
    
    Failed to codemod /home/jayvdb/.asdf/installs/nodejs/8.14.0/.npm/pnpm-global/1/node_modules/.registry.npmjs.org/node-gyp/3.8.0/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
    

    Here is the output at the end when it was killed (kinda nice that my oom killer did kill this and not my desktop apps, which it often targets first)

    38m 42s 0.0540% complete, 1194h 25m 20s estimated for 1362939 files to go...Terminated
    
    bug 
    opened by jayvdb 6
  • ImportError on an Apple M1 Mac related to libcst

    ImportError on an Apple M1 Mac related to libcst

    Describe the bug A clear and concise description of what the bug is. ImportError on an Apple M1 Mac.

    libcst seems to be installed for x86_64, not the required arm64e.

    To Reproduce Steps to reproduce the behavior:

    % pipx --version

    1.0.0
    

    % pipx install django-codemod

      installed package django-codemod 1.10.0, Python 3.9.12
      These apps are now globally available
        - djcodemod
    done! ✨ 🌟 ✨
    

    % djcodemod run --deprecated-in 1.3 .

    Running codemods: ActionCheckboxNameTransformer
    Executing codemod...
    Traceback (most recent call last):
      File "/Users/cclauss/.local/bin/djcodemod", line 8, in <module>
        sys.exit(djcodemod())
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
        return self.main(*args, **kwargs)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/rich_click/rich_group.py", line 21, in main
        return super().main(*args, standalone_mode=False, **kwargs)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/click/core.py", line 1055, in main
        rv = self.invoke(ctx)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/click/core.py", line 760, in invoke
        return __callback(*args, **kwargs)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/django_codemod/cli.py", line 188, in run
        call_command(command_instance, files)
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/django_codemod/cli.py", line 195, in call_command
        result = parallel_exec_transform_with_prettyprint(
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/libcst/codemod/_cli.py", line 623, in parallel_exec_transform_with_prettyprint
        parse_module(
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/libcst/_parser/entrypoints.py", line 109, in parse_module
        result = _parse(
      File "/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/libcst/_parser/entrypoints.py", line 42, in _parse
        from libcst.native import parse_expression, parse_module, parse_statement
    ImportError: dlopen(/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/libcst/native.cpython-39-darwin.so, 0x0002):
        tried: '/Users/cclauss/.local/pipx/venvs/django-codemod/lib/python3.9/site-packages/libcst/native.cpython-39-darwin.so'
        (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
    

    Additional context Add any other context about the problem here.

    bug 
    opened by cclauss 5
  • ParserSyntaxError when a module have a

    ParserSyntaxError when a module have a "from django.utils import timezone" import

    Describe the bug

    I'm migrating a medium-sized codebase, and I found this strange behavior: if the code has a "from django.utils import timezone" import, a ParserSyntaxError is raised

    $ pre-commit run -a
    djcodemod................................................................Failed
    - hook id: djcodemod
    - exit code: 1
    
    Running codemods: AssignmentTagTransformer, CookieDateTransformer, FixedOffsetTransformer, FloatRangeFormFieldTransformer, FloatRangeModelFieldTransformer, InlineHasAddPermissionsTransformer, ModelsPermalinkTransformer, OnDeleteTransformer, QuerySetPaginatorTransformer, SignalDisconnectWeakTransformer, URLResolversTransformer
    Executing codemod...
    Finished codemodding 62 files!
     - Transformed 62 files successfully.
     - Skipped 0 files.
     - Failed to codemod 0 files.
     - 0 warnings were generated.
    Running codemods: AssignmentTagTransformer, CookieDateTransformer, FixedOffsetTransformer, FloatRangeFormFieldTransformer, FloatRangeModelFieldTransformer, InlineHasAddPermissionsTransformer, ModelsPermalinkTransformer, OnDeleteTransformer, QuerySetPaginatorTransformer, SignalDisconnectWeakTransformer, URLResolversTransformer
    Executing codemod...
    Codemodding /home/luzfcb/projects/big_project/foobar/tests/test_managers.py
    Traceback (most recent call last):
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_parser/base_parser.py", line 152, in _add_token
        plan = stack[-1].dfa.transitions[transition]
    KeyError: ReservedString(import)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/_cli.py", line 295, in _execute_transform
        output_tree = transformer.transform_module(input_tree)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/_command.py", line 88, in transform_module
        tree = self._instantiate_and_run(transform, tree)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/_command.py", line 58, in _instantiate_and_run
        return inst.transform_module(tree)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/_codemod.py", line 108, in transform_module
        return self.transform_module_impl(tree_with_metadata)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/_visitor.py", line 32, in transform_module_impl
        return tree.visit(self)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_nodes/module.py", line 91, in visit
        result = super(Module, self).visit(visitor)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_nodes/base.py", line 235, in visit
        leave_result = visitor.on_leave(self, with_updated_children)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/matchers/_visitors.py", line 512, in on_leave
        retval = CSTTransformer.on_leave(self, original_node, updated_node)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_visitors.py", line 72, in on_leave
        updated_node = leave_func(original_node, updated_node)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/visitors/_add_imports.py", line 393, in leave_Module
        *[
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/codemod/visitors/_add_imports.py", line 394, in <listcomp>
        parse_statement(
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_parser/entrypoints.py", line 100, in parse_statement
        result = _parse(
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_parser/entrypoints.py", line 51, in _parse
        result = parser.parse()
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_parser/base_parser.py", line 111, in parse
        self._add_token(token)
      File "/home/luzfcb/.cache/pre-commit/repof_bg4wfe/py_env-python3/lib/python3.9/site-packages/libcst/_parser/base_parser.py", line 187, in _add_token
        raise ParserSyntaxError(
    libcst._exceptions.ParserSyntaxError: Syntax Error @ 1:7.
    Incomplete input. Encountered 'import', but expected '.', '...', or 'NAME'.
    
    from  import datetime
          ^
    
    Failed to codemod /home/luzfcb/projects/big_project/foobar/tests/test_managers.py
    
    

    To Reproduce

    pipx install "django-codemod==1.5.5"
    
    echo "from django.utils import timezone" > foobar.py
    
    djcodemod run --deprecated-in 1.9 --deprecated-in 1.10 --deprecated-in 1.11 --deprecated-in 2.0 --deprecated-in 2.1 --deprecated-in 2.2 foobar.py
    
    

    Additional context

    bug 
    opened by luzfcb 5
  • chore(ci): merge test, lint and commitlint workflows

    chore(ci): merge test, lint and commitlint workflows

    Fixes #214

    What this PR does : Merges test.yml, lint.yml and commitlint.yml into a single file ci.yml.

    This is my first ever attempt at dealing with CI, so, do let me know if I need to correct something! Thanks :)

    tests 
    opened by iamshnoo 4
  • Add tests to sdist

    Add tests to sdist

    Describe the feature Currently the tests are not included in the PyPI sdist. As a result in order to do packaging for openSUSE at https://build.opensuse.org/package/show/devel:languages:python:django/python-django-codemod , I need to fetch the sdist from Github, which is a few extra steps.

    Please can the tests be added to the sdist.

    To Reproduce Download sdist from PyPI, untar and see that now tests are present.

    bug 
    opened by jayvdb 3
  • django.contrib.postgres.fields.jsonb not captured by codemod

    django.contrib.postgres.fields.jsonb not captured by codemod

    Link to Django docs Link to release note section where the change and suitable replacement is mentioned:

    https://docs.djangoproject.com/en/dev/releases/3.1/#postgresql-jsonfield

    Quote of the relevant paragraph

    In case links gets outdated/removed:

    PostgreSQL JSONFieldΒΆ django.contrib.postgres.fields.JSONField and django.contrib.postgres.forms.JSONField are deprecated in favor of models.JSONField and forms.JSONField.

    The undocumented django.contrib.postgres.fields.jsonb.KeyTransform and django.contrib.postgres.fields.jsonb.KeyTextTransform are also deprecated in favor of the transforms in django.db.models.fields.json.

    The new JSONFields, KeyTransform, and KeyTextTransform can be used on all supported database backends.

    Deprecation timeline

    • Deprecated in: 3.1
    • Removed in: 4.0

    My thought is that this scenario should be covered by djcodemod although the case is not explicitly covered in the release notes for 3.1.

    It shows up as a deprecation when doing checks but djcodemod doesn't fix:

    mint_develop_django | pool.Pool.properties: (fields.W904) django.contrib.postgres.fields.JSONField is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.
    mint_develop_django |   HINT: Use django.db.models.JSONField instead.
    

    The offending import in models.py is:

    from django.contrib.postgres.fields.jsonb import JSONField
    
    

    Probably an artifact of the way Pycharm offers imports.

    enhancement 
    opened by campbellmc 3
  • Allow running specific codemod(s)

    Allow running specific codemod(s)

    Fixes #207.

    $ djcodemod run --help
    Usage: djcodemod run [OPTIONS] PATH...
    
      Automatically fixes deprecations removed Django deprecations.
    
      This command takes the path to target as argument and a version of Django
      to select code modifications to apply.
    
    Options:
      --removed-in VERSION            The version of Django where feature are
                                      removed.
    
      --deprecated-in VERSION         The version of Django where deprecations
                                      started.
    
      --codemod (see `djcodemod list`)
                                      Choose a specific codemod to run. Can be
                                      repeated.
    
      --help                          Show this message and exit.
    
    opened by akx 3
  • Merge test, lint and commitlint workflows

    Merge test, lint and commitlint workflows

    We have 3 workflows that run during CI at the moment: test.yml, lint.yml and commitlint.yml. We could simplify this by merging them into a single ci.yml workflow, with 3 separate jobs test, lint and commitlint.

    good first issue hacktoberfest 
    opened by browniebroke 3
  • fix(deps): update dependency rich to v13

    fix(deps): update dependency rich to v13

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | rich | <13 -> <14 | age | adoption | passing | confidence |


    Release Notes

    Textualize/rich

    v13.0.0

    Compare Source

    Fixed
    Changed
    Added

    v12.6.0

    Compare Source

    Added
    Fixed
    Changed
    • Removed border from code blocks in Markdown

    v12.5.1

    Compare Source

    Fixed

    v12.5.0

    Compare Source

    Added
    • Environment variables JUPYTER_COLUMNS and JUPYTER_LINES to control width and height of console in Jupyter
    • Markdown friendly Box style, MARKDOWN, for rendering tables ready to copy into markdown files
    • inspect will prefix coroutine functions with async def
    • Style.__add__ will no longer return NotImplemented
    • Remove rich._lru_cache
    Changed
    • Default width of Jupyter console size is increased to 115
    • Optimized Segment.divide
    Fixed

    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • Django 4  django.dispatch.Signal unexpected keyword argument providing_args

    Django 4 django.dispatch.Signal unexpected keyword argument providing_args

    SUSE Tumbleweed has updated django to 4.0, and while fixing django packages I've noticed a lot of packages are failing with this. e.g. https://build.opensuse.org/package/show/home:jayvdb:branches:devel:languages:python:django/python-django-avatar

    https://docs.djangoproject.com/en/dev/releases/4.0/

    See Features deprecated in 3.1 for details on these changes, including how to remove usage of these features. .. The providing_args argument for django.dispatch.Signal is removed.

    Deprecation timeline

    • Deprecated in: 3.1
    • Removed in: 4.0
    enhancement 
    opened by jayvdb 5
  • Option to show diffs

    Option to show diffs

    Is your feature request related to a problem? Please describe. When running djcodemod in a build worker, it would be useful to show the changes it made so the logs record the transformations made, and also so it is easy to copy the diffs to submit upstream.

    This is especially useful when working from tarballs, as there is no VCS to be able to generate diffs.

    Describe the solution you'd like A disabled-by-default flag like --show-diffs which emits the changes which are being written to disk as patch-compatible stdout .

    Additional context e.g. it takes a couple of secs to add `djcodemod run --removed-in 4.0 test_project/ to the build scripts for https://build.opensuse.org/package/show/home:jayvdb:branches:devel:languages:python:django/python-django-debreach , to allow me to provide a more detailed issue at https://github.com/lpomfrey/django-debreach/issues/21

    But I really should check the diffs to make sure djcodemod is not introducing bugs in the process, and if there were diffs I could have easily added to the upstream issue an inline patch for the first which djcodemod knows how to fix, which gets them closer to the harder second problem which djcodemod doesnt know how to solve.

    enhancement 
    opened by jayvdb 1
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    github-actions
    .github/workflows/ci.yml
    • actions/checkout v3
    • snok/install-poetry v1.3.3
    • actions/setup-python v4
    • codecov/codecov-action v3.1.1
    • actions/checkout v3
    • actions/setup-python v4
    • actions/checkout v3
    • wagoid/commitlint-github-action v5.3.0
    • actions/checkout v3
    • relekang/python-semantic-release v7.32.2
    .github/workflows/codeql.yml
    • actions/checkout v3
    • github/codeql-action v2
    • github/codeql-action v2
    • github/codeql-action v2
    .github/workflows/hacktoberfest.yml
    • browniebroke/hacktoberfest-labeler-action v2.3.0
    .github/workflows/issue-manager.yml
    • tiangolo/issue-manager 0.4.0
    .github/workflows/labels.yml
    • actions/checkout v3
    • actions/setup-python v4
    .github/workflows/poetry-upgrade.yml
    • browniebroke/github-actions v1
    .github/workflows/semantic-release.yml
    • actions/checkout v3
    • relekang/python-semantic-release v7.32.2
    poetry
    pyproject.toml
    • click <9
    • libcst ==0.4.9
    • pathspec >=0.6,<1
    • rich <13
    • rich-click >=1.0
    • parameterized ^0.8.0
    • pytest ^7.0
    • pytest-cov ^4.0
    • pytest-mock ^3.3
    • myst-parser >=0.16
    • sphinx >=4.0
    • sphinx-rtd-theme >=1.0
    pre-commit
    .pre-commit-config.yaml
    • pre-commit/pre-commit-hooks v4.4.0
    • python-poetry/poetry 1.3.1
    • pre-commit/mirrors-prettier v3.0.0-alpha.4
    • asottile/pyupgrade v3.3.1
    • PyCQA/isort 5.11.4
    • psf/black 22.12.0
    • codespell-project/codespell v2.2.2
    • PyCQA/flake8 6.0.0
    • commitizen-tools/commitizen v2.39.1
    • PyCQA/bandit 1.7.4

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(v1.11.3)
A handy tool for generating Django-based backend projects without coding. On the other hand, it is a code generator of the Django framework.

Django Sage Painless The django-sage-painless is a valuable package based on Django Web Framework & Django Rest Framework for high-level and rapid web

sageteam 51 Sep 15, 2022
pytest-django allows you to test your Django project/applications with the pytest testing tool.

pytest-django allows you to test your Django project/applications with the pytest testing tool.

pytest-dev 1.1k Dec 14, 2022
Duckiter will Automatically dockerize your Django projects.

Duckiter Duckiter will Automatically dockerize your Django projects. Requirements : - python version : python version 3.6 or upper version - OS :

soroush safari 23 Sep 16, 2021
Meta package to combine turbo-django and stimulus-django

Hotwire + Django This repository aims to help you integrate Hotwire with Django ?? Inspiration might be taken from @hotwired/hotwire-rails. We are sti

Hotwire for Django 31 Aug 9, 2022
django-reversion is an extension to the Django web framework that provides version control for model instances.

django-reversion django-reversion is an extension to the Django web framework that provides version control for model instances. Requirements Python 3

Dave Hall 2.8k Jan 2, 2023
Django-environ allows you to utilize 12factor inspired environment variables to configure your Django application.

Django-environ django-environ allows you to use Twelve-factor methodology to configure your Django application with environment variables. import envi

Daniele Faraglia 2.7k Jan 7, 2023
Rosetta is a Django application that eases the translation process of your Django projects

Rosetta Rosetta is a Django application that facilitates the translation process of your Django projects. Because it doesn't export any models, Rosett

Marco Bonetti 909 Dec 26, 2022
Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly.

Cookiecutter Django Powered by Cookiecutter, Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly. Documentati

Daniel Feldroy 10k Dec 31, 2022
Django project starter on steroids: quickly create a Django app AND generate source code for data models + REST/GraphQL APIs (the generated code is auto-linted and has 100% test coverage).

Create Django App ?? We're a Django project starter on steroids! One-line command to create a Django app with all the dependencies auto-installed AND

imagine.ai 68 Oct 19, 2022
django-quill-editor makes Quill.js easy to use on Django Forms and admin sites

django-quill-editor django-quill-editor makes Quill.js easy to use on Django Forms and admin sites No configuration required for static files! The ent

lhy 139 Dec 5, 2022
A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, celery and redis.

Django Channels Websocket Chatbot A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, c

Yunbo Shi 8 Oct 28, 2022
A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a unique id.

Django-URL-Shortener A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a uni

Rohini Rao 3 Aug 8, 2021
Dockerizing Django with Postgres, Gunicorn, Nginx and Certbot. A fully Django starter project.

Dockerizing Django with Postgres, Gunicorn, Nginx and Certbot ?? Features A Django stater project with fully basic requirements for a production-ready

null 8 Jun 27, 2022
APIs for a Chat app. Written with Django Rest framework and Django channels.

ChatAPI APIs for a Chat app. Written with Django Rest framework and Django channels. The documentation for the http end points can be found here This

Victor Aderibigbe 18 Sep 9, 2022
django-dashing is a customisable, modular dashboard application framework for Django to visualize interesting data about your project. Inspired in the dashboard framework Dashing

django-dashing django-dashing is a customisable, modular dashboard application framework for Django to visualize interesting data about your project.

talPor Solutions 703 Dec 22, 2022
Django-MySQL extends Django's built-in MySQL and MariaDB support their specific features not available on other databases.

Django-MySQL The dolphin-pony - proof that cute + cute = double cute. Django-MySQL extends Django's built-in MySQL and MariaDB support their specific

Adam Johnson 504 Jan 4, 2023
Django-Audiofield is a simple app that allows Audio files upload, management and conversion to different audio format (mp3, wav & ogg), which also makes it easy to play audio files into your Django application.

Django-Audiofield Description: Django Audio Management Tools Maintainer: Areski Contributors: list of contributors Django-Audiofield is a simple app t

Areski Belaid 167 Nov 10, 2022
django Filer is a file management application for django that makes handling of files and images a breeze.

django Filer is a file management application for django that makes handling of files and images a breeze.

django CMS Association 1.6k Jan 6, 2023
Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

tzangms 557 Oct 19, 2022