зеркало из https://github.com/nextcloud/appstore.git
updated Django from 3.2 to 4.2.5, replaced non-supported django-cors-middleware package with django-cors-headers
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
This commit is contained in:
Родитель
687262b8cd
Коммит
ce70659c63
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
|
<data-source source="LOCAL" name="db" uuid="9942693d-1eec-4d21-9645-d0997498be97">
|
||||||
|
<driver-ref>sqlite.xerial</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||||
|
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db.sqlite3</jdbc-url>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
<libraries>
|
||||||
|
<library>
|
||||||
|
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.40.1/org/xerial/sqlite-jdbc/3.40.1.0/sqlite-jdbc-3.40.1.0.jar</url>
|
||||||
|
</library>
|
||||||
|
</libraries>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -3,7 +3,7 @@
|
||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (appstore)" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (appstore)" project-jdk-type="Python SDK" />
|
||||||
<component name="PyCharmProfessionalAdvertiser">
|
<component name="PyCharmProfessionalAdvertiser">
|
||||||
<option name="shown" value="true" />
|
<option name="shown" value="true" />
|
||||||
</component>
|
</component>
|
||||||
|
|
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -2,6 +2,17 @@
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [4.3.0] - 2023-09-07
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Replaced `django-cors-middleware` package with `django-cors-headers`
|
||||||
|
- Updated Django from `3.2` to `4.2.5` version.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Bug in REST API for deleting releases when APP_ID contains number. #1127
|
||||||
|
|
||||||
## [4.2.0] - 2023-07-18
|
## [4.2.0] - 2023-07-18
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -7,7 +7,7 @@ manage-script=$(CURDIR)/manage.py
|
||||||
manage=$(poetry_run) $(manage-script)
|
manage=$(poetry_run) $(manage-script)
|
||||||
db=sqlite
|
db=sqlite
|
||||||
npm=npm
|
npm=npm
|
||||||
prod_version=12.0.0
|
prod_version=27.0.0
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test:
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$">
|
||||||
<orderEntry type="jdk" jdkName="Python 3.7 (appstore)" jdkType="Python SDK" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Poetry (appstore)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PackageRequirementsSettings">
|
<component name="PackageRequirementsSettings">
|
||||||
|
|
|
@ -10,7 +10,7 @@ Installing Packages
|
||||||
First you want to switch your machine to an up to date Node.js (16) and NPM (8) versions::
|
First you want to switch your machine to an up to date Node.js (16) and NPM (8) versions::
|
||||||
|
|
||||||
cd ~
|
cd ~
|
||||||
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
|
curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -
|
||||||
sudo apt -y install nodejs -y
|
sudo apt -y install nodejs -y
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.conf.urls import include, url
|
from django.urls import include, path
|
||||||
|
|
||||||
app_name = "api"
|
app_name = "api"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^v1/", include("nextcloudappstore.api.v1.urls", namespace="v1")),
|
path("v1/", include("nextcloudappstore.api.v1.urls", namespace="v1")),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls import url
|
from django.urls import re_path
|
||||||
from django.views.decorators.http import etag
|
from django.views.decorators.http import etag
|
||||||
|
|
||||||
from nextcloudappstore.api.v1.views import (
|
from nextcloudappstore.api.v1.views import (
|
||||||
|
@ -24,19 +24,19 @@ from nextcloudappstore.core.versioning import SEMVER_REGEX
|
||||||
app_name = "v1"
|
app_name = "v1"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^platforms\.json$", etag(nextcloud_release_etag)(NextcloudReleaseView.as_view()), name="platforms"),
|
re_path(r"^platforms\.json$", etag(nextcloud_release_etag)(NextcloudReleaseView.as_view()), name="platforms"),
|
||||||
url(r"^platform/(?P<version>\d+\.\d+\.\d+)/apps\.json$", etag(apps_etag)(AppView.as_view()), name="app"),
|
re_path(r"^platform/(?P<version>\d+\.\d+\.\d+)/apps\.json$", etag(apps_etag)(AppView.as_view()), name="app"),
|
||||||
url(r"^apps\.json$", etag(apps_all_etag)(AppsView.as_view()), name="apps"),
|
re_path(r"^apps\.json$", etag(apps_all_etag)(AppsView.as_view()), name="apps"),
|
||||||
url(r"^apps/releases/?$", AppReleaseView.as_view(), name="app-release-create"),
|
re_path(r"^apps/releases/?$", AppReleaseView.as_view(), name="app-release-create"),
|
||||||
url(r"^apps/?$", AppRegisterView.as_view(), name="app-register"),
|
re_path(r"^apps/?$", AppRegisterView.as_view(), name="app-register"),
|
||||||
url(r"^apps/(?P<pk>[a-z0-9_]+)/?$", AppView.as_view(), name="app-delete"),
|
re_path(r"^apps/(?P<pk>[a-z0-9_]+)/?$", AppView.as_view(), name="app-delete"),
|
||||||
url(r"^ratings.json$", etag(app_ratings_etag)(AppRatingView.as_view()), name="app-ratings"),
|
re_path(r"^ratings.json$", etag(app_ratings_etag)(AppRatingView.as_view()), name="app-ratings"),
|
||||||
url(
|
re_path(
|
||||||
r"^apps/(?P<app>[a-z0-9_]+)/releases/(?:(?P<nightly>nightly)/)?" r"(?P<version>" + SEMVER_REGEX + ")/?$",
|
r"^apps/(?P<app>[a-z0-9_]+)/releases/(?:(?P<nightly>nightly)/)?" r"(?P<version>" + SEMVER_REGEX + ")/?$",
|
||||||
AppReleaseView.as_view(),
|
AppReleaseView.as_view(),
|
||||||
name="app-release-delete",
|
name="app-release-delete",
|
||||||
),
|
),
|
||||||
url(r"^token/?$", SessionObtainAuthToken.as_view(), name="user-token"),
|
re_path(r"^token/?$", SessionObtainAuthToken.as_view(), name="user-token"),
|
||||||
url(r"^token/new/?$", RegenerateAuthToken.as_view(), name="user-token-new"),
|
re_path(r"^token/new/?$", RegenerateAuthToken.as_view(), name="user-token-new"),
|
||||||
url(r"^categories.json$", etag(categories_etag)(CategoryView.as_view()), name="category"),
|
re_path(r"^categories.json$", etag(categories_etag)(CategoryView.as_view()), name="category"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.conf import settings
|
||||||
from django.contrib.syndication.views import Feed
|
from django.contrib.syndication.views import Feed
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.feedgenerator import Atom1Feed
|
from django.utils.feedgenerator import Atom1Feed
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
from markdown import markdown
|
from markdown import markdown
|
||||||
from parler.models import TranslationDoesNotExist
|
from parler.models import TranslationDoesNotExist
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.forms import (
|
||||||
TextInput,
|
TextInput,
|
||||||
)
|
)
|
||||||
from django.utils.translation import get_language_info
|
from django.utils.translation import get_language_info
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
|
|
||||||
from nextcloudappstore.core.models import App, AppRating
|
from nextcloudappstore.core.models import App, AppRating
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management import BaseCommand, CommandError
|
from django.core.management import BaseCommand, CommandError
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import gettext
|
||||||
from parler.models import TranslatableModel
|
from parler.models import TranslatableModel
|
||||||
from parler.utils.context import switch_language
|
from parler.utils.context import switch_language
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ class Command(BaseCommand):
|
||||||
if obj.has_translation(language_code):
|
if obj.has_translation(language_code):
|
||||||
obj.delete_translation(language_code)
|
obj.delete_translation(language_code)
|
||||||
source = [self._get_en(obj, field) for field in fields]
|
source = [self._get_en(obj, field) for field in fields]
|
||||||
translations = [ugettext(value) for value in source]
|
translations = [gettext(value) for value in source]
|
||||||
for field, translation in zip(fields, translations):
|
for field, translation in zip(fields, translations):
|
||||||
setattr(obj, field, translation)
|
setattr(obj, field, translation)
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
|
@ -24,7 +24,7 @@ from django.db.models import (
|
||||||
from django.db.models.signals import post_delete
|
from django.db.models.signals import post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
from parler.models import TranslatableManager # type: ignore
|
from parler.models import TranslatableManager # type: ignore
|
||||||
from parler.models import TranslatableModel, TranslatedFields
|
from parler.models import TranslatableModel, TranslatedFields
|
||||||
from semantic_version import Spec, Version
|
from semantic_version import Spec, Version
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django import template
|
from django import template
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.core.validators import URLValidator
|
from django.core.validators import URLValidator
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class HttpsUrlValidator(URLValidator):
|
class HttpsUrlValidator(URLValidator):
|
||||||
|
|
|
@ -17,7 +17,7 @@ from django.forms import (
|
||||||
from django.forms.fields import CharField, ChoiceField, EmailField, HiddenInput
|
from django.forms.fields import CharField, ChoiceField, EmailField, HiddenInput
|
||||||
from django.utils.functional import lazy
|
from django.utils.functional import lazy
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import ugettext_lazy as _ # type: ignore
|
from django.utils.translation import gettext_lazy as _ # type: ignore
|
||||||
|
|
||||||
from nextcloudappstore.core.facades import resolve_file_relative_path
|
from nextcloudappstore.core.facades import resolve_file_relative_path
|
||||||
from nextcloudappstore.core.models import App, Category, Screenshot
|
from nextcloudappstore.core.models import App, Category, Screenshot
|
||||||
|
|
|
@ -139,7 +139,7 @@ ACCOUNT_CONFIRM_EMAIL_ON_GET = True
|
||||||
ACCOUNT_SIGNUP_FORM_CLASS = "nextcloudappstore.user.forms.SignupFormRecaptcha"
|
ACCOUNT_SIGNUP_FORM_CLASS = "nextcloudappstore.user.forms.SignupFormRecaptcha"
|
||||||
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
|
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
|
||||||
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
|
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
|
||||||
PASSWORD_RESET_TIMEOUT_DAYS = 1
|
PASSWORD_RESET_TIMEOUT = 1
|
||||||
ACCOUNT_FORMS = {
|
ACCOUNT_FORMS = {
|
||||||
"login": "allauth.account.forms.LoginForm",
|
"login": "allauth.account.forms.LoginForm",
|
||||||
"add_email": "allauth.account.forms.AddEmailForm",
|
"add_email": "allauth.account.forms.AddEmailForm",
|
||||||
|
|
|
@ -2,11 +2,10 @@ from allauth.account.views import signup
|
||||||
from allauth.socialaccount.views import signup as social_signup
|
from allauth.socialaccount.views import signup as social_signup
|
||||||
from csp.decorators import csp_update
|
from csp.decorators import csp_update
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import include, url
|
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.urls import path
|
from django.urls import include, path, re_path
|
||||||
from django.views.decorators.http import etag
|
from django.views.decorators.http import etag
|
||||||
|
|
||||||
from nextcloudappstore.core.caching import app_rating_etag
|
from nextcloudappstore.core.caching import app_rating_etag
|
||||||
|
@ -28,30 +27,30 @@ from nextcloudappstore.scaffolding.views import (
|
||||||
admin.site.login = login_required(admin.site.login)
|
admin.site.login = login_required(admin.site.login)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^$", CategoryAppListView.as_view(), {"id": None}, name="home"),
|
path("", CategoryAppListView.as_view(), {"id": None}, name="home"),
|
||||||
url(r"^featured$", CategoryAppListView.as_view(), {"id": None, "is_featured_category": True}, name="featured"),
|
path("featured", CategoryAppListView.as_view(), {"id": None, "is_featured_category": True}, name="featured"),
|
||||||
url(r"^signup/$", csp_update(**settings.CSP_SIGNUP)(signup), name="account_signup"),
|
path("signup/", csp_update(**settings.CSP_SIGNUP)(signup), name="account_signup"),
|
||||||
url(r"^social/signup/$", csp_update(**settings.CSP_SIGNUP)(social_signup), name="socialaccount_signup"),
|
path("social/signup/", csp_update(**settings.CSP_SIGNUP)(social_signup), name="socialaccount_signup"),
|
||||||
url(r"^", include("allauth.urls")),
|
path("", include("allauth.urls")),
|
||||||
url(r"^categories/(?P<id>[\w]*)/?$", CategoryAppListView.as_view(), name="category-app-list"),
|
re_path(r"^categories/(?P<id>[\w]*)/?$", CategoryAppListView.as_view(), name="category-app-list"),
|
||||||
url(r"^developer/apps/generate/?$", AppScaffoldingView.as_view(), name="app-scaffold"),
|
re_path(r"^developer/apps/generate/?$", AppScaffoldingView.as_view(), name="app-scaffold"),
|
||||||
url(r"^developer/integration/new/?$", IntegrationScaffoldingView.as_view(), name="integration-scaffold"),
|
re_path(r"^developer/integration/new/?$", IntegrationScaffoldingView.as_view(), name="integration-scaffold"),
|
||||||
url(r"^developer/apps/releases/new/?$", AppUploadView.as_view(), name="app-upload"),
|
re_path(r"^developer/apps/releases/new/?$", AppUploadView.as_view(), name="app-upload"),
|
||||||
url(r"^developer/apps/new/?$", AppRegisterView.as_view(), name="app-register"),
|
re_path(r"^developer/apps/new/?$", AppRegisterView.as_view(), name="app-register"),
|
||||||
url(r"^apps/(?P<id>[\w_]+)/?$", AppDetailView.as_view(), name="app-detail"),
|
re_path(r"^apps/(?P<id>[\w_]+)/?$", AppDetailView.as_view(), name="app-detail"),
|
||||||
url(r"^apps/(?P<id>[\w_]+)/releases/?$", AppReleasesView.as_view(), name="app-releases"),
|
re_path(r"^apps/(?P<id>[\w_]+)/releases/?$", AppReleasesView.as_view(), name="app-releases"),
|
||||||
url(r"^apps/(?P<id>[\w_]+)/description/?$", app_description, name="app-description"),
|
re_path(r"^apps/(?P<id>[\w_]+)/description/?$", app_description, name="app-description"),
|
||||||
url(r"^apps/(?P<id>[\w_]+)/ratings.json$", etag(app_rating_etag)(AppRatingApi.as_view()), name="app-ratings"),
|
re_path(r"^apps/(?P<id>[\w_]+)/ratings.json$", etag(app_rating_etag)(AppRatingApi.as_view()), name="app-ratings"),
|
||||||
url(r"^api/", include("nextcloudappstore.api.urls", namespace="api")),
|
path("api/", include("nextcloudappstore.api.urls", namespace="api")),
|
||||||
url(r"^account/", include("nextcloudappstore.user.urls", namespace="user")),
|
path("account/", include("nextcloudappstore.user.urls", namespace="user")),
|
||||||
url(r"^admin/", admin.site.urls),
|
re_path(r"^admin/", admin.site.urls),
|
||||||
url(r"^i18n/", include("django.conf.urls.i18n")),
|
path("i18n/", include("django.conf.urls.i18n")),
|
||||||
path("captcha/", include("captcha.urls")),
|
path("captcha/", include("captcha.urls")),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += i18n_patterns(
|
urlpatterns += i18n_patterns(
|
||||||
url(r"feeds/releases.rss", AppReleaseRssFeed(), name="feeds-releases-rss"),
|
re_path(r"feeds/releases.rss", AppReleaseRssFeed(), name="feeds-releases-rss"),
|
||||||
url(r"feeds/releases.atom", AppReleaseAtomFeed(), name="feeds-releases-atom"),
|
re_path(r"feeds/releases.atom", AppReleaseAtomFeed(), name="feeds-releases-atom"),
|
||||||
)
|
)
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
@ -59,7 +58,7 @@ if settings.DEBUG:
|
||||||
import debug_toolbar
|
import debug_toolbar
|
||||||
|
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
url(r"^__debug__/", include(debug_toolbar.urls)),
|
path("__debug__/", include(debug_toolbar.urls)),
|
||||||
]
|
]
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -8,7 +8,7 @@ from captcha.fields import CaptchaField
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.forms import CharField, EmailField, PasswordInput
|
from django.forms import CharField, EmailField, PasswordInput
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class SignupFormRecaptcha(forms.Form):
|
class SignupFormRecaptcha(forms.Form):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls import url
|
from django.urls import path, re_path
|
||||||
|
|
||||||
from nextcloudappstore.scaffolding.views import IntegrationScaffoldingView
|
from nextcloudappstore.scaffolding.views import IntegrationScaffoldingView
|
||||||
from nextcloudappstore.user.views import (
|
from nextcloudappstore.user.views import (
|
||||||
|
@ -14,18 +14,18 @@ from nextcloudappstore.user.views import (
|
||||||
app_name = "user"
|
app_name = "user"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^$", AccountView.as_view(), name="account"),
|
path("", AccountView.as_view(), name="account"),
|
||||||
url(r"^integrations/?$", IntegrationsView.as_view(), name="account-integrations"),
|
re_path(r"^integrations/?$", IntegrationsView.as_view(), name="account-integrations"),
|
||||||
url(r"^integrations/(?P<pk>[a-z0-9_]+)/?$", IntegrationScaffoldingView.as_view(), name="account-integration"),
|
re_path(r"^integrations/(?P<pk>[a-z0-9_]+)/?$", IntegrationScaffoldingView.as_view(), name="account-integration"),
|
||||||
url(
|
re_path(
|
||||||
r"^integrations/(?P<pk>[a-z0-9_]+)/moderate/?$",
|
r"^integrations/(?P<pk>[a-z0-9_]+)/moderate/?$",
|
||||||
IntegrationScaffoldingView.as_view(),
|
IntegrationScaffoldingView.as_view(),
|
||||||
name="account-integration-moderate",
|
name="account-integration-moderate",
|
||||||
),
|
),
|
||||||
url(r"^transfer-apps/?$", TransferAppsView.as_view(), name="account-transfer-apps"),
|
re_path(r"^transfer-apps/?$", TransferAppsView.as_view(), name="account-transfer-apps"),
|
||||||
url(r"^transfer-apps/(?P<pk>[a-z0-9_]+)/?$", TransferAppsView.as_view(), name="account-transfer-app"),
|
re_path(r"^transfer-apps/(?P<pk>[a-z0-9_]+)/?$", TransferAppsView.as_view(), name="account-transfer-app"),
|
||||||
url(r"^password/?$", PasswordView.as_view(), name="account-password"),
|
re_path(r"^password/?$", PasswordView.as_view(), name="account-password"),
|
||||||
url(r"^token/?$", APITokenView.as_view(), name="account-api-token"),
|
re_path(r"^token/?$", APITokenView.as_view(), name="account-api-token"),
|
||||||
url(r"^delete/?$", DeleteAccountView.as_view(), name="account-deletion"),
|
re_path(r"^delete/?$", DeleteAccountView.as_view(), name="account-deletion"),
|
||||||
url(r"^change-language/?$", ChangeLanguageView.as_view(), name="account-change-language"),
|
re_path(r"^change-language/?$", ChangeLanguageView.as_view(), name="account-change-language"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alabaster"
|
name = "alabaster"
|
||||||
|
@ -389,19 +389,19 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django"
|
name = "django"
|
||||||
version = "3.2.20"
|
version = "4.2.5"
|
||||||
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
|
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "Django-3.2.20-py3-none-any.whl", hash = "sha256:a477ab326ae7d8807dc25c186b951ab8c7648a3a23f9497763c37307a2b5ef87"},
|
{file = "Django-4.2.5-py3-none-any.whl", hash = "sha256:b6b2b5cae821077f137dc4dade696a1c2aa292f892eca28fa8d7bfdf2608ddd4"},
|
||||||
{file = "Django-3.2.20.tar.gz", hash = "sha256:dec2a116787b8e14962014bf78e120bba454135108e1af9e9b91ade7b2964c40"},
|
{file = "Django-4.2.5.tar.gz", hash = "sha256:5e5c1c9548ffb7796b4a8a4782e9a2e5a3df3615259fc1bfd3ebc73b646146c1"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
asgiref = ">=3.3.2,<4"
|
asgiref = ">=3.6.0,<4"
|
||||||
pytz = "*"
|
sqlparse = ">=0.3.1"
|
||||||
sqlparse = ">=0.2.2"
|
tzdata = {version = "*", markers = "sys_platform == \"win32\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
argon2 = ["argon2-cffi (>=19.1.0)"]
|
argon2 = ["argon2-cffi (>=19.1.0)"]
|
||||||
|
@ -439,16 +439,19 @@ files = [
|
||||||
Django = ">=2.2"
|
Django = ">=2.2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-cors-middleware"
|
name = "django-cors-headers"
|
||||||
version = "1.5.0"
|
version = "4.2.0"
|
||||||
description = "django-cors-middleware is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS). Fork of django-cors-headers."
|
description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "django-cors-middleware-1.5.0.tar.gz", hash = "sha256:856dbe4d7aae65844ccc68acb49c6da7dbf7cbacaf5bcf37019f4c0c60b3be84"},
|
{file = "django_cors_headers-4.2.0-py3-none-any.whl", hash = "sha256:9ada212b0e2efd4a5e339360ffc869cb21ac5605e810afe69f7308e577ea5bde"},
|
||||||
{file = "django_cors_middleware-1.5.0-py3-none-any.whl", hash = "sha256:5bbdea85e22909d596e26f6e0dbc174d5521429fa3943ae02a2c6c48e76c88c7"},
|
{file = "django_cors_headers-4.2.0.tar.gz", hash = "sha256:f9749c6410fe738278bc2b6ef17f05195bc7b251693c035752d8257026af024f"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
Django = ">=3.2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-csp"
|
name = "django-csp"
|
||||||
version = "3.7"
|
version = "3.7"
|
||||||
|
@ -1714,6 +1717,17 @@ files = [
|
||||||
{file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"},
|
{file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tzdata"
|
||||||
|
version = "2023.3"
|
||||||
|
description = "Provider of IANA time zone data"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2"
|
||||||
|
files = [
|
||||||
|
{file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
|
||||||
|
{file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "2.0.4"
|
version = "2.0.4"
|
||||||
|
@ -1787,4 +1801,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.9"
|
python-versions = "^3.9"
|
||||||
content-hash = "506ba4b73172f4917c86800e9157ff9b6c1e0a7e8e0dc1fc35e081183e749d0a"
|
content-hash = "813eb93631f308e3288bf4f59f3c1536ff3f0dff5bae088c4ad8e5005c75af74"
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "nextcloudappstore"
|
name = "nextcloudappstore"
|
||||||
version = "4.2.0"
|
version = "4.3.0"
|
||||||
description = "App store for Nextcloud apps"
|
description = "App store for Nextcloud apps"
|
||||||
authors = ["Morris Jobke <hey@morrisjobke.de>"]
|
authors = ["Morris Jobke <hey@morrisjobke.de>"]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.9"
|
python = "^3.9"
|
||||||
Django = "~3.2"
|
django = "~4.2.5"
|
||||||
django-braces = "~1.15.0"
|
django-braces = "~1.15.0"
|
||||||
djangorestframework-camel-case = "^1.3.0"
|
djangorestframework-camel-case = "^1.3.0"
|
||||||
django-parler-rest = "^2.1"
|
django-parler-rest = "^2.1"
|
||||||
|
@ -14,7 +14,7 @@ django-parler = "^2.3"
|
||||||
django-allauth = "^0.54.0"
|
django-allauth = "^0.54.0"
|
||||||
lxml = "^4.7.1"
|
lxml = "^4.7.1"
|
||||||
requests = ">=2.31.0, <2.32.0"
|
requests = ">=2.31.0, <2.32.0"
|
||||||
django-cors-middleware = "^1.5.0"
|
django-cors-headers = "^4.2.0"
|
||||||
django-csp = "^3.7"
|
django-csp = "^3.7"
|
||||||
pyOpenSSL = "^23.0.0"
|
pyOpenSSL = "^23.0.0"
|
||||||
Markdown = "^3.3.6"
|
Markdown = "^3.3.6"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче