Metadata-Version: 2.1
Name: django-read-only-admin
Version: 0.17.2
Summary: Really full Django read only admin implementation
Home-page: https://github.com/vint21h/django-read-only-admin/
Author: Alexei Andrushievich
Author-email: vint21h@vint21h.pp.ua
License: MIT
Keywords: django,django-admin,admin,read-only
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.2
Classifier: Framework :: Django :: 4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Topic :: Utilities
Description-Content-Type: text/x-rst
License-File: MIT-LICENSE
Requires-Dist: django (<4.1,>=2.2)
Requires-Dist: django-appconf (>=1.0.3)
Provides-Extra: test
Requires-Dist: attrs (==21.4.0) ; extra == 'test'
Requires-Dist: bandit (==1.7.2) ; extra == 'test'
Requires-Dist: black (==22.1.0) ; extra == 'test'
Requires-Dist: bpython (==0.22.1) ; extra == 'test'
Requires-Dist: check-manifest (==0.47) ; extra == 'test'
Requires-Dist: check-wheel-contents (==0.3.4) ; extra == 'test'
Requires-Dist: coverage (==6.3.1) ; extra == 'test'
Requires-Dist: coveralls (==3.3.1) ; extra == 'test'
Requires-Dist: curlylint (==0.13.0) ; extra == 'test'
Requires-Dist: darglint (==1.8.1) ; extra == 'test'
Requires-Dist: dennis (==0.9) ; extra == 'test'
Requires-Dist: django-stubs (==1.9.0) ; extra == 'test'
Requires-Dist: dlint (==0.12.0) ; extra == 'test'
Requires-Dist: dodgy (==0.2.1) ; extra == 'test'
Requires-Dist: dotenv-linter (==0.3.0) ; extra == 'test'
Requires-Dist: flake8-annotations-complexity (==0.0.6) ; extra == 'test'
Requires-Dist: flake8-annotations-coverage (==0.0.5) ; extra == 'test'
Requires-Dist: flake8-broken-line (==0.4.0) ; extra == 'test'
Requires-Dist: flake8-bugbear (==22.1.11) ; extra == 'test'
Requires-Dist: flake8-builtins (==1.5.3) ; extra == 'test'
Requires-Dist: flake8-coding (==1.3.2) ; extra == 'test'
Requires-Dist: flake8-cognitive-complexity (==0.1.0) ; extra == 'test'
Requires-Dist: flake8-comprehensions (==3.8.0) ; extra == 'test'
Requires-Dist: flake8-debugger (==4.0.0) ; extra == 'test'
Requires-Dist: flake8-django (==1.1.2) ; extra == 'test'
Requires-Dist: flake8-docstrings (==1.6.0) ; extra == 'test'
Requires-Dist: flake8-eradicate (==1.2.0) ; extra == 'test'
Requires-Dist: flake8-executable (==2.1.1) ; extra == 'test'
Requires-Dist: flake8-expression-complexity (==0.0.9) ; extra == 'test'
Requires-Dist: flake8-fixme (==1.1.1) ; extra == 'test'
Requires-Dist: flake8-functions (==0.0.6) ; extra == 'test'
Requires-Dist: flake8-mutable (==1.2.0) ; extra == 'test'
Requires-Dist: flake8-no-implicit-concat (==0.3.3) ; extra == 'test'
Requires-Dist: flake8-print (==4.0.0) ; extra == 'test'
Requires-Dist: flake8-return (==1.1.3) ; extra == 'test'
Requires-Dist: flake8-simplify (==0.17.1) ; extra == 'test'
Requires-Dist: flake8-typing-imports (==1.12.0) ; extra == 'test'
Requires-Dist: flake8-use-fstring (==1.3) ; extra == 'test'
Requires-Dist: flake8-variables-names (==0.0.4) ; extra == 'test'
Requires-Dist: flake8 (==3.9.2) ; extra == 'test'
Requires-Dist: importlib-metadata (==4.11.1) ; extra == 'test'
Requires-Dist: interrogate (==1.5.0) ; extra == 'test'
Requires-Dist: isort (==5.10.1) ; extra == 'test'
Requires-Dist: mypy (==0.931) ; extra == 'test'
Requires-Dist: pep8-naming (==0.12.1) ; extra == 'test'
Requires-Dist: pip-outdated (==0.5.0) ; extra == 'test'
Requires-Dist: polint (==0.4) ; extra == 'test'
Requires-Dist: pre-commit-hooks (==4.1.0) ; extra == 'test'
Requires-Dist: pre-commit (==2.17.0) ; extra == 'test'
Requires-Dist: pygments (==2.11.2) ; extra == 'test'
Requires-Dist: pylint-django (==2.5.2) ; extra == 'test'
Requires-Dist: pylint (==2.12.2) ; extra == 'test'
Requires-Dist: pyroma (==3.2) ; extra == 'test'
Requires-Dist: pytest-cov (==3.0.0) ; extra == 'test'
Requires-Dist: pytest-django (==4.5.2) ; extra == 'test'
Requires-Dist: pytest-extra-durations (==0.1.3) ; extra == 'test'
Requires-Dist: pytest-instafail (==0.4.2) ; extra == 'test'
Requires-Dist: pytest-sugar (==0.9.4) ; extra == 'test'
Requires-Dist: pytest-timer[termcolor] (==0.0.11) ; extra == 'test'
Requires-Dist: pytest (==7.0.1) ; extra == 'test'
Requires-Dist: readme-renderer (==32.0) ; extra == 'test'
Requires-Dist: removestar (==1.3.1) ; extra == 'test'
Requires-Dist: seed-isort-config (==2.2.0) ; extra == 'test'
Requires-Dist: tabulate (==0.8.9) ; extra == 'test'
Requires-Dist: tox-gh-actions (==2.9.1) ; extra == 'test'
Requires-Dist: tox-pyenv (==1.1.0) ; extra == 'test'
Requires-Dist: tox (==3.24.5) ; extra == 'test'
Requires-Dist: twine (==3.8.0) ; extra == 'test'
Requires-Dist: wheel (==0.37.1) ; extra == 'test'
Requires-Dist: yesqa (==1.3.0) ; extra == 'test'

