From 240ff59b3010afe17370ac450aa1be757574a360 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 22 May 2021 20:56:56 +1000 Subject: [PATCH 1/5] Bump API version to 3 - New stock item history tracking is incompatible - Adds API info to the "about" dialog --- InvenTree/InvenTree/version.py | 11 +++++++++-- InvenTree/part/templatetags/inventree_extras.py | 6 ++++++ InvenTree/templates/about.html | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 361fec152a..67962c7859 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -10,8 +10,15 @@ import common.models INVENTREE_SW_VERSION = "0.2.2 pre" -# Increment this number whenever there is a significant change to the API that any clients need to know about -INVENTREE_API_VERSION = 2 +""" +Increment thi API version number whenever there is a significant change to the API that any clients need to know about + +v3 -> 2021-05-22: + - The updated StockItem "history tracking" now uses a different interface + +""" + +INVENTREE_API_VERSION = 3 def inventreeInstanceName(): diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index 734b365447..ceb2d11e31 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -119,6 +119,12 @@ def inventree_version(*args, **kwargs): return version.inventreeVersion() +@register.simple_tag() +def inventree_api_version(*args, **kwargs): + """ Return InvenTree API version """ + return version.inventreeApiVersion() + + @register.simple_tag() def django_version(*args, **kwargs): """ Return Django version string """ diff --git a/InvenTree/templates/about.html b/InvenTree/templates/about.html index f190ab2755..7b023295d1 100644 --- a/InvenTree/templates/about.html +++ b/InvenTree/templates/about.html @@ -29,6 +29,11 @@ {% endif %} + + + {% trans "API Version" %} + {% inventree_api_version %}{% include "clip.html" %} + {% trans "Django Version" %} From 65aa46816815b0a0ffe6153513b6018f909432bb Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 23 May 2021 21:14:43 +1000 Subject: [PATCH 2/5] Add backend for exchangerate.host --- InvenTree/InvenTree/exchange.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/exchange.py b/InvenTree/InvenTree/exchange.py index 06de4861ec..a4ac06e24a 100644 --- a/InvenTree/InvenTree/exchange.py +++ b/InvenTree/InvenTree/exchange.py @@ -1,4 +1,4 @@ -from djmoney.contrib.exchange.backends.base import BaseExchangeBackend +from djmoney.contrib.exchange.backends.base import BaseExchangeBackend, SimpleExchangeBackend class InvenTreeManualExchangeBackend(BaseExchangeBackend): @@ -19,3 +19,18 @@ class InvenTreeManualExchangeBackend(BaseExchangeBackend): """ return {} + + +class ExchangeRateHostBackend(SimpleExchangeBackend): + """ + Backend for https://exchangerate.host/ + """ + + name = "exchangerate.host" + + def __init__(self): + self.url = "https://api.exchangerate.host/latest" + + def get_params(self): + # No API key is required + return {} From ff80c722fb2023d955e8fc15621db62953d92bc8 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 25 May 2021 09:32:21 +1000 Subject: [PATCH 3/5] Docker: Add parent directories if they do not exist --- docker/Dockerfile | 3 ++- docker/start_dev_server.sh | 4 ++-- docker/start_prod_server.sh | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ea70d9f994..5c5d1dc32a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -41,9 +41,10 @@ LABEL org.label-schema.schema-version="1.0" \ # Create user account RUN addgroup -S inventreegroup && adduser -S inventree -G inventreegroup + WORKDIR ${INVENTREE_HOME} -RUN mkdir ${INVENTREE_STATIC_ROOT} +RUN mkdir -p ${INVENTREE_STATIC_ROOT} # Install required system packages RUN apk add --no-cache git make bash \ diff --git a/docker/start_dev_server.sh b/docker/start_dev_server.sh index 0c1564076a..d4e33a79a5 100644 --- a/docker/start_dev_server.sh +++ b/docker/start_dev_server.sh @@ -3,12 +3,12 @@ # Create required directory structure (if it does not already exist) if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then echo "Creating directory $INVENTREE_STATIC_ROOT" - mkdir $INVENTREE_STATIC_ROOT + mkdir -p $INVENTREE_STATIC_ROOT fi if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then echo "Creating directory $INVENTREE_MEDIA_ROOT" - mkdir $INVENTREE_MEDIA_ROOT + mkdir -p $INVENTREE_MEDIA_ROOT fi # Check if "config.yaml" has been copied into the correct location diff --git a/docker/start_prod_server.sh b/docker/start_prod_server.sh index 2767e844d6..2e5acb5c9d 100644 --- a/docker/start_prod_server.sh +++ b/docker/start_prod_server.sh @@ -3,12 +3,12 @@ # Create required directory structure (if it does not already exist) if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then echo "Creating directory $INVENTREE_STATIC_ROOT" - mkdir $INVENTREE_STATIC_ROOT + mkdir -p $INVENTREE_STATIC_ROOT fi if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then echo "Creating directory $INVENTREE_MEDIA_ROOT" - mkdir $INVENTREE_MEDIA_ROOT + mkdir -p $INVENTREE_MEDIA_ROOT fi # Check if "config.yaml" has been copied into the correct location From 619cba6007c92c0ac75d6c2c755e8e7fdea58df5 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 25 May 2021 10:37:53 +1000 Subject: [PATCH 4/5] Currency: Use ExchangeRateHost backend by default, rather than fixer.io - No longer support fixer.io as it requires an API key and does not support "base" currency --- InvenTree/InvenTree/tasks.py | 10 ++-------- InvenTree/common/models.py | 6 ------ InvenTree/templates/InvenTree/settings/global.html | 1 - 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index b81b4e6de4..e9e37e63a3 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -169,18 +169,12 @@ def update_exchange_rates(): try: import common.models from django.conf import settings - from djmoney.contrib.exchange.backends import FixerBackend + from InvenTree.exchange import ExchangeRateHostBackend except AppRegistryNotReady: # Apps not yet loaded! return - fixer_api_key = common.models.InvenTreeSetting.get_setting('INVENTREE_FIXER_API_KEY', '').strip() - - if not fixer_api_key: - # API key not provided - return - - backend = FixerBackend(access_key=fixer_api_key) + backend = ExchangeRateHostBackend() currencies = ','.join(settings.CURRENCIES) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index e499e9b801..99712b2a93 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -87,12 +87,6 @@ class InvenTreeSetting(models.Model): 'choices': djmoney.settings.CURRENCY_CHOICES, }, - 'INVENTREE_FIXER_API_KEY': { - 'name': _('fixer.io API key'), - 'description': _('API key for fixer.io currency conversion service'), - 'default': '', - }, - 'INVENTREE_DOWNLOAD_FROM_URL': { 'name': _('Download from URL'), 'description': _('Allow download of remote images and files from external URL'), diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html index 5c5dccfb2a..a0347490d0 100644 --- a/InvenTree/templates/InvenTree/settings/global.html +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -20,7 +20,6 @@ {% include "InvenTree/settings/setting.html" with key="INVENTREE_BASE_URL" icon="fa-globe" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_COMPANY_NAME" icon="fa-building" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-dollar-sign" %} - {% include "InvenTree/settings/setting.html" with key="INVENTREE_FIXER_API_KEY" icon="fa-key" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_FROM_URL" icon="fa-cloud-download-alt" %} From 0a26a069092e3a0d0f6a0ebce929c38ac174dba6 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 25 May 2021 10:46:30 +1000 Subject: [PATCH 5/5] Use INVENTREE_DEFAULT_CURRENCY as specified base currency --- InvenTree/InvenTree/settings.py | 4 +--- InvenTree/InvenTree/tasks.py | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index 5cf0b0c544..f0a3312b39 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -513,9 +513,7 @@ CURRENCIES = CONFIG.get( ], ) -BASE_CURRENCY = CONFIG.get('base_currency', 'USD') - -EXCHANGE_BACKEND = 'InvenTree.exchange.InvenTreeManualExchangeBackend' +EXCHANGE_BACKEND = 'InvenTree.exchange.ExchangeRateHostBackend' # Extract email settings from the config file email_config = CONFIG.get('email', {}) diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index e9e37e63a3..ad33232fe0 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -175,10 +175,13 @@ def update_exchange_rates(): return backend = ExchangeRateHostBackend() + print(f"Updating exchange rates from {backend.url}") currencies = ','.join(settings.CURRENCIES) - base = settings.BASE_CURRENCY + base = common.models.InvenTreeSetting.get_setting('INVENTREE_DEFAULT_CURRENCY') + + print(f"Using base currency '{base}'") backend.update_rates(base_currency=base, symbols=currencies)