Update requirements (#3228)

* Remove stat context variables

* Revert "Remove stat context variables"

This reverts commit 0989c308d0.

* remove old backport

* move requirements

* move isort

* move migrations-tests

* add pip-tools as req and add hook

* Use hashes and also run when txt files are added

* Update to hashes in requirements

* update requirements install path

* remove allauth-2fa for a test

* install dev-requirements

* re-enable allauth

* remove hashes from pre normal setup

* Remove version bindings if they are the laest

* move depencies to upper bound

* fix django-money

* remove windows specific requirements

* also install dependencies

* update markdownify

* remove django-admin-shell

* remove unneeded packages

* add docs

* remove pins and fix pre-commit pipeline

* pin django-money

* really remove admin shell

* return default behaviour for money serializer

* pip fix

* update filter name

* set decimal for output

* add migrations

* pin coveralls

* update requirements

Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
This commit is contained in:
Matthias Mair 2022-06-28 14:12:00 +02:00 committed by GitHub
parent 1a90d06acc
commit cf70e4220f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 652 additions and 87 deletions

View File

@ -15,6 +15,10 @@ inputs:
required: false required: false
description: 'Install the InvenTree requirements?' description: 'Install the InvenTree requirements?'
default: 'false' default: 'false'
dev-install:
required: false
description: 'Install the InvenTree development requirements?'
default: 'false'
update: update:
required: false required: false
description: 'Should a full update cycle be run?' description: 'Should a full update cycle be run?'
@ -72,6 +76,10 @@ runs:
sudo apt-get install ${{ inputs.apt-dependency }} sudo apt-get install ${{ inputs.apt-dependency }}
# Invoke commands # Invoke commands
- name: Install dev requirements
if: ${{ inputs.dev-install == 'true' ||inputs.install == 'true' }}
shell: bash
run: pip install -r requirements-dev.txt
- name: Run invoke install - name: Run invoke install
if: ${{ inputs.install == 'true' }} if: ${{ inputs.install == 'true' }}
shell: bash shell: bash

View File

@ -34,7 +34,7 @@ jobs:
- name: Enviroment Setup - name: Enviroment Setup
uses: ./.github/actions/setup uses: ./.github/actions/setup
with: with:
install: true dev-install: true
- name: Run flake8 - name: Run flake8
run: flake8 InvenTree --extend-ignore=D run: flake8 InvenTree --extend-ignore=D
@ -119,6 +119,7 @@ jobs:
uses: ./.github/actions/setup uses: ./.github/actions/setup
with: with:
apt-dependency: gettext poppler-utils apt-dependency: gettext poppler-utils
dev-install: true
update: true update: true
- name: Download Python Code For `${{ env.wrapper_name }}` - name: Download Python Code For `${{ env.wrapper_name }}`
run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }}
@ -168,6 +169,7 @@ jobs:
uses: ./.github/actions/setup uses: ./.github/actions/setup
with: with:
apt-dependency: gettext poppler-utils apt-dependency: gettext poppler-utils
dev-install: true
update: true update: true
- name: Coverage Tests - name: Coverage Tests
run: invoke coverage run: invoke coverage

View File

@ -28,3 +28,14 @@ repos:
rev: '5.10.1' rev: '5.10.1'
hooks: hooks:
- id: isort - id: isort
- repo: https://github.com/jazzband/pip-tools
rev: 6.6.2
hooks:
- id: pip-compile
name: pip-compile requirements-dev.in
args: [--generate-hashes, requirements-dev.in, -o, requirements-dev.txt]
files: ^requirements-dev\.(in|txt)$
- id: pip-compile
name: pip-compile requirements.txt
args: [requirements.in, -o, requirements.txt]
files: ^requirements\.(in|txt)$

View File

@ -33,6 +33,7 @@ class InvenTreeMoneySerializer(MoneyField):
"""Overrite default values.""" """Overrite default values."""
kwargs["max_digits"] = kwargs.get("max_digits", 19) kwargs["max_digits"] = kwargs.get("max_digits", 19)
kwargs["decimal_places"] = kwargs.get("decimal_places", 4) kwargs["decimal_places"] = kwargs.get("decimal_places", 4)
kwargs["required"] = kwargs.get("required", False)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View File