.. django-read-only-admin
.. README.rst


A django-read-only-admin documentation
======================================

|GitHub|_ |Coveralls|_ |pypi-license|_ |pypi-version|_ |pypi-python-version|_ |pypi-django-version|_ |pypi-format|_ |pypi-wheel|_ |pypi-status|_

    *django-read-only-admin is a Django reusable application that fully implement read only admin*

.. contents::

Installation
------------
* Obtain your copy of source code from the git repository: ``$ git clone https://github.com/vint21h/django-read-only-admin.git``. Or download the latest release from https://github.com/vint21h/django-read-only-admin/tags/.
* Run ``$ python ./setup.py install`` from the repository source tree or the unpacked archive. Or use pip: ``$ pip install django-read-only-admin``.

Configuration
-------------
* Add ``"read_only_admin"`` to ``settings.INSTALLED_APPS``.

.. code-block:: python

    # settings.py

    INSTALLED_APPS += [
        "read_only_admin",
    ]

* Run ``$ python ./manage.py migrate``.
* Then add ``user/group`` ``change/delete/add/readonly`` model permissions.

Settings
--------
``READ_ONLY_ADMIN_PERMISSION_PREFIX``
    Read-only permission prefix. Defaults to: ``"readonly"``.

``READ_ONLY_ADMIN_PERMISSION_NAME_PREFIX``
    Read-only permission name prefix. Defaults to: ``"Read only"``.

``READ_ONLY_ADMIN_EMPTY_ACTIONS``
    Empty admin actions list (exclude superusers) or just remove delete selected action. Defaults to: ``True``.

Usage
-----
Just inherit your custom Django admin class from ``read_only_admin.admin.ReadonlyAdmin``.

