=====
New Features
------------
Server
^^^^^^
* Associate application & extension package item with checksum.
* After uploading an application or extension package, the item metadata will include `sha512` metadata entry.
* After uploading additional files, the item metadata remains unchanged.
* After removing the second to last files, the `sha512` item metadata is updated to match the checksum of the
last file.
* After removing all the files, the `sha512` item metadata is set to an empty string.
Documentation
-------------
* Remove obsolete ``cleanNightly.sh`` script and update faq.
* Update developer installation instructions to use Girder 3.x commands.
Bug fixes
---------
Python Client
^^^^^^^^^^^^^
* Fix python client test requirements adding "pytest" and "pytest-girder".
* Attempting to install the python client using Python ``< 3.7`` will now report an error message.
Server
^^^^^^
* Update extension & package delete endpoints
* Explicitly check that user can access the associated application folder.
* Return a confirmation message.
Internal
--------
* Require Python ``>= 3.6`` for the server. This is consistent with the version associated with the Girder test Docker
image `girder/girder_test:latest <https://hub.docker.com/r/girder/girder_test/tags>`_ built
from `girder/.circleci/Dockerfile <https://github.com/girder/girder/blob/d994d93a00257a17eeeab7e0b6fa4a54f5658550/.circleci/Dockerfile>`_.
* The required version previously set to "3.7" in version "0.7.0" for both client and server but it
was not enforced due to an incorrect setup parameter. It should have been specified as ``python_requires``
instead of ``python_require`` (as defined in PEP 440).
* Re-factor and simplify code based on the newly introduced pre-commit hooks and ruff checks (``codespell``, ``pyupgrade`` and ``ruff``).
* Add type annotations to python client CLI.
Tests
-----
* Add GitHub Actions workflow to run `pre-commit <https://github.com/pre-commit/pre-commit-hooks#hooks-available>`_ hooks.
* Add "codespell" pre-commit hook and fix typos.
* Add `pyupgrade <https://github.com/asottile/pyupgrade>`_ pre-commit hook specifying "--py36-plus"
and updates codes accordingly.
* Add `ruff <https://beta.ruff.rs/docs/usage/#pre-commit>`_ pre-commit hook enabling the following checks:
::
"A", flake8-builtins
"ARG", flake8-unused-arguments
"B", flake8-bugbear
"BLE", flake8-blind-except
"C4", flake8-comprehensions
"COM", flake8-commas
"D", pydocstyle (aka flake8-docstrings)
"E", "F", "W", flake8
"EXE", flake8-executable
"EM", flake8-errmsg
"G", flake8-logging-format
"ICN", flake8-import-conventions
"ISC", flake8-implicit-str-concat
"N", pep8-naming
"PIE", flake8-pie
"PGH", pygrep-hooks
"PL", pylint
"PT", flake8-pytest-style
"Q", flake8-quotes
"RSE", flake8-raise
"RUF", Ruff-specific
"S", flake8-bandit
"SIM", flake8-simplify
"SLF", flake8-self
"YTT", flake8-2020