@ -253,7 +253,6 @@ INSTALLED_APPS = [
'django_cleanup.apps.CleanupConfig', # Automatically delete orphaned MEDIA files 'django_cleanup.apps.CleanupConfig', # Automatically delete orphaned MEDIA files
'mptt', # Modified Preorder Tree Traversal 'mptt', # Modified Preorder Tree Traversal
'markdownify', # Markdown template rendering 'markdownify', # Markdown template rendering
'django_admin_shell', # Python shell for the admin interface
'djmoney', # django-money integration 'djmoney', # django-money integration
'djmoney.contrib.exchange', # django-money exchange rates 'djmoney.contrib.exchange', # django-money exchange rates
'error_report', # Error reporting in the admin interface 'error_report', # Error reporting in the admin interface

View File

@ -152,7 +152,6 @@ frontendpatterns = [
# admin sites # admin sites
re_path(f'^{settings.INVENTREE_ADMIN_URL}/error_log/', include('error_report.urls')), re_path(f'^{settings.INVENTREE_ADMIN_URL}/error_log/', include('error_report.urls')),
re_path(f'^{settings.INVENTREE_ADMIN_URL}/shell/', include('django_admin_shell.urls')),
re_path(f'^{settings.INVENTREE_ADMIN_URL}/', admin.site.urls, name='inventree-admin'), re_path(f'^{settings.INVENTREE_ADMIN_URL}/', admin.site.urls, name='inventree-admin'),
# DB user sessions # DB user sessions

View File

@ -420,7 +420,7 @@ class BuildItemList(ListCreateAPI):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'build', 'build',
'stock_item', 'stock_item',
'bom_item', 'bom_item',
@ -438,7 +438,7 @@ class BuildAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'build', 'build',
] ]

View File

@ -289,7 +289,7 @@ class NotificationList(BulkDeleteMixin, ListAPI):
'message', 'message',
] ]
filter_fields = [ filterset_fields = [
'category', 'category',
'read', 'read',
] ]

View File

@ -46,7 +46,7 @@ class CompanyList(ListCreateAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'is_customer', 'is_customer',
'is_manufacturer', 'is_manufacturer',
'is_supplier', 'is_supplier',
@ -169,7 +169,7 @@ class ManufacturerPartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'manufacturer_part', 'manufacturer_part',
] ]
@ -233,7 +233,7 @@ class ManufacturerPartParameterList(ListCreateDestroyAPIView):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'name', 'name',
'value', 'value',
'units', 'units',
@ -333,7 +333,7 @@ class SupplierPartList(ListCreateDestroyAPIView):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
] ]
search_fields = [ search_fields = [
@ -377,7 +377,7 @@ class SupplierPriceBreakList(ListCreateAPI):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
] ]

View File

@ -0,0 +1,20 @@
# Generated by Django 3.2.13 on 2022-06-27 23:08
import company.models
from django.db import migrations
import stdimage.models
class Migration(migrations.Migration):
dependencies = [
('company', '0045_alter_company_notes'),
]
operations = [
migrations.AlterField(
model_name='company',
name='image',
field=stdimage.models.StdImageField(blank=True, force_min_size=False, null=True, upload_to=company.models.rename_company_image, variations={'preview': (256, 256), 'thumbnail': (128, 128)}, verbose_name='Image'),
),
]

View File

@ -31,7 +31,7 @@ class LabelListView(ListAPI):
filters.SearchFilter filters.SearchFilter
] ]
filter_fields = [ filterset_fields = [
'enabled', 'enabled',
] ]

View File

@ -70,7 +70,7 @@ class GeneralExtraLineList:
'reference' 'reference'
] ]
filter_fields = [ filterset_fields = [
'order', 'order',
] ]
@ -540,7 +540,7 @@ class SalesOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
rest_filters.DjangoFilterBackend, rest_filters.DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'order', 'order',
] ]
@ -672,7 +672,7 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI):
'reference': ['reference_int', 'reference'], 'reference': ['reference_int', 'reference'],
} }
filter_fields = [ filterset_fields = [
'customer', 'customer',
] ]
@ -814,7 +814,7 @@ class SalesOrderLineItemList(ListCreateAPI):
'reference', 'reference',
] ]
filter_fields = [ filterset_fields = [
'order', 'order',
'part', 'part',
] ]
@ -990,7 +990,7 @@ class SalesOrderAllocationList(ListAPI):
] ]
# Default filterable fields # Default filterable fields
filter_fields = [ filterset_fields = [
] ]
@ -1069,7 +1069,7 @@ class PurchaseOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
rest_filters.DjangoFilterBackend, rest_filters.DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'order', 'order',
] ]