.. code-block:: python

    # admin.py

    from read_only_admin.admin import ReadonlyAdmin


    class MyCustomAdmin(ReadonlyAdmin):

        ...

Also tabular and stacked inlines are supported.

.. code-block:: python

    # admin.py

    from read_only_admin.admin import (
        ReadonlyStackedInline,
        ReadonlyTabularInline,
    )


    class MyCustomTabularInline(ReadonlyTabularInline):

        model: Type[Model] = MyModel
        extra: int = 0


    class MyCustomStackedInline(ReadonlyStackedInline):

        model: Type[Model] = MyModel
        extra: int = 0

If you use ``list_editable`` in your custom admin classes, copy ``read_only_admin/templates/admin/pagination.html`` to your project ``templates/admin`` directory.

Contributing
------------
1. `Fork it <https://github.com/vint21h/django-read-only-admin/>`_
2. Install `GNU Make <https://www.gnu.org/software/make/>`_
3. Install and configure `pyenv <https://github.com/pyenv/pyenv/>`_ and `pyenv-virtualenv plugin <https://github.com/pyenv/pyenv-virtualenv/>`_
4. Install and configure `direnv <https://github.com/direnv/direnv/>`_
5. Create environment config from example

.. code-block:: bash

    cp .env.example .env

6. Install development dependencies:

.. code-block:: bash

    make install

7. Create your fix/feature branch:

.. code-block:: bash

    git checkout -b my-new-fix-or-feature

8. Check code style and moreover:

.. code-block:: bash

    make check

9. Run tests:

.. code-block:: bash

    make test

10. Push to the branch:

.. code-block:: bash

    git push origin my-new-fix-or-feature

11. `Create a new Pull Request <https://github.com/vint21h/django-read-only-admin/compare/>`_

Licensing
---------
django-read-only-admin uses the MIT license. Please check the MIT-LICENSE file for more details.

Some part of code fairly stolen from teh internets with reference to the source. So, if you author of this code, please contact me.

Contacts
--------
**Project Website**: https://github.com/vint21h/django-read-only-admin/

**Author**: Alexei Andrushievich <vint21h@vint21h.pp.ua>

For other authors list see AUTHORS file.

.. |GitHub| image:: https://github.com/vint21h/django-read-only-admin/workflows/build/badge.svg
    :alt: GitHub
.. |Coveralls| image:: https://coveralls.io/repos/github/vint21h/django-read-only-admin/badge.svg?branch=master
    :alt: Coveralls
.. |pypi-license| image:: https://img.shields.io/pypi/l/django-read-only-admin
    :alt: License
.. |pypi-version| image:: https://img.shields.io/pypi/v/django-read-only-admin
    :alt: Version
.. |pypi-django-version| image:: https://img.shields.io/pypi/djversions/django-read-only-admin
    :alt: Supported Django version
.. |pypi-python-version| image:: https://img.shields.io/pypi/pyversions/django-read-only-admin
    :alt: Supported Python version
.. |pypi-format| image:: https://img.shields.io/pypi/format/django-read-only-admin
    :alt: Package format
.. |pypi-wheel| image:: https://img.shields.io/pypi/wheel/django-read-only-admin
    :alt: Python wheel support
.. |pypi-status| image:: https://img.shields.io/pypi/status/django-read-only-admin
    :alt: Package status
.. _GitHub: https://github.com/vint21h/django-read-only-admin/actions/
.. _Coveralls: https://coveralls.io/github/vint21h/django-read-only-admin?branch=master
.. _pypi-license: https://pypi.org/project/django-read-only-admin/
.. _pypi-version: https://pypi.org/project/django-read-only-admin/
.. _pypi-django-version: https://pypi.org/project/django-read-only-admin/
.. _pypi-python-version: https://pypi.org/project/django-read-only-admin/
.. _pypi-format: https://pypi.org/project/django-read-only-admin/
.. _pypi-wheel: https://pypi.org/project/django-read-only-admin/
.. _pypi-status: https://pypi.org/project/django-read-only-admin/