View File

@ -135,7 +135,7 @@ class CategoryList(ListCreateAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
] ]
ordering_fields = [ ordering_fields = [
@ -281,7 +281,7 @@ class PartSalePriceList(ListCreateAPI):
DjangoFilterBackend DjangoFilterBackend
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
] ]
@ -304,7 +304,7 @@ class PartInternalPriceList(ListCreateAPI):
DjangoFilterBackend DjangoFilterBackend
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
] ]
@ -319,7 +319,7 @@ class PartAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
] ]
@ -1412,7 +1412,7 @@ class PartParameterTemplateList(ListCreateAPI):
filters.SearchFilter, filters.SearchFilter,
] ]
filter_fields = [ filterset_fields = [
'name', 'name',
] ]
@ -1477,7 +1477,7 @@ class PartParameterList(ListCreateAPI):
DjangoFilterBackend DjangoFilterBackend
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
'template', 'template',
] ]
@ -1758,7 +1758,7 @@ class BomList(ListCreateDestroyAPIView):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
] ]
@ -1857,7 +1857,7 @@ class BomItemSubstituteList(ListCreateAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'part', 'part',
'bom_item', 'bom_item',
] ]

View File

@ -0,0 +1,20 @@
# Generated by Django 3.2.13 on 2022-06-27 23:08
from django.db import migrations
import part.models
import stdimage.models
class Migration(migrations.Migration):
dependencies = [
('part', '0079_alter_part_notes'),
]
operations = [
migrations.AlterField(
model_name='part',
name='image',
field=stdimage.models.StdImageField(blank=True, force_min_size=False, null=True, upload_to=part.models.rename_part_image, variations={'preview': (256, 256), 'thumbnail': (128, 128)}, verbose_name='Image'),
),
]

View File

@ -62,7 +62,7 @@ class PluginList(ListAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'active', 'active',
] ]
@ -140,7 +140,7 @@ class PluginSettingList(ListAPI):
DjangoFilterBackend, DjangoFilterBackend,
] ]
filter_fields = [ filterset_fields = [
'plugin__active', 'plugin__active',
'plugin__key', 'plugin__key',
] ]

View File

@ -34,7 +34,7 @@ class ReportListView(ListAPI):
filters.SearchFilter, filters.SearchFilter,
] ]
filter_fields = [ filterset_fields = [
'enabled', 'enabled',
] ]

View File

@ -283,7 +283,7 @@ class StockLocationList(ListCreateAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
] ]
search_fields = [ search_fields = [
@ -1064,7 +1064,7 @@ class StockAttachmentList(AttachmentMixin, ListCreateDestroyAPIView):
filters.SearchFilter, filters.SearchFilter,
] ]
filter_fields = [ filterset_fields = [
'stock_item', 'stock_item',
] ]
@ -1095,7 +1095,7 @@ class StockItemTestResultList(ListCreateDestroyAPIView):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'test', 'test',
'user', 'user',
'result', 'result',
@ -1302,7 +1302,7 @@ class StockTrackingList(ListAPI):
filters.OrderingFilter, filters.OrderingFilter,
] ]
filter_fields = [ filterset_fields = [
'item', 'item',
'user', 'user',
] ]

View File

@ -183,7 +183,11 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer):
def get_purchase_price_string(self, obj): def get_purchase_price_string(self, obj):
"""Return purchase price as string.""" """Return purchase price as string."""
return str(obj.purchase_price) if obj.purchase_price else '-' if obj.purchase_price:
obj.purchase_price.decimal_places_display = 4
return str(obj.purchase_price)
return '-'
purchase_order_reference = serializers.CharField(source='purchase_order.reference', read_only=True) purchase_order_reference = serializers.CharField(source='purchase_order.reference', read_only=True)
sales_order_reference = serializers.CharField(source='sales_order.reference', read_only=True) sales_order_reference = serializers.CharField(source='sales_order.reference', read_only=True)

12
requirements-dev.in Normal file
View File

@ -0,0 +1,12 @@
# Dev requirements for InvenTree
coverage # Unit test coverage
coveralls==2.1.2 # Coveralls linking (for tracking coverage) # PINNED 2022-06-28 - Old version needed for correct upload
django-debug-toolbar # Debug / profiling toolbar
django-test-migrations # Unit testing for database migrations
flake8 # PEP checking
flake8-docstrings # docstring format testing
isort # python import sorting
pep8-naming # PEP naming convention extension
pip-tools # Compile pip requirements
pre-commit # Git pre-commit
setuptools # Standard depenedency

254
requirements-dev.txt Normal file
View File

@ -0,0 +1,254 @@
#
# This file is autogenerated by pip-compile with python 3.9
# To update, run:
#
# pip-compile --generate-hashes --output-file=requirements-dev.txt requirements-dev.in
#
asgiref==3.5.2 \
--hash=sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4 \
--hash=sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424
# via django
certifi==2022.6.15 \
--hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \
--hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412
# via requests
cfgv==3.3.1 \
--hash=sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426 \
--hash=sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736
# via pre-commit
charset-normalizer==2.0.12 \
--hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \
--hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df
# via requests
click==8.1.3 \
--hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \
--hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48
# via pip-tools
coverage==5.5 \
--hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
--hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
--hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
--hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
--hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
--hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
--hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
--hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
--hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
--hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
--hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
--hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
--hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
--hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
--hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
--hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
--hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
--hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
--hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
--hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
--hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
--hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
--hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
--hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
--hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
--hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
--hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
--hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
--hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
--hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
--hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
--hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
--hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
--hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
--hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
--hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
--hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
--hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
--hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
--hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
--hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
--hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
--hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
--hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
--hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
--hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
--hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
--hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
--hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
--hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
--hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
--hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
# via
# -r requirements-dev.in
# coveralls
coveralls==2.1.2 \
--hash=sha256:4430b862baabb3cf090d36d84d331966615e4288d8a8c5957e0fd456d0dd8bd6 \
--hash=sha256:b3b60c17b03a0dee61952a91aed6f131e0b2ac8bd5da909389c53137811409e1
# via -r requirements-dev.in
distlib==0.3.4 \
--hash=sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b \
--hash=sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579
# via virtualenv
django==4.0.5 \
--hash=sha256:502ae42b6ab1b612c933fb50d5ff850facf858a4c212f76946ecd8ea5b3bf2d9 \
--hash=sha256:f7431a5de7277966f3785557c3928433347d998c1e6459324501378a291e5aab
# via django-debug-toolbar
django-debug-toolbar==3.5.0 \
--hash=sha256:89a52128309eb4da12738801ff0c202d2ff8730d1c3225fac6acf630c303e661 \
--hash=sha256:97965f2630692de316ea0c1ca5bfa81660d7ba13146dbc6be2059cf55b35d0e5
# via -r requirements-dev.in
django-test-migrations==1.2.0 \
--hash=sha256:874884ff4e980583cd9f1c986bb9fbfe72b436e759be23004e4f52c26a15f363 \
--hash=sha256:9e8b9b4364fef70dde10a5f85c5a75d447ca2189ec648325610fab1268daec97
# via -r requirements-dev.in
docopt==0.6.2 \
--hash=sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491
# via coveralls
filelock==3.7.1 \
--hash=sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404 \
--hash=sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04
# via virtualenv
flake8==4.0.1 \
--hash=sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d \
--hash=sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d
# via
# -r requirements-dev.in
# flake8-docstrings
# pep8-naming
flake8-docstrings==1.6.0 \
--hash=sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde \
--hash=sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b
# via -r requirements-dev.in
identify==2.5.1 \
--hash=sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa \
--hash=sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82
# via pre-commit
idna==3.3 \
--hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
--hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d
# via requests
isort==5.10.1 \
--hash=sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7 \
--hash=sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951
# via -r requirements-dev.in
mccabe==0.6.1 \
--hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \
--hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f
# via flake8
nodeenv==1.7.0 \
--hash=sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e \
--hash=sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b
# via pre-commit
pep517==0.12.0 \
--hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \
--hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161
# via pip-tools
pep8-naming==0.13.0 \
--hash=sha256:069ea20e97f073b3e6d4f789af2a57816f281ca64b86210c7d471117a4b6bfd0 \
--hash=sha256:9f38e6dcf867a1fb7ad47f5ff72c0ddae544a6cf64eb9f7600b7b3c0bb5980b5
# via -r requirements-dev.in
pip-tools==6.6.2 \
--hash=sha256:6b486548e5a139e30e4c4a225b3b7c2d46942a9f6d1a91143c21b1de4d02fd9b \
--hash=sha256:f638503a9f77d98d9a7d72584b1508d3f82ed019b8fab24f4e5ad078c1b8c95e
# via -r requirements-dev.in
platformdirs==2.5.2 \
--hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \
--hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19
# via virtualenv
pre-commit==2.19.0 \
--hash=sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10 \
--hash=sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615
# via -r requirements-dev.in
pycodestyle==2.8.0 \
--hash=sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20 \
--hash=sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f
# via flake8
pydocstyle==6.1.1 \
--hash=sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc \
--hash=sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4
# via flake8-docstrings
pyflakes==2.4.0 \
--hash=sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c \
--hash=sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e
# via flake8
pyyaml==6.0 \
--hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \
--hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \
--hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \
--hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \
--hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \
--hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \
--hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \
--hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \
--hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \
--hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \
--hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \
--hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \
--hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \
--hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \
--hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \
--hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \
--hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \
--hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \
--hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \
--hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \
--hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \
--hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \
--hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \
--hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \
--hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \
--hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \
--hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \
--hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \
--hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \
--hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \
--hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \
--hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \
--hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5
# via pre-commit
requests==2.28.0 \
--hash=sha256:bc7861137fbce630f17b03d3ad02ad0bf978c844f3536d0edda6499dafce2b6f \
--hash=sha256:d568723a7ebd25875d8d1eaf5dfa068cd2fc8194b2e483d7b1f7c81918dbec6b
# via coveralls
six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
# via virtualenv
snowballstemmer==2.2.0 \
--hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \
--hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
# via pydocstyle
sqlparse==0.4.2 \
--hash=sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae \
--hash=sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d
# via
# django
# django-debug-toolbar
toml==0.10.2 \
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via pre-commit
tomli==2.0.1 \
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
# via pep517
typing-extensions==4.2.0 \
--hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \
--hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376
# via django-test-migrations
urllib3==1.26.9 \
--hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
--hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
# via requests
virtualenv==20.15.0 \
--hash=sha256:4c44b1d77ca81f8368e2d7414f9b20c428ad16b343ac6d226206c5b84e2b4fcc \
--hash=sha256:804cce4de5b8a322f099897e308eecc8f6e2951f1a8e7e2b3598dff865f01336
# via pre-commit
wheel==0.37.1 \
--hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \
--hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4
# via pip-tools
# WARNING: The following packages were not pinned, but pip requires them to be
# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
# pip
# setuptools

37
requirements.in Normal file
View File

@ -0,0 +1,37 @@
# Please keep this list sorted - if you pin a version provide a reason
Django<4 # Django package
coreapi # API documentation for djangorestframework
django-allauth # SSO for external providers via OpenID
django-allauth-2fa # MFA / 2FA
django-cleanup # Automated deletion of old / unused uploaded files
django-cors-headers # CORS headers extension for DRF
django-crispy-forms # Form helpers
django-error-report # Error report viewer for the admin interface
django-filter # Extended filtering options
django-formtools # Form wizard tools
django-import-export==2.5.0 # Data import / export for admin interface
django-maintenance-mode # Shut down application while reloading etc.
django-markdownify # Markdown rendering
django-money<3.0.0 # Django app for currency management # FIXED 2022-06-26 to make sure py-moneyed is not conflicting
django-mptt==0.11.0 # Modified Preorder Tree Traversal
django-redis>=5.0.0 # Redis integration
django-q # Background task scheduling
django-sql-utils # Advanced query annotation / aggregation
django-sslserver # Secure HTTP development server
django-stdimage # Advanced ImageField management
django-user-sessions # user sessions in DB
django-weasyprint # django weasyprint integration
djangorestframework # DRF framework
django-xforwardedfor-middleware # IP forwarding metadata
gunicorn # Gunicorn web server
pdf2image # PDF to image conversion
pillow # Image manipulation
python-barcode[images] # Barcode generator
qrcode[pil] # QR code generator
rapidfuzz==0.7.6 # Fuzzy string matching
sentry-sdk # Error reporting (optional)
setuptools # Standard depenedency
tablib[xls,xlsx,yaml] # Support for XLS and XLSX formats
# Fixed sub-dependencies
py-moneyed<2.0 # For django-money # FIXED 2022-06-18 as we need `moneyed.localization`

View File

@ -1,51 +1,249 @@
# Please keep this list sorted #
Django==3.2.13 # Django package # This file is autogenerated by pip-compile with python 3.9
bleach==4.1.0 # HTML santization # To update, run:
certifi # Certifi is (most likely) installed through one of the requirements above #
coreapi==2.3.0 # API documentation # pip-compile --output-file=requirements.txt requirements.in
coverage==5.3 # Unit test coverage #
coveralls==2.1.2 # Coveralls linking (for Travis) arrow==1.2.2
cryptography==3.4.8 # Cryptography support # via django-q
django-admin-shell==0.1.2 # Python shell for the admin interface asgiref==3.5.2
django-allauth==0.48.0 # SSO for external providers via OpenID # via django
django-allauth-2fa==0.9 # MFA / 2FA # IMPORTANT: Do only change after reviewing GHSA-8j76-mm54-52xq babel==2.10.3
django-cleanup==5.1.0 # Manage deletion of old / unused uploaded files # via py-moneyed
django-cors-headers==3.2.0 # CORS headers extension for DRF bleach[css]==5.0.0
django-crispy-forms==1.11.2 # Form helpers # via django-markdownify
django-debug-toolbar==3.2.4 # Debug / profiling toolbar blessed==1.19.1
django-error-report==0.2.0 # Error report viewer for the admin interface # via django-q
django-filter==2.4.0 # Extended filtering options brotli==1.0.9
django-formtools==2.3 # Form wizard tools # via fonttools
django-import-export==2.5.0 # Data import / export for admin interface certifi==2022.6.15
django-maintenance-mode==0.16.1 # Shut down application while reloading etc. # via
django-markdownify==0.8.0 # Markdown rendering # requests
django-money==1.1 # Django app for currency management # sentry-sdk
django-mptt==0.11.0 # Modified Preorder Tree Traversal cffi==1.15.0
django-redis>=5.0.0 # Redis integration # via
django-q==1.3.4 # Background task scheduling # cryptography
django-sql-utils==0.5.0 # Advanced query annotation / aggregation # weasyprint
django-sslserver==0.22 # Secure HTTP development server charset-normalizer==2.0.12
django-stdimage==5.1.1 # Advanced ImageField management # via requests
django-test-migrations==1.1.0 # Unit testing for database migrations coreapi==2.3.3
django-user-sessions==1.7.1 # user sessions in DB # via -r requirements.in
django-weasyprint==2.1.0 # django weasyprint integration coreschema==0.0.4
djangorestframework==3.12.4 # DRF framework # via coreapi
django-xforwardedfor-middleware==2.0 # IP forwarding metadata cryptography==37.0.2
flake8==3.8.3 # PEP checking # via pyjwt
flake8-docstrings==1.6.0 # docstring format testing cssselect2==0.6.0
gunicorn>=20.1.0 # Gunicorn web server # via weasyprint
importlib_metadata # Backport for importlib.metadata defusedxml==0.7.1
isort==5.10.1 # DEV: python import sorting # via
markdown==3.3.4 # Force particular version of markdown # odfpy
pdf2image==1.16.0 # PDF to image conversion # python3-openid
pep8-naming==0.11.1 # PEP naming convention extension diff-match-patch==20200713
pre-commit==2.19.0 # Git pre-commit # via django-import-export
pillow==9.1.1 # Image manipulation django==3.2.13
py-moneyed==0.8.0 # Specific version requirement for py-moneyed # via
pygments==2.7.4 # Syntax highlighting # -r requirements.in
python-barcode[images]==0.13.1 # Barcode generator # django-allauth
qrcode[pil]==6.1 # QR code generator # django-allauth-2fa
rapidfuzz==0.7.6 # Fuzzy string matching # django-cors-headers
sentry-sdk==1.5.12 # Error reporting (optional) # django-error-report
tablib[xls,xlsx,yaml] # Support for XLS and XLSX formats # django-filter
weasyprint==55.0 # PDF generation library # django-formtools
# django-import-export
# django-js-asset
# django-markdownify
# django-money
# django-mptt
# django-otp
# django-picklefield
# django-q
# django-redis
# django-sql-utils
# django-sslserver
# django-stdimage
# django-user-sessions
# django-weasyprint
# django-xforwardedfor-middleware
# djangorestframework
django-allauth==0.51.0
# via
# -r requirements.in
# django-allauth-2fa
django-allauth-2fa==0.9
# via -r requirements.in
django-cleanup==6.0.0
# via -r requirements.in
django-cors-headers==3.13.0
# via -r requirements.in
django-crispy-forms==1.14.0
# via -r requirements.in
django-error-report==0.2.0
# via -r requirements.in
django-filter==22.1
# via -r requirements.in
django-formtools==2.3
# via -r requirements.in
django-import-export==2.5.0
# via -r requirements.in
django-js-asset==2.0.0
# via django-mptt
django-maintenance-mode==0.16.3
# via -r requirements.in
django-markdownify==0.9.2
# via -r requirements.in
django-money==2.1.1
# via -r requirements.in
django-mptt==0.11.0
# via -r requirements.in
django-otp==1.1.3
# via django-allauth-2fa
django-picklefield==3.1
# via django-q
django-q==1.3.9
# via -r requirements.in
django-redis==5.2.0
# via -r requirements.in
django-sql-utils==0.6.1
# via -r requirements.in
django-sslserver==0.22
# via -r requirements.in
django-stdimage==6.0.1
# via -r requirements.in
django-user-sessions==1.7.1
# via -r requirements.in
django-weasyprint==2.1.0
# via -r requirements.in
django-xforwardedfor-middleware==2.0
# via -r requirements.in
djangorestframework==3.13.1
# via -r requirements.in
et-xmlfile==1.1.0
# via openpyxl
fonttools[woff]==4.33.3
# via weasyprint
gunicorn==20.1.0
# via -r requirements.in
html5lib==1.1
# via weasyprint
idna==3.3
# via requests
importlib-metadata==4.12.0
# via markdown
itypes==1.2.0
# via coreapi
jinja2==3.1.2
# via coreschema
markdown==3.3.7
# via django-markdownify
markuppy==1.14
# via tablib
markupsafe==2.1.1
# via jinja2
oauthlib==3.2.0
# via requests-oauthlib
odfpy==1.4.1
# via tablib
openpyxl==3.0.10
# via tablib
pdf2image==1.16.0
# via -r requirements.in
pillow==9.1.1
# via
# -r requirements.in
# django-stdimage
# pdf2image
# python-barcode
# qrcode
# weasyprint
py-moneyed==1.2
# via
# -r requirements.in
# django-money
pycparser==2.21
# via cffi
pydyf==0.2.0
# via weasyprint
pyjwt[crypto]==2.4.0
# via django-allauth
pyphen==0.12.0
# via weasyprint
python-barcode[images]==0.14.0
# via -r requirements.in
python-dateutil==2.8.2
# via arrow
python-fsutil==0.6.1
# via django-maintenance-mode
python3-openid==3.2.0
# via django-allauth
pytz==2022.1
# via
# babel
# django
# djangorestframework
pyyaml==6.0
# via tablib
qrcode[pil]==7.3.1
# via
# -r requirements.in
# django-allauth-2fa
rapidfuzz==0.7.6
# via -r requirements.in
redis==3.5.3
# via
# django-q
# django-redis
requests==2.28.0
# via
# coreapi
# django-allauth
# requests-oauthlib
requests-oauthlib==1.3.1
# via django-allauth
sentry-sdk==1.6.0
# via -r requirements.in
six==1.16.0
# via
# bleach
# blessed
# html5lib
# python-dateutil
sqlparse==0.4.2
# via
# django
# django-sql-utils
tablib[html,ods,xls,xlsx,yaml]==3.2.1
# via
# -r requirements.in
# django-import-export
tinycss2==1.1.1
# via
# bleach
# cssselect2
# weasyprint
uritemplate==4.1.1
# via coreapi
urllib3==1.26.9
# via
# requests
# sentry-sdk
wcwidth==0.2.5
# via blessed
weasyprint==55.0
# via django-weasyprint
webencodings==0.5.1
# via
# bleach
# cssselect2
# html5lib
# tinycss2
xlrd==2.0.1
# via tablib
xlwt==1.3.0
# via tablib
zipp==3.8.0
# via importlib-metadata
zopfli==0.2.1
# via fonttools
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View File

@ -111,10 +111,10 @@ def install(c):
@task @task
def setup_dev(c): def setup_dev(c):
"""Sets up everything needed for the dev enviroment.""" """Sets up everything needed for the dev enviroment."""
print("Installing required python packages from 'requirements.txt'") print("Installing required python packages from 'requirements-dev.txt'")
# Install required Python packages with PIP # Install required Python packages with PIP
c.run('pip3 install -U -r requirements.txt') c.run('pip3 install -U -r requirements-dev.txt')
# Install pre-commit hook # Install pre-commit hook
c.run('pre-commit install') c.run('pre-commit install')