Compare commits
No commits in common. "22945f72bf6430c95bbbb298ecff6d2f8799f9d4" and "4577ec4896fef2f2d697478857ed3cc6dfb539f6" have entirely different histories.
22945f72bf
...
4577ec4896
29 changed files with 1166 additions and 1509 deletions
|
@ -1,9 +1,6 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
* :release:`0.14.0 <2023-07-22>`
|
|
||||||
* :feature:`-` add disk space statistics
|
|
||||||
|
|
||||||
* :release:`0.13.0 <2023-05-08>`
|
* :release:`0.13.0 <2023-05-08>`
|
||||||
* :feature:`-` add REST API to retrieve and set user information as admin
|
* :feature:`-` add REST API to retrieve and set user information as admin
|
||||||
* :feature:`-` add support model for offline account reset codes in new help
|
* :feature:`-` add support model for offline account reset codes in new help
|
||||||
|
|
67
docs/conf.py
67
docs/conf.py
|
@ -20,10 +20,10 @@ import django
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
sys.path.insert(0, os.path.abspath(os.path.join("..", "gnuviechadmin")))
|
sys.path.insert(0, os.path.abspath(os.path.join('..', 'gnuviechadmin')))
|
||||||
|
|
||||||
os.environ["DJANGO_SETTINGS_MODULE"] = "gnuviechadmin.settings"
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'gnuviechadmin.settings'
|
||||||
os.environ["GVA_SITE_ADMINMAIL"] = "admin@gva.example.org"
|
os.environ['GVA_SITE_ADMINMAIL'] = 'admin@gva.example.org'
|
||||||
|
|
||||||
django.setup()
|
django.setup()
|
||||||
|
|
||||||
|
@ -35,34 +35,31 @@ django.setup()
|
||||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
"releases",
|
'releases', 'sphinx.ext.autodoc', 'celery.contrib.sphinx',
|
||||||
"sphinx.ext.autodoc",
|
'sphinxcontrib.blockdiag']
|
||||||
"celery.contrib.sphinx",
|
|
||||||
"sphinxcontrib.blockdiag",
|
|
||||||
]
|
|
||||||
|
|
||||||
# configuration for releases extension
|
# configuration for releases extension
|
||||||
releases_issue_uri = "https://git.dittberner.info/gnuviech/gva/issues/%s"
|
releases_issue_uri = 'https://git.dittberner.info/gnuviech/gva/issues/%s'
|
||||||
releases_release_uri = "https://git.dittberner.info/gnuviech/gva/src/tag/%s"
|
releases_release_uri = 'https://git.dittberner.info/gnuviech/gva/src/tag/%s'
|
||||||
|
|
||||||
# configuration for blockdiag extension
|
# configuration for blockdiag extension
|
||||||
blockdiag_fontpath = "/usr/share/fonts/truetype/dejavu/"
|
blockdiag_fontpath = '/usr/share/fonts/truetype/dejavu/'
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ["_templates"]
|
templates_path = ['_templates']
|
||||||
|
|
||||||
# The suffix of source filenames.
|
# The suffix of source filenames.
|
||||||
source_suffix = ".rst"
|
source_suffix = '.rst'
|
||||||
|
|
||||||
# The encoding of source files.
|
# The encoding of source files.
|
||||||
#source_encoding = 'utf-8-sig'
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = "index"
|
master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = "gnuviechadmin"
|
project = u'gnuviechadmin'
|
||||||
copyright = "2014-2023, Jan Dittberner"
|
copyright = u'2014-2020, Jan Dittberner'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
@ -72,7 +69,7 @@ copyright = "2014-2023, Jan Dittberner"
|
||||||
from gnuviechadmin import __version__ as release
|
from gnuviechadmin import __version__ as release
|
||||||
|
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = ".".join(release.split(".")[:2])
|
version = ".".join(release.split('.')[:2])
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
@ -86,7 +83,7 @@ version = ".".join(release.split(".")[:2])
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
exclude_patterns = ["_build"]
|
exclude_patterns = ['_build']
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||||
#default_role = None
|
#default_role = None
|
||||||
|
@ -103,7 +100,7 @@ exclude_patterns = ["_build"]
|
||||||
#show_authors = False
|
#show_authors = False
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = "sphinx"
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
# A list of ignored prefixes for module index sorting.
|
||||||
#modindex_common_prefix = []
|
#modindex_common_prefix = []
|
||||||
|
@ -113,7 +110,7 @@ pygments_style = "sphinx"
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
html_theme = "alabaster"
|
html_theme = 'alabaster'
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
|
@ -142,7 +139,7 @@ html_theme = "alabaster"
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ["_static"]
|
html_static_path = ['_static']
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
# using the given strftime format.
|
# using the given strftime format.
|
||||||
|
@ -186,7 +183,7 @@ html_static_path = ["_static"]
|
||||||
#html_file_suffix = None
|
#html_file_suffix = None
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = "gnuviechadmindoc"
|
htmlhelp_basename = 'gnuviechadmindoc'
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output --------------------------------------------------
|
# -- Options for LaTeX output --------------------------------------------------
|
||||||
|
@ -194,8 +191,10 @@ htmlhelp_basename = "gnuviechadmindoc"
|
||||||
latex_elements = {
|
latex_elements = {
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#'papersize': 'letterpaper',
|
#'papersize': 'letterpaper',
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#'pointsize': '10pt',
|
#'pointsize': '10pt',
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#'preamble': '',
|
#'preamble': '',
|
||||||
}
|
}
|
||||||
|
@ -203,13 +202,8 @@ latex_elements = {
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(
|
('index', 'gnuviechadmin.tex', u'gnuviechadmin Documentation',
|
||||||
"index",
|
u'Jan Dittberner', 'manual'),
|
||||||
"gnuviechadmin.tex",
|
|
||||||
"gnuviechadmin Documentation",
|
|
||||||
"Jan Dittberner",
|
|
||||||
"manual",
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
@ -238,7 +232,8 @@ latex_documents = [
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
("index", "gnuviechadmin", "gnuviechadmin Documentation", ["Jan Dittberner"], 1)
|
('index', 'gnuviechadmin', u'gnuviechadmin Documentation',
|
||||||
|
[u'Jan Dittberner'], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
# If true, show URL addresses after external links.
|
||||||
|
@ -251,15 +246,9 @@ man_pages = [
|
||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(
|
('index', 'gnuviechadmin', u'gnuviechadmin Documentation',
|
||||||
"index",
|
u'Jan Dittberner', 'gnuviechadmin', 'Customer center for gnuviech servers.',
|
||||||
"gnuviechadmin",
|
'Miscellaneous'),
|
||||||
"gnuviechadmin Documentation",
|
|
||||||
"Jan Dittberner",
|
|
||||||
"gnuviechadmin",
|
|
||||||
"Customer center for gnuviech servers.",
|
|
||||||
"Miscellaneous",
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
# Documents to append as an appendix to all manuals.
|
||||||
|
|
|
@ -7,7 +7,6 @@ from __future__ import absolute_import, unicode_literals
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
from crispy_forms.layout import Submit
|
from crispy_forms.layout import Submit
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.apps import apps
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.contrib.sites.requests import RequestSite
|
from django.contrib.sites.requests import RequestSite
|
||||||
|
@ -42,7 +41,7 @@ class ContactForm(forms.Form):
|
||||||
def get_context(self):
|
def get_context(self):
|
||||||
if not self.is_valid():
|
if not self.is_valid():
|
||||||
raise ValueError("Cannot generate context from invalid contact form")
|
raise ValueError("Cannot generate context from invalid contact form")
|
||||||
if apps.is_installed("django.contrib.sites"):
|
if Site._meta.installed:
|
||||||
site = Site.objects.get_current()
|
site = Site.objects.get_current()
|
||||||
else:
|
else:
|
||||||
site = RequestSite(self.request)
|
site = RequestSite(self.request)
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: contact_form\n"
|
"Project-Id-Version: contact_form\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-22 13:01+0200\n"
|
||||||
"PO-Revision-Date: 2023-04-22 13:01+0200\n"
|
"PO-Revision-Date: 2023-04-22 13:01+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
|
@ -19,19 +19,19 @@ msgstr ""
|
||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
#: contact_form/forms.py:26
|
#: contact_form/forms.py:25
|
||||||
msgid "Your name"
|
msgid "Your name"
|
||||||
msgstr "Ihr Name"
|
msgstr "Ihr Name"
|
||||||
|
|
||||||
#: contact_form/forms.py:27
|
#: contact_form/forms.py:26
|
||||||
msgid "Your email address"
|
msgid "Your email address"
|
||||||
msgstr "Ihre E-Mail-Adresse"
|
msgstr "Ihre E-Mail-Adresse"
|
||||||
|
|
||||||
#: contact_form/forms.py:28
|
#: contact_form/forms.py:27
|
||||||
msgid "Your message"
|
msgid "Your message"
|
||||||
msgstr "Ihre Nachricht"
|
msgstr "Ihre Nachricht"
|
||||||
|
|
||||||
#: contact_form/forms.py:40
|
#: contact_form/forms.py:39
|
||||||
msgid "Send message"
|
msgid "Send message"
|
||||||
msgstr "Nachricht senden"
|
msgstr "Nachricht senden"
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin dashboard\n"
|
"Project-Id-Version: gnuviechadmin dashboard\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-16 22:07+0200\n"
|
||||||
"PO-Revision-Date: 2023-07-22 19:46+0200\n"
|
"PO-Revision-Date: 2023-04-16 18:31+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -19,6 +19,25 @@ msgstr ""
|
||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/index.html:3
|
||||||
|
msgid "Welcome"
|
||||||
|
msgstr "Willkommen"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/index.html:4
|
||||||
|
msgid "Welcome to our customer self service"
|
||||||
|
msgstr "Willkommen in unserem Selbstservice-System"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/index.html:7
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hello %(full_name)s,<br/> You can visit your <a "
|
||||||
|
"href=\"%(dashboard_url)s\">Dashboard</a> to view and modify your hosting "
|
||||||
|
"options."
|
||||||
|
msgstr ""
|
||||||
|
"Hallo %(full_name)s,<br /> Sie können Ihre <a "
|
||||||
|
"href=\"%(dashboard_url)s\">Startseite</a> besuchen, um Ihre "
|
||||||
|
"Hostingeinstellungen anzusehen und zu bearbeiten."
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:3
|
#: dashboard/templates/dashboard/user_dashboard.html:3
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:6
|
#: dashboard/templates/dashboard/user_dashboard.html:6
|
||||||
#, python-format
|
#, python-format
|
||||||
|
@ -34,26 +53,46 @@ msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:18
|
#: dashboard/templates/dashboard/user_dashboard.html:18
|
||||||
msgid "Setup date"
|
msgid "Disk space"
|
||||||
msgstr "Einrichtungsdatum"
|
msgstr "Speicherplatz"
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:19
|
#: dashboard/templates/dashboard/user_dashboard.html:19
|
||||||
|
msgid "Mailboxes"
|
||||||
|
msgstr "Postfächer"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/user_dashboard.html:20
|
||||||
|
msgid "Databases"
|
||||||
|
msgstr "Datenbanken"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/user_dashboard.html:21
|
||||||
msgid "Actions"
|
msgid "Actions"
|
||||||
msgstr "Aktionen"
|
msgstr "Aktionen"
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:26
|
#: dashboard/templates/dashboard/user_dashboard.html:28
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Show details for %(packagename)s"
|
msgid "Show details for %(packagename)s"
|
||||||
msgstr "Details für %(packagename)s anzeigen"
|
msgstr "Details für %(packagename)s anzeigen"
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:38
|
#: dashboard/templates/dashboard/user_dashboard.html:34
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"The reserved disk space for your hosting package is %(diskspace)s bytes."
|
||||||
|
msgstr ""
|
||||||
|
"Der für Ihr Hostingpaket reservierte Speicherplatz sind %(diskspace)s Bytes."
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/user_dashboard.html:40
|
||||||
|
#, python-format
|
||||||
|
msgid "used %(num)s of %(total)s"
|
||||||
|
msgstr "%(num)s von %(total)s genutzt"
|
||||||
|
|
||||||
|
#: dashboard/templates/dashboard/user_dashboard.html:55
|
||||||
msgid "You have no hosting packages yet."
|
msgid "You have no hosting packages yet."
|
||||||
msgstr "Sie haben noch keine Hostingpakete."
|
msgstr "Sie haben noch keine Hostingpakete."
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:39
|
#: dashboard/templates/dashboard/user_dashboard.html:56
|
||||||
msgid "This user has no hosting packages assigned yet."
|
msgid "This user has no hosting packages assigned yet."
|
||||||
msgstr "Diesem Benutzer sind noch keine Hostingpakete zugewiesen."
|
msgstr "Diesem Benutzer sind noch keine Hostingpakete zugewiesen."
|
||||||
|
|
||||||
#: dashboard/templates/dashboard/user_dashboard.html:43
|
#: dashboard/templates/dashboard/user_dashboard.html:60
|
||||||
msgid "Add hosting package"
|
msgid "Add hosting package"
|
||||||
msgstr "Hostingpaket anlegen"
|
msgstr "Hostingpaket anlegen"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# import celery_app to initialize it
|
# import celery_app to initialize it
|
||||||
from gnuviechadmin.celery import app as celery_app # NOQA
|
from gnuviechadmin.celery import app as celery_app # NOQA
|
||||||
|
|
||||||
__version__ = "0.14.0"
|
__version__ = "0.13.0"
|
||||||
|
|
|
@ -76,6 +76,9 @@ SITES_SITE_NAME = get_env_variable("GVA_SITE_NAME")
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n
|
||||||
USE_I18N = True
|
USE_I18N = True
|
||||||
|
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-tz
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-tz
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
# ######### END GENERAL CONFIGURATION
|
# ######### END GENERAL CONFIGURATION
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from help.models import HelpUser
|
from help.models import HelpUser
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import uuid
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class HelpUser(models.Model):
|
class HelpUser(models.Model):
|
||||||
|
|
|
@ -12,7 +12,6 @@ from .models import (
|
||||||
CustomerHostingPackage,
|
CustomerHostingPackage,
|
||||||
CustomerHostingPackageDomain,
|
CustomerHostingPackageDomain,
|
||||||
CustomerMailboxOption,
|
CustomerMailboxOption,
|
||||||
CustomerPackageDiskUsage,
|
|
||||||
CustomerUserDatabaseOption,
|
CustomerUserDatabaseOption,
|
||||||
DiskSpaceOption,
|
DiskSpaceOption,
|
||||||
HostingPackageTemplate,
|
HostingPackageTemplate,
|
||||||
|
@ -96,18 +95,6 @@ class CustomerHostingPackageDomainInline(admin.TabularInline):
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
class CustomerPackageDiskUsageInline(admin.TabularInline):
|
|
||||||
model = CustomerPackageDiskUsage
|
|
||||||
ordering = ["-used_kb", "source", "item"]
|
|
||||||
fields = ["source", "item", "used_kb"]
|
|
||||||
readonly_fields = ["source", "item", "used_kb"]
|
|
||||||
extra = 0
|
|
||||||
can_delete = False
|
|
||||||
|
|
||||||
def has_add_permission(self, request, obj):
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerHostingPackageAdmin(admin.ModelAdmin):
|
class CustomerHostingPackageAdmin(admin.ModelAdmin):
|
||||||
"""
|
"""
|
||||||
This class implements the admin interface for
|
This class implements the admin interface for
|
||||||
|
@ -123,7 +110,6 @@ class CustomerHostingPackageAdmin(admin.ModelAdmin):
|
||||||
CustomerMailboxOptionInline,
|
CustomerMailboxOptionInline,
|
||||||
CustomerUserDatabaseOptionInline,
|
CustomerUserDatabaseOptionInline,
|
||||||
CustomerHostingPackageDomainInline,
|
CustomerHostingPackageDomainInline,
|
||||||
CustomerPackageDiskUsageInline,
|
|
||||||
]
|
]
|
||||||
list_display = ["name", "customer", "osuser"]
|
list_display = ["name", "customer", "osuser"]
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin hostingpackages\n"
|
"Project-Id-Version: gnuviechadmin hostingpackages\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 20:06+0200\n"
|
"POT-Creation-Date: 2023-04-22 13:14+0200\n"
|
||||||
"PO-Revision-Date: 2023-07-22 20:06+0200\n"
|
"PO-Revision-Date: 2023-04-22 13:15+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -39,206 +39,177 @@ msgstr "Postfachoption hinzufügen"
|
||||||
msgid "Add database option"
|
msgid "Add database option"
|
||||||
msgstr "Datenbankoption hinzufügen"
|
msgstr "Datenbankoption hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/models.py:22
|
#: hostingpackages/models.py:21
|
||||||
msgid "MiB"
|
msgid "MiB"
|
||||||
msgstr "MiB"
|
msgstr "MiB"
|
||||||
|
|
||||||
#: hostingpackages/models.py:22
|
#: hostingpackages/models.py:21
|
||||||
msgid "GiB"
|
msgid "GiB"
|
||||||
msgstr "GiB"
|
msgstr "GiB"
|
||||||
|
|
||||||
#: hostingpackages/models.py:22
|
#: hostingpackages/models.py:21
|
||||||
msgid "TiB"
|
msgid "TiB"
|
||||||
msgstr "TiB"
|
msgstr "TiB"
|
||||||
|
|
||||||
#: hostingpackages/models.py:28
|
#: hostingpackages/models.py:27
|
||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "Beschreibung"
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
#: hostingpackages/models.py:29
|
#: hostingpackages/models.py:28
|
||||||
msgid "mailbox count"
|
msgid "mailbox count"
|
||||||
msgstr "Anzahl Postfächer"
|
msgstr "Anzahl Postfächer"
|
||||||
|
|
||||||
#: hostingpackages/models.py:31 hostingpackages/models.py:60
|
#: hostingpackages/models.py:30 hostingpackages/models.py:59
|
||||||
msgid "disk space"
|
msgid "disk space"
|
||||||
msgstr "Speicherplatz"
|
msgstr "Speicherplatz"
|
||||||
|
|
||||||
#: hostingpackages/models.py:31
|
#: hostingpackages/models.py:30
|
||||||
msgid "disk space for the hosting package"
|
msgid "disk space for the hosting package"
|
||||||
msgstr "Speicherplatz für das Hostingpaket"
|
msgstr "Speicherplatz für das Hostingpaket"
|
||||||
|
|
||||||
#: hostingpackages/models.py:34 hostingpackages/models.py:62
|
#: hostingpackages/models.py:33 hostingpackages/models.py:61
|
||||||
msgid "unit of disk space"
|
msgid "unit of disk space"
|
||||||
msgstr "Maßeinheit für den Speicherplatz"
|
msgstr "Maßeinheit für den Speicherplatz"
|
||||||
|
|
||||||
#: hostingpackages/models.py:45 hostingpackages/models.py:193
|
#: hostingpackages/models.py:44 hostingpackages/models.py:192
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
#: hostingpackages/models.py:48
|
#: hostingpackages/models.py:47
|
||||||
msgid "Hosting package"
|
msgid "Hosting package"
|
||||||
msgstr "Hostingpaket"
|
msgstr "Hostingpaket"
|
||||||
|
|
||||||
#: hostingpackages/models.py:49
|
#: hostingpackages/models.py:48
|
||||||
msgid "Hosting packages"
|
msgid "Hosting packages"
|
||||||
msgstr "Hostingpakete"
|
msgstr "Hostingpakete"
|
||||||
|
|
||||||
#: hostingpackages/models.py:68
|
#: hostingpackages/models.py:67
|
||||||
msgid "Disk space option"
|
msgid "Disk space option"
|
||||||
msgstr "Speicherplatzoption"
|
msgstr "Speicherplatzoption"
|
||||||
|
|
||||||
#: hostingpackages/models.py:69
|
#: hostingpackages/models.py:68
|
||||||
msgid "Disk space options"
|
msgid "Disk space options"
|
||||||
msgstr "Speicherplatzoptionen"
|
msgstr "Speicherplatzoptionen"
|
||||||
|
|
||||||
#: hostingpackages/models.py:72
|
#: hostingpackages/models.py:71
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Additional disk space {space} {unit}"
|
msgid "Additional disk space {space} {unit}"
|
||||||
msgstr "Zusätzlicher Speicherplatz {space} {unit}"
|
msgstr "Zusätzlicher Speicherplatz {space} {unit}"
|
||||||
|
|
||||||
#: hostingpackages/models.py:89
|
#: hostingpackages/models.py:88
|
||||||
msgid "number of databases"
|
msgid "number of databases"
|
||||||
msgstr "Anzahl von Datenbanken"
|
msgstr "Anzahl von Datenbanken"
|
||||||
|
|
||||||
#: hostingpackages/models.py:90
|
#: hostingpackages/models.py:89
|
||||||
msgid "database type"
|
msgid "database type"
|
||||||
msgstr "Datenbanktyp"
|
msgstr "Datenbanktyp"
|
||||||
|
|
||||||
#: hostingpackages/models.py:95
|
#: hostingpackages/models.py:94
|
||||||
msgid "Database option"
|
msgid "Database option"
|
||||||
msgstr "Datenbankoption"
|
msgstr "Datenbankoption"
|
||||||
|
|
||||||
#: hostingpackages/models.py:96
|
#: hostingpackages/models.py:95
|
||||||
msgid "Database options"
|
msgid "Database options"
|
||||||
msgstr "Datenbankoptionen"
|
msgstr "Datenbankoptionen"
|
||||||
|
|
||||||
#: hostingpackages/models.py:100
|
#: hostingpackages/models.py:99
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{type} database"
|
msgid "{type} database"
|
||||||
msgid_plural "{count} {type} databases"
|
msgid_plural "{count} {type} databases"
|
||||||
msgstr[0] "{type}-Datenbank"
|
msgstr[0] "{type}-Datenbank"
|
||||||
msgstr[1] "{count} {type}-Datenbanken"
|
msgstr[1] "{count} {type}-Datenbanken"
|
||||||
|
|
||||||
#: hostingpackages/models.py:121
|
#: hostingpackages/models.py:120
|
||||||
msgid "number of mailboxes"
|
msgid "number of mailboxes"
|
||||||
msgstr "Anzahl von Postfächern"
|
msgstr "Anzahl von Postfächern"
|
||||||
|
|
||||||
#: hostingpackages/models.py:126
|
#: hostingpackages/models.py:125
|
||||||
msgid "Mailbox option"
|
msgid "Mailbox option"
|
||||||
msgstr "Postfachoption"
|
msgstr "Postfachoption"
|
||||||
|
|
||||||
#: hostingpackages/models.py:127
|
#: hostingpackages/models.py:126
|
||||||
msgid "Mailbox options"
|
msgid "Mailbox options"
|
||||||
msgstr "Postfachoptionen"
|
msgstr "Postfachoptionen"
|
||||||
|
|
||||||
#: hostingpackages/models.py:131
|
#: hostingpackages/models.py:130
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{count} additional mailbox"
|
msgid "{count} additional mailbox"
|
||||||
msgid_plural "{count} additional mailboxes"
|
msgid_plural "{count} additional mailboxes"
|
||||||
msgstr[0] "{count} zusätzliches Postfach"
|
msgstr[0] "{count} zusätzliches Postfach"
|
||||||
msgstr[1] "{count} zusätzliche Postfächer"
|
msgstr[1] "{count} zusätzliche Postfächer"
|
||||||
|
|
||||||
#: hostingpackages/models.py:183
|
#: hostingpackages/models.py:182
|
||||||
msgid "customer"
|
msgid "customer"
|
||||||
msgstr "Kunde"
|
msgstr "Kunde"
|
||||||
|
|
||||||
#: hostingpackages/models.py:187
|
#: hostingpackages/models.py:186
|
||||||
msgid "hosting package template"
|
msgid "hosting package template"
|
||||||
msgstr "Hostingpaketvorlage"
|
msgstr "Hostingpaketvorlage"
|
||||||
|
|
||||||
#: hostingpackages/models.py:189
|
#: hostingpackages/models.py:188
|
||||||
msgid "The hosting package template that this hosting package is based on"
|
msgid "The hosting package template that this hosting package is based on"
|
||||||
msgstr "Die Hostingpaketvorlage, auf der dieses Hostingpaket aufgebaut ist"
|
msgstr "Die Hostingpaketvorlage, auf der dieses Hostingpaket aufgebaut ist"
|
||||||
|
|
||||||
#: hostingpackages/models.py:196
|
#: hostingpackages/models.py:195
|
||||||
msgid "Operating system user"
|
msgid "Operating system user"
|
||||||
msgstr "Betriebssystemnutzer"
|
msgstr "Betriebssystemnutzer"
|
||||||
|
|
||||||
#: hostingpackages/models.py:206
|
#: hostingpackages/models.py:205
|
||||||
msgid "customer hosting package"
|
msgid "customer hosting package"
|
||||||
msgstr "Kundenhostingpaket"
|
msgstr "Kundenhostingpaket"
|
||||||
|
|
||||||
#: hostingpackages/models.py:207
|
#: hostingpackages/models.py:206
|
||||||
msgid "customer hosting packages"
|
msgid "customer hosting packages"
|
||||||
msgstr "Kundenhostingpakete"
|
msgstr "Kundenhostingpakete"
|
||||||
|
|
||||||
#: hostingpackages/models.py:210
|
#: hostingpackages/models.py:209
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{name} for {customer}"
|
msgid "{name} for {customer}"
|
||||||
msgstr "{name} für {customer}"
|
msgstr "{name} für {customer}"
|
||||||
|
|
||||||
#: hostingpackages/models.py:419 hostingpackages/models.py:446
|
#: hostingpackages/models.py:388 hostingpackages/models.py:415
|
||||||
#: hostingpackages/models.py:511
|
|
||||||
msgid "hosting package"
|
msgid "hosting package"
|
||||||
msgstr "Hostingpaket"
|
msgstr "Hostingpaket"
|
||||||
|
|
||||||
#: hostingpackages/models.py:424
|
#: hostingpackages/models.py:393
|
||||||
msgid "hosting domain"
|
msgid "hosting domain"
|
||||||
msgstr "Hostingdomain"
|
msgstr "Hostingdomain"
|
||||||
|
|
||||||
#: hostingpackages/models.py:451
|
#: hostingpackages/models.py:420
|
||||||
msgid "customer hosting option"
|
msgid "customer hosting option"
|
||||||
msgstr "kundenspezifische Hostingoption"
|
msgstr "kundenspezifische Hostingoption"
|
||||||
|
|
||||||
#: hostingpackages/models.py:452
|
#: hostingpackages/models.py:421
|
||||||
msgid "customer hosting options"
|
msgid "customer hosting options"
|
||||||
msgstr "kundenspezifische Hostingoptionen"
|
msgstr "kundenspezifische Hostingoptionen"
|
||||||
|
|
||||||
#: hostingpackages/models.py:464
|
#: hostingpackages/models.py:433
|
||||||
msgid "disk space option template"
|
msgid "disk space option template"
|
||||||
msgstr "Speicherplatzoptionsvorlage"
|
msgstr "Speicherplatzoptionsvorlage"
|
||||||
|
|
||||||
#: hostingpackages/models.py:466
|
#: hostingpackages/models.py:435
|
||||||
msgid "The disk space option template that this disk space option is based on"
|
msgid "The disk space option template that this disk space option is based on"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Speicherplatzoptionsvorlage auf der diese Speicherplatzoption aufgebaut "
|
"Die Speicherplatzoptionsvorlage auf der diese Speicherplatzoption aufgebaut "
|
||||||
"ist"
|
"ist"
|
||||||
|
|
||||||
#: hostingpackages/models.py:481
|
#: hostingpackages/models.py:450
|
||||||
msgid "user database option template"
|
msgid "user database option template"
|
||||||
msgstr "Nutzerdatenbankoptionsvorlage"
|
msgstr "Nutzerdatenbankoptionsvorlage"
|
||||||
|
|
||||||
#: hostingpackages/models.py:483
|
#: hostingpackages/models.py:452
|
||||||
msgid "The user database option template that this database option is based on"
|
msgid "The user database option template that this database option is based on"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Nutzerdatenbankoptionsvorlage auf der diese Datenbankoption aufgebaut ist"
|
"Die Nutzerdatenbankoptionsvorlage auf der diese Datenbankoption aufgebaut ist"
|
||||||
|
|
||||||
#: hostingpackages/models.py:498
|
#: hostingpackages/models.py:467
|
||||||
msgid "mailbox option template"
|
msgid "mailbox option template"
|
||||||
msgstr "Postfachoptionsvorlage"
|
msgstr "Postfachoptionsvorlage"
|
||||||
|
|
||||||
#: hostingpackages/models.py:499
|
#: hostingpackages/models.py:468
|
||||||
msgid "The mailbox option template that this mailbox option is based on"
|
msgid "The mailbox option template that this mailbox option is based on"
|
||||||
msgstr "Die Postfachoptionsvorlage auf der diese Postfachoption aufgebaut ist"
|
msgstr "Die Postfachoptionsvorlage auf der diese Postfachoption aufgebaut ist"
|
||||||
|
|
||||||
#: hostingpackages/models.py:512
|
|
||||||
msgid "The hosting package"
|
|
||||||
msgstr "Das Hostingpaket"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:516
|
|
||||||
msgid "data source"
|
|
||||||
msgstr "Datenquelle"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:517
|
|
||||||
msgid "disk"
|
|
||||||
msgstr "Festplatte"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:517
|
|
||||||
msgid "mysql"
|
|
||||||
msgstr "MySQL"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:517
|
|
||||||
msgid "pgsql"
|
|
||||||
msgstr "PostgreSQL"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:519
|
|
||||||
msgid "data item"
|
|
||||||
msgstr "Dateneinheit"
|
|
||||||
|
|
||||||
#: hostingpackages/models.py:521
|
|
||||||
msgid "space used in KiB"
|
|
||||||
msgstr "genutzter Platz in KiB"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/add_hosting_option.html:4
|
#: hostingpackages/templates/hostingpackages/add_hosting_option.html:4
|
||||||
#: hostingpackages/templates/hostingpackages/add_hosting_option.html:7
|
#: hostingpackages/templates/hostingpackages/add_hosting_option.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
|
@ -253,6 +224,7 @@ msgstr "Alle Hostingpakete"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:11
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:11
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:36
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:36
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:26
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
|
@ -265,46 +237,16 @@ msgid "OS User"
|
||||||
msgstr "OS-Nutzer"
|
msgstr "OS-Nutzer"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:14
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:14
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:40
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:27
|
||||||
#: hostingpackages/views.py:183
|
|
||||||
msgid "Disk space"
|
|
||||||
msgstr "Speicherplatz"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:15
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:54
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:48
|
|
||||||
#: hostingpackages/views.py:190
|
|
||||||
msgid "Mailboxes"
|
|
||||||
msgstr "Postfächer"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:16
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:239
|
|
||||||
#: hostingpackages/views.py:197
|
|
||||||
msgid "Databases"
|
|
||||||
msgstr "Datenbanken"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:17
|
|
||||||
msgid "Setup date"
|
msgid "Setup date"
|
||||||
msgstr "Einrichtungsdatum"
|
msgstr "Einrichtungsdatum"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:28
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:31
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"The reserved disk space for your hosting package is %(diskspace)s bytes."
|
|
||||||
msgstr ""
|
|
||||||
"Der für Ihr Hostingpaket reservierte Speicherplatz beträgt %(diskspace)s "
|
|
||||||
"Bytes."
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:34
|
|
||||||
#, python-format
|
|
||||||
msgid "used %(num)s of %(total)s"
|
|
||||||
msgstr "used %(num)s of %(total)s"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:48
|
|
||||||
msgid "No hosting packages have been setup yet."
|
msgid "No hosting packages have been setup yet."
|
||||||
msgstr "Es wurden noch keine Hostingpakete eingerichtet."
|
msgstr "Es wurden noch keine Hostingpakete eingerichtet."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:51
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_admin_list.html:34
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:46
|
||||||
msgid "Add hosting package"
|
msgid "Add hosting package"
|
||||||
msgstr "Hostingpaket anlegen"
|
msgstr "Hostingpaket anlegen"
|
||||||
|
|
||||||
|
@ -345,45 +287,38 @@ msgstr "Informationen zum Hostingpaket ändern"
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Beschreibung"
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:40
|
||||||
|
#: hostingpackages/views.py:199
|
||||||
|
msgid "Disk space"
|
||||||
|
msgstr "Speicherplatz"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:43
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:43
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid "The reserved disk space for your hosting package is %(diskspace)s bytes"
|
||||||
"You use %(used_space)s of the reserved disk space of %(disk_space)s for your "
|
|
||||||
"hosting package"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sie nutzen aktuell %(used_space)s des reservierten Speicherplatzes von "
|
"Der für Ihr Hostingpaket reservierte Speicherplatz beträgt %(diskspace)s "
|
||||||
"%(disk_space)s für Ihr Hostingpaket"
|
"Bytes"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:45
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:27
|
|
||||||
#, python-format
|
|
||||||
msgid "%(used_space)s of %(disk_space)s (%(space_level_percent)s%%)"
|
|
||||||
msgstr "%(used_space)s von %(disk_space)s (%(space_level_percent)s%%)"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:47
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:47
|
||||||
msgid "Disk usage details"
|
|
||||||
msgstr "Details zur Speicherplatznutzung"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:47
|
|
||||||
msgid "Details"
|
|
||||||
msgstr "Details"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:49
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:31
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The package contributes %(package_space)s the difference comes from disk "
|
"The package contributes %(humanbytes)s (%(packagespace)s bytes) the "
|
||||||
"space options"
|
"difference comes from disk space options"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Paket trägt %(package_space)s zur Gesamtgröße bei, der Unterschied "
|
"Das Paket trägt %(humanbytes)s (%(packagespace)s Bytes) zur Gesamtgröße bei, "
|
||||||
"ergibt sich aus Speicherplatzoptionen"
|
"der Unterschied ergibt sich aus Speicherplatzoptionen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:56
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:52
|
||||||
|
#: hostingpackages/views.py:206
|
||||||
|
msgid "Mailboxes"
|
||||||
|
msgstr "Postfächer"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:54
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(num)s of %(total)s in use"
|
msgid "%(num)s of %(total)s in use"
|
||||||
msgstr "%(num)s von %(total)s genutzt"
|
msgstr "%(num)s von %(total)s genutzt"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:59
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:57
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The package provides %(mailboxcount)s mailboxes the difference comes from "
|
"The package provides %(mailboxcount)s mailboxes the difference comes from "
|
||||||
|
@ -392,272 +327,234 @@ msgstr ""
|
||||||
"Das Paket bietet %(mailboxcount)s Postfächer, der Unterschied ergibt sich "
|
"Das Paket bietet %(mailboxcount)s Postfächer, der Unterschied ergibt sich "
|
||||||
"durch die Postfachoptionen."
|
"durch die Postfachoptionen."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:61
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:59
|
||||||
msgid "SFTP username"
|
msgid "SFTP username"
|
||||||
msgstr "SFTP-Benutzername"
|
msgstr "SFTP-Benutzername"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:62
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:60
|
||||||
msgid "SSH/SFTP username"
|
msgid "SSH/SFTP username"
|
||||||
msgstr "SSH/SFTP-Benutzername"
|
msgstr "SSH/SFTP-Benutzername"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:65
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:63
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "There is an SSH public key set for this user."
|
msgid "There is an SSH public key set for this user."
|
||||||
msgid_plural "There are %(counter)s SSH public keys set for this user."
|
msgid_plural "There are %(counter)s SSH public keys set for this user."
|
||||||
msgstr[0] "Es wurde ein SSH-Schlüssel für diesen Nutzer hinterlegt."
|
msgstr[0] "Es wurde ein SSH-Schlüssel für diesen Nutzer hinterlegt."
|
||||||
msgstr[1] "Es wurden %(counter)s SSH-Schlüssel für diesen Nutzer hinterlegt."
|
msgstr[1] "Es wurden %(counter)s SSH-Schlüssel für diesen Nutzer hinterlegt."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:67
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:65
|
||||||
msgid "Upload server"
|
msgid "Upload server"
|
||||||
msgstr "Uploadserver"
|
msgstr "Uploadserver"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:75
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:73
|
||||||
msgid "Hosting Package Options"
|
msgid "Hosting Package Options"
|
||||||
msgstr "Hostingpaketoptionen"
|
msgstr "Hostingpaketoptionen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:83
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:81
|
||||||
msgid "No options booked"
|
msgid "No options booked"
|
||||||
msgstr "Keine Optionen gebucht"
|
msgstr "Keine Optionen gebucht"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:89
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:87
|
||||||
msgid "Add another hosting option"
|
msgid "Add another hosting option"
|
||||||
msgstr "Eine weitere Hostingoption hinzufügen"
|
msgstr "Eine weitere Hostingoption hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:89
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:87
|
||||||
msgid "Add option"
|
msgid "Add option"
|
||||||
msgstr "Option hinzufügen"
|
msgstr "Option hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:96
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:94
|
||||||
msgid "Hosting Package Actions"
|
msgid "Hosting Package Actions"
|
||||||
msgstr "Aktionen zum Hostingpaket"
|
msgstr "Aktionen zum Hostingpaket"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:100
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:98
|
||||||
msgid "Edit Hosting Package Description"
|
msgid "Edit Hosting Package Description"
|
||||||
msgstr "Beschreibung des Hostingpakets bearbeiten"
|
msgstr "Beschreibung des Hostingpakets bearbeiten"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:100
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:98
|
||||||
msgid "Edit description"
|
msgid "Edit description"
|
||||||
msgstr "Beschreibung bearbeiten"
|
msgstr "Beschreibung bearbeiten"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:103
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:101
|
||||||
msgid "Set SFTP password"
|
msgid "Set SFTP password"
|
||||||
msgstr "SFTP-Passwort setzen"
|
msgstr "SFTP-Passwort setzen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:104
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:102
|
||||||
msgid "Set SSH/SFTP password"
|
msgid "Set SSH/SFTP password"
|
||||||
msgstr "SSH/SFTP-Passwort setzen"
|
msgstr "SSH/SFTP-Passwort setzen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:107
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:105
|
||||||
msgid "Add an SSH public key that can be used as an alternative for password"
|
msgid "Add an SSH public key that can be used as an alternative for password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Einen SSH-Schlüssel, der als Alternative zum Passwort genutzt werden kann, "
|
"Einen SSH-Schlüssel, der als Alternative zum Passwort genutzt werden kann, "
|
||||||
"hinzufügen"
|
"hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:109
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:107
|
||||||
msgid "Add SSH public key"
|
msgid "Add SSH public key"
|
||||||
msgstr "SSH-Schlüssel hinzufügen"
|
msgstr "SSH-Schlüssel hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:118
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:116
|
||||||
msgid "Domains"
|
msgid "Domains"
|
||||||
msgstr "Domains"
|
msgstr "Domains"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:123
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:121
|
||||||
msgid "Domain name"
|
msgid "Domain name"
|
||||||
msgstr "Domainname"
|
msgstr "Domainname"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:124
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:122
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:203
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:201
|
||||||
msgid "Mail addresses"
|
msgid "Mail addresses"
|
||||||
msgstr "E-Mailadressen"
|
msgstr "E-Mailadressen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:125
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:123
|
||||||
msgid "Websites"
|
msgid "Websites"
|
||||||
msgstr "Webauftritte"
|
msgstr "Webauftritte"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:126
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:124
|
||||||
msgid "Domain actions"
|
msgid "Domain actions"
|
||||||
msgstr "Domainaktionen"
|
msgstr "Domainaktionen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:127
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:125
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:206
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:204
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:249
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:247
|
||||||
msgid "Actions"
|
msgid "Actions"
|
||||||
msgstr "Aktionen"
|
msgstr "Aktionen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:139
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:137
|
||||||
msgid "Edit mail address targets"
|
msgid "Edit mail address targets"
|
||||||
msgstr "E-Mailadressziele bearbeiten"
|
msgstr "E-Mailadressziele bearbeiten"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:139
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:141
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:141
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:143
|
|
||||||
msgid "Delete mail address"
|
msgid "Delete mail address"
|
||||||
msgstr "E-Mailadresse löschen"
|
msgstr "E-Mailadresse löschen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:148
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:146
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:163
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:161
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Keine"
|
msgstr "Keine"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:154
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:156
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:156
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:158
|
|
||||||
msgid "Delete website"
|
msgid "Delete website"
|
||||||
msgstr "Webauftritt löschen"
|
msgstr "Webauftritt löschen"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:167
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:169
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:169
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:171
|
|
||||||
msgid "Add mail address"
|
msgid "Add mail address"
|
||||||
msgstr "E-Mailadresse hinzufügen"
|
msgstr "E-Mailadresse hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:176
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:174
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:177
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:175
|
||||||
msgid "Add website"
|
msgid "Add website"
|
||||||
msgstr "Webauftritt anlegen"
|
msgstr "Webauftritt anlegen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:185
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:183
|
||||||
msgid "There are no domains assigned to this hosting package yet."
|
msgid "There are no domains assigned to this hosting package yet."
|
||||||
msgstr "Diesem Paket sind noch keine Domains zugeordnet."
|
msgstr "Diesem Paket sind noch keine Domains zugeordnet."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:189
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:187
|
||||||
msgid "Add domain"
|
msgid "Add domain"
|
||||||
msgstr "Domain hinzufügen"
|
msgstr "Domain hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:197
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:195
|
||||||
msgid "E-Mail-Accounts"
|
msgid "E-Mail-Accounts"
|
||||||
msgstr "E-Mail-Konten"
|
msgstr "E-Mail-Konten"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:202
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:200
|
||||||
msgid "Mailbox"
|
msgid "Mailbox"
|
||||||
msgstr "Postfach"
|
msgstr "Postfach"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:204
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:202
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:216
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:214
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr "Aktiv"
|
msgstr "Aktiv"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:205
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:203
|
||||||
msgid "Mailbox actions"
|
msgid "Mailbox actions"
|
||||||
msgstr "Postfachaktionen"
|
msgstr "Postfachaktionen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:217
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:215
|
||||||
msgid "inactive"
|
msgid "inactive"
|
||||||
msgstr "inaktiv"
|
msgstr "inaktiv"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:220
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:218
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:221
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:219
|
||||||
msgid "Set mailbox password"
|
msgid "Set mailbox password"
|
||||||
msgstr "Postfachpasswort setzen"
|
msgstr "Postfachpasswort setzen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:227
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:225
|
||||||
msgid "There are no mailboxes assigned to this hosting package yet."
|
msgid "There are no mailboxes assigned to this hosting package yet."
|
||||||
msgstr "Diesem Hostingpaket sind noch keine Postfächer zugeordnet."
|
msgstr "Diesem Hostingpaket sind noch keine Postfächer zugeordnet."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:232
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:230
|
||||||
msgid "Add mailbox"
|
msgid "Add mailbox"
|
||||||
msgstr "Postfach hinzufügen"
|
msgstr "Postfach hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:244
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:237
|
||||||
|
#: hostingpackages/views.py:213
|
||||||
|
msgid "Databases"
|
||||||
|
msgstr "Datenbanken"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:242
|
||||||
msgid "Database name"
|
msgid "Database name"
|
||||||
msgstr "Datenbankname"
|
msgstr "Datenbankname"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:245
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:243
|
||||||
msgid "Database user"
|
msgid "Database user"
|
||||||
msgstr "Datenbanknutzer"
|
msgstr "Datenbanknutzer"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:246
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:244
|
||||||
msgid "Database type"
|
msgid "Database type"
|
||||||
msgstr "Datenbanktyp"
|
msgstr "Datenbanktyp"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:247
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:245
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr "Typ"
|
msgstr "Typ"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:248
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:246
|
||||||
msgid "Database actions"
|
msgid "Database actions"
|
||||||
msgstr "Datenbankaktionen"
|
msgstr "Datenbankaktionen"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:258
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:260
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:260
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:262
|
|
||||||
msgid "Set database user password"
|
msgid "Set database user password"
|
||||||
msgstr "Datenbanknutzerpasswort setzen"
|
msgstr "Datenbanknutzerpasswort setzen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:264
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:262
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:265
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:263
|
||||||
msgid "Delete database"
|
msgid "Delete database"
|
||||||
msgstr "Datenbank löschen"
|
msgstr "Datenbank löschen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:272
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:270
|
||||||
msgid "There are no databases assigned to this hosting package yet."
|
msgid "There are no databases assigned to this hosting package yet."
|
||||||
msgstr "Diesem Hostingpaket sind noch keine Datenbanken zugeordnet."
|
msgstr "Diesem Hostingpaket sind noch keine Datenbanken zugeordnet."
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:277
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_detail.html:275
|
||||||
msgid "Add database"
|
msgid "Add database"
|
||||||
msgstr "Datenbank hinzufügen"
|
msgstr "Datenbank hinzufügen"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:6
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:5
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:14
|
||||||
|
msgid "Your hosting packages"
|
||||||
|
msgstr "Ihre Hostingpakete"
|
||||||
|
|
||||||
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Disk usage of your Hosting Package %(package)s"
|
msgid "Hosting Packages of %(customer)s"
|
||||||
msgstr "Speicherplatznutzung Ihres Hostingpakets %(package)s"
|
msgstr "Hostingpakete des Kunden %(customer)s"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:10
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:16
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Disk usage of Hosting Package %(package)s of %(full_name)s"
|
msgid "Hosting Packages <small>of %(customer)s</small>"
|
||||||
msgstr "Speicherplatznutzung des Hostingpakets %(package)s von %(full_name)s"
|
msgstr "Hostingpakete <small>des Kunden %(customer)s</small>"
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:16
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:41
|
||||||
#, python-format
|
msgid "You have no hosting packages setup yet."
|
||||||
msgid ""
|
msgstr "Es wurden noch keine Hostingpakete für Sie eingerichtet."
|
||||||
"Disk usage of Hosting Package <a href=\"%(package_url)s\">%(package)s</a>"
|
|
||||||
msgstr ""
|
|
||||||
"Speicherplatznutzung des Hostingpakets <a "
|
|
||||||
"href=\"%(package_url)s\">%(package)s</a>"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:22
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_list.html:42
|
||||||
#, python-format
|
msgid "There are no hosting packages setup for this customer yet."
|
||||||
msgid ""
|
msgstr "Es wurden noch keine Hostingpakete für diesen Kunden eingerichtet."
|
||||||
"You use %(used_space)s of the reserved disk space of %(disk_space)s for your "
|
|
||||||
"hosting package."
|
|
||||||
msgstr ""
|
|
||||||
"Sie nutzen %(used_space)s des reservierten Speicherplatzes von "
|
|
||||||
"%(disk_space)s für Ihr Hostingpaket."
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:35
|
|
||||||
msgid "Breakdown by usage"
|
|
||||||
msgstr "Aufgliederung nach Nutzung"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:37
|
|
||||||
msgid "Regular file system usage"
|
|
||||||
msgstr "Reguläre Dateisystemnutzung"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:41
|
|
||||||
msgid "Origin"
|
|
||||||
msgstr "Quelle"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:42
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:61
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:78
|
|
||||||
msgid "Used space"
|
|
||||||
msgstr "Genutzter Speicherplatz"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:47
|
|
||||||
msgid "Website data"
|
|
||||||
msgstr "Webseiten-Daten"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:48
|
|
||||||
msgid "Other"
|
|
||||||
msgstr "Sonstiges"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:56
|
|
||||||
msgid "MySQL/MariaDB database usage"
|
|
||||||
msgstr "MySQL/MariaDB-Datenbanknutzung"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:60
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:77
|
|
||||||
msgid "Database"
|
|
||||||
msgstr "Datenbank"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_disk_usage_details.html:73
|
|
||||||
msgid "PostgreSQL database usage"
|
|
||||||
msgstr "PostgreSQL-Datenbanknutzung"
|
|
||||||
|
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_option_choices.html:5
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_option_choices.html:5
|
||||||
#: hostingpackages/templates/hostingpackages/customerhostingpackage_option_choices.html:8
|
#: hostingpackages/templates/hostingpackages/customerhostingpackage_option_choices.html:8
|
||||||
|
@ -668,12 +565,12 @@ msgstr ""
|
||||||
"Wählen Sie eine neue Option für das Hostingpaket %(package)s des Kunden "
|
"Wählen Sie eine neue Option für das Hostingpaket %(package)s des Kunden "
|
||||||
"%(full_name)s"
|
"%(full_name)s"
|
||||||
|
|
||||||
#: hostingpackages/views.py:62 hostingpackages/views.py:96
|
#: hostingpackages/views.py:49 hostingpackages/views.py:83
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Started setup of new hosting package {name}."
|
msgid "Started setup of new hosting package {name}."
|
||||||
msgstr "Einrichtung des Hostingpakets {name} wurde gestartet."
|
msgstr "Einrichtung des Hostingpakets {name} wurde gestartet."
|
||||||
|
|
||||||
#: hostingpackages/views.py:271
|
#: hostingpackages/views.py:287
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Successfully added option {option} to hosting package {package}."
|
msgid "Successfully added option {option} to hosting package {package}."
|
||||||
msgstr "Option {option} erfolgreich zum Hostingpaket {package} hinzugefügt."
|
msgstr "Option {option} erfolgreich zum Hostingpaket {package} hinzugefügt."
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Generated by Django 4.2.3 on 2023-07-22 17:31
|
|
||||||
|
|
||||||
import django.utils.timezone
|
|
||||||
import model_utils.fields
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
replaces = [
|
|
||||||
("hostingpackages", "0007_add_disk_usage_table"),
|
|
||||||
("hostingpackages", "0008_add_default_for_used_kb_change_uniqueness"),
|
|
||||||
]
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("hostingpackages", "0006_auto_20150125_1510"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="CustomerPackageDiskUsage",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.AutoField(
|
|
||||||
auto_created=True,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
verbose_name="ID",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"created",
|
|
||||||
model_utils.fields.AutoCreatedField(
|
|
||||||
default=django.utils.timezone.now,
|
|
||||||
editable=False,
|
|
||||||
verbose_name="created",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"modified",
|
|
||||||
model_utils.fields.AutoLastModifiedField(
|
|
||||||
default=django.utils.timezone.now,
|
|
||||||
editable=False,
|
|
||||||
verbose_name="modified",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"source",
|
|
||||||
models.CharField(
|
|
||||||
choices=[
|
|
||||||
("disk", "disk"),
|
|
||||||
("mysql", "mysql"),
|
|
||||||
("pgsql", "pgsql"),
|
|
||||||
],
|
|
||||||
verbose_name="data source",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("item", models.CharField(verbose_name="data item")),
|
|
||||||
(
|
|
||||||
"used_kb",
|
|
||||||
models.PositiveBigIntegerField(
|
|
||||||
default=0, verbose_name="space used in KiB"
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"package",
|
|
||||||
models.ForeignKey(
|
|
||||||
help_text="The hosting package",
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
to="hostingpackages.customerhostingpackage",
|
|
||||||
verbose_name="hosting package",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
"unique_together": {("package", "source", "item")},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -269,31 +269,6 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
return DISK_SPACE_FACTORS[unit][min_unit] * diskspace
|
return DISK_SPACE_FACTORS[unit][min_unit] * diskspace
|
||||||
return DISK_SPACE_FACTORS[min_unit][unit] * diskspace
|
return DISK_SPACE_FACTORS[min_unit][unit] * diskspace
|
||||||
|
|
||||||
disk_space = property(get_disk_space)
|
|
||||||
|
|
||||||
def get_used_disk_space_sum(self, unit=None):
|
|
||||||
"""
|
|
||||||
Get the used disk space of this hosting package from submitted disk space statistics.
|
|
||||||
|
|
||||||
:param unit: value from :py:data:`DISK_SPACE_UNITS` or :py:const:`None`
|
|
||||||
:return: disk space in unit or bytes (if parameter unit is :py:const:`None`)
|
|
||||||
:rtype: int
|
|
||||||
|
|
||||||
"""
|
|
||||||
sum = 0
|
|
||||||
for usage in self.customerpackagediskusage_set.all():
|
|
||||||
sum += usage.size_in_bytes
|
|
||||||
if unit is None:
|
|
||||||
return sum
|
|
||||||
return DISK_SPACE_FACTORS[0][unit] * sum
|
|
||||||
|
|
||||||
used_disk_space_sum = property(get_used_disk_space_sum)
|
|
||||||
|
|
||||||
def get_space_level(self):
|
|
||||||
return self.used_disk_space_sum / self.disk_space * 100.0
|
|
||||||
|
|
||||||
space_level = property(get_space_level)
|
|
||||||
|
|
||||||
def get_package_space(self, unit=None):
|
def get_package_space(self, unit=None):
|
||||||
"""
|
"""
|
||||||
Get the total disk space reserved for this package without looking at
|
Get the total disk space reserved for this package without looking at
|
||||||
|
@ -499,34 +474,3 @@ class CustomerMailboxOption(MailboxOptionBase, CustomerHostingPackageOption):
|
||||||
help_text=_("The mailbox option template that this mailbox option is based on"),
|
help_text=_("The mailbox option template that this mailbox option is based on"),
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomerPackageDiskUsage(TimeStampedModel):
|
|
||||||
"""
|
|
||||||
This class represents disk usage statistics for a customer hosting package.
|
|
||||||
"""
|
|
||||||
|
|
||||||
package = models.ForeignKey(
|
|
||||||
CustomerHostingPackage,
|
|
||||||
verbose_name=_("hosting package"),
|
|
||||||
help_text=_("The hosting package"),
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
)
|
|
||||||
source = models.CharField(
|
|
||||||
verbose_name=_("data source"),
|
|
||||||
choices=(("disk", _("disk")), ("mysql", _("mysql")), ("pgsql", _("pgsql"))),
|
|
||||||
)
|
|
||||||
item = models.CharField(verbose_name=_("data item"))
|
|
||||||
used_kb = models.PositiveBigIntegerField(
|
|
||||||
verbose_name=_("space used in KiB"), default=0
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
unique_together = ("package", "source", "item")
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "%s %s = %d KiB" % (self.source, self.item, self.used_kb)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def size_in_bytes(self):
|
|
||||||
return self.used_kb * 1024
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
from rest_framework import serializers
|
|
||||||
|
|
||||||
from hostingpackages.models import CustomerPackageDiskUsage
|
|
||||||
|
|
||||||
|
|
||||||
class DiskUsageSerializer(serializers.Serializer):
|
|
||||||
user = serializers.CharField()
|
|
|
@ -38,16 +38,14 @@
|
||||||
<dt>{% translate "Description" %}</dt>
|
<dt>{% translate "Description" %}</dt>
|
||||||
<dd>{{ hostingpackage.description|default:"-" }}</dd>
|
<dd>{{ hostingpackage.description|default:"-" }}</dd>
|
||||||
<dt>{% translate "Disk space" %}</dt>
|
<dt>{% translate "Disk space" %}</dt>
|
||||||
{% with used_space=hostingpackage.get_used_disk_space_sum|filesizeformat disk_space=hostingpackage.get_disk_space|filesizeformat package_space=hostingpackage.get_package_space|filesizeformat space_level=hostingpackage.space_level %}
|
{% with diskspace=hostingpackage.get_disk_space packagespace=hostingpackage.get_package_space %}
|
||||||
<dd>
|
<dd>
|
||||||
<span title="{% blocktranslate trimmed %}
|
<span title="{% blocktranslate trimmed %}
|
||||||
You use {{ used_space }} of the reserved disk space of {{ disk_space }} for your hosting package
|
The reserved disk space for your hosting package is {{ diskspace }} bytes
|
||||||
{% endblocktranslate %}" class="text-{% if space_level > 90.0 %}danger{% elif space_level > 80.0 %}warning{% else %}success{% endif %}">{% blocktranslate with space_level_percent=space_level|floatformat:1 trimmed%}
|
{% endblocktranslate %}">{{ diskspace|filesizeformat }}</span>
|
||||||
{{ used_space }} of {{ disk_space }} ({{ space_level_percent }}%)
|
|
||||||
{% endblocktranslate %} <a title="{% translate "Disk usage details" %}" href="{% url "disk_usage_details" package=hostingpackage.id %}">{% translate "Details" %}</a></span>
|
|
||||||
<i class="bi-info-circle"
|
<i class="bi-info-circle"
|
||||||
title="{% blocktranslate trimmed %}
|
title="{% blocktranslate with humanbytes=packagespace|filesizeformat trimmed %}
|
||||||
The package contributes {{ package_space }} the difference comes from disk space options
|
The package contributes {{ humanbytes }} ({{ packagespace }} bytes) the difference comes from disk space options
|
||||||
{% endblocktranslate %}"></i>
|
{% endblocktranslate %}"></i>
|
||||||
</dd>
|
</dd>
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
{% extends "hostingpackages/base.html" %}
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
{% block title %}{{ block.super }} - {% spaceless %}
|
|
||||||
{% if user == customer %}
|
|
||||||
{% blocktranslate with package=hostingpackage.name trimmed %}
|
|
||||||
Disk usage of your Hosting Package {{ package }}
|
|
||||||
{% endblocktranslate %}
|
|
||||||
{% else %}
|
|
||||||
{% blocktranslate with package=hostingpackage.name full_name=customer.get_full_name trimmed %}
|
|
||||||
Disk usage of Hosting Package {{ package }} of {{ full_name }}
|
|
||||||
{% endblocktranslate %}
|
|
||||||
{% endif %}
|
|
||||||
{% endspaceless %}{% endblock title %}
|
|
||||||
|
|
||||||
{% block page_title %}{% blocktranslate with package=hostingpackage.name package_url=hostingpackage.get_absolute_url trimmed %}
|
|
||||||
Disk usage of Hosting Package <a href="{{ package_url }}">{{ package }}</a>
|
|
||||||
{% endblocktranslate %}{% endblock page_title %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
{% with used_space=hostingpackage.get_used_disk_space_sum|filesizeformat disk_space=hostingpackage.get_disk_space|filesizeformat package_space=hostingpackage.get_package_space|filesizeformat space_level=hostingpackage.space_level %}
|
|
||||||
<p>{% blocktranslate trimmed %}
|
|
||||||
You use {{ used_space }} of the reserved disk space of {{ disk_space }} for your hosting package.
|
|
||||||
{% endblocktranslate %}</p>
|
|
||||||
<p class="lead"><span
|
|
||||||
class="text-{% if space_level > 90.0 %}danger{% elif space_level > 80.0 %}warning{% else %}success{% endif %}">
|
|
||||||
{% blocktranslate with space_level_percent=space_level|floatformat:1 trimmed %}
|
|
||||||
{{ used_space }} of {{ disk_space }} ({{ space_level_percent }}%)
|
|
||||||
{% endblocktranslate %}</span>
|
|
||||||
<i class="bi-info-circle"
|
|
||||||
title="{% blocktranslate trimmed %}
|
|
||||||
The package contributes {{ package_space }} the difference comes from disk space options
|
|
||||||
{% endblocktranslate %}"></i>
|
|
||||||
</p>
|
|
||||||
<h2>{% trans "Breakdown by usage" %}</h2>
|
|
||||||
{% if disk_usage %}
|
|
||||||
<h3>{% trans "Regular file system usage" %}</h3>
|
|
||||||
<table class="table table-condensed">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{% translate "Origin" %}</th>
|
|
||||||
<th class="text-end">{% translate "Used space" %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for line in disk_usage %}
|
|
||||||
<tr>
|
|
||||||
<td>{% if line.item == "web" %}{% translate "Website data" %}{% elif line.item == "mail" %}
|
|
||||||
{% translate "Mailboxes" %}{% elif line.item == "other" %}{% translate "Other" %}{% else %}
|
|
||||||
{{ line.item }}{% endif %}</td>
|
|
||||||
<td class="text-end">{{ line.size_in_bytes|filesizeformat }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
{% if mysql_usage %}
|
|
||||||
<h3>{% trans "MySQL/MariaDB database usage" %}</h3>
|
|
||||||
<table class="table table-condensed">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{% translate "Database" %}</th>
|
|
||||||
<th class="text-end">{% translate "Used space" %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for line in mysql_usage %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ line.item }}</td>
|
|
||||||
<td class="text-end">{{ line.size_in_bytes|filesizeformat }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
{% if pgsql_usage %}
|
|
||||||
<h3>{% trans "PostgreSQL database usage" %}</h3>
|
|
||||||
<table class="table table-condensed">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{% translate "Database" %}</th>
|
|
||||||
<th class="text-end">{% translate "Used space" %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for line in pgsql_usage %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ line.item }}</td>
|
|
||||||
<td class="text-end">{{ line.size_in_bytes|filesizeformat }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
{% endwith %}
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -16,54 +16,37 @@ User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class CustomerHostingPackageTest(TestCase):
|
class CustomerHostingPackageTest(TestCase):
|
||||||
def setUp(self) -> None:
|
|
||||||
self.user = User.objects.create(username="test")
|
|
||||||
self.template = HostingPackageTemplate.objects.create(
|
|
||||||
mailboxcount=10,
|
|
||||||
diskspace=100,
|
|
||||||
diskspace_unit=DISK_SPACE_UNITS.M,
|
|
||||||
description="Test package 1 - Description",
|
|
||||||
name="Test package 1",
|
|
||||||
)
|
|
||||||
|
|
||||||
@override_settings(OSUSER_DEFAULT_GROUPS=[])
|
|
||||||
def test_get_disk_space_bytes(self):
|
def test_get_disk_space_bytes(self):
|
||||||
self.template.diskspace = 10
|
package = CustomerHostingPackage(
|
||||||
self.template.diskspace_unit = DISK_SPACE_UNITS.G
|
diskspace=10, diskspace_unit=DISK_SPACE_UNITS.G
|
||||||
self.template.save()
|
|
||||||
package = CustomerHostingPackage.objects.create_from_template(
|
|
||||||
customer=self.user, template=self.template, name="customer",
|
|
||||||
)
|
)
|
||||||
package.save()
|
|
||||||
self.assertEqual(package.get_disk_space(), 10 * 1024**3)
|
self.assertEqual(package.get_disk_space(), 10 * 1024**3)
|
||||||
|
|
||||||
@override_settings(OSUSER_DEFAULT_GROUPS=[])
|
|
||||||
def test_get_disk_space_mib(self):
|
def test_get_disk_space_mib(self):
|
||||||
self.template.diskspace = 10
|
package = CustomerHostingPackage(
|
||||||
self.template.diskspace_unit = DISK_SPACE_UNITS.G
|
diskspace=10, diskspace_unit=DISK_SPACE_UNITS.G
|
||||||
self.template.save()
|
|
||||||
package = CustomerHostingPackage.objects.create_from_template(
|
|
||||||
customer=self.user, template=self.template, name="customer",
|
|
||||||
)
|
)
|
||||||
package.save()
|
|
||||||
self.assertEqual(package.get_disk_space(DISK_SPACE_UNITS.M), 10 * 1024)
|
self.assertEqual(package.get_disk_space(DISK_SPACE_UNITS.M), 10 * 1024)
|
||||||
|
|
||||||
@override_settings(OSUSER_DEFAULT_GROUPS=[])
|
|
||||||
def test_get_quota(self):
|
def test_get_quota(self):
|
||||||
self.template.diskspace = 256
|
package = CustomerHostingPackage(
|
||||||
self.template.diskspace_unit = DISK_SPACE_UNITS.M
|
diskspace=256, diskspace_unit=DISK_SPACE_UNITS.M
|
||||||
self.template.save()
|
|
||||||
package = CustomerHostingPackage.objects.create_from_template(
|
|
||||||
customer=self.user, template=self.template, name="customer",
|
|
||||||
)
|
)
|
||||||
package.save()
|
|
||||||
self.assertEqual(package.get_quota(), (262144, 275251))
|
self.assertEqual(package.get_quota(), (262144, 275251))
|
||||||
|
|
||||||
@override_settings(OSUSER_DEFAULT_GROUPS=["testgroup"])
|
@override_settings(OSUSER_DEFAULT_GROUPS=["testgroup"])
|
||||||
def test_additional_group_not_defined(self):
|
def test_additional_group_not_defined(self):
|
||||||
|
user = User.objects.create(username="test")
|
||||||
|
template = HostingPackageTemplate.objects.create(
|
||||||
|
description="Test package 1 - Description",
|
||||||
|
mailboxcount=10,
|
||||||
|
diskspace=100,
|
||||||
|
diskspace_unit=DISK_SPACE_UNITS.M,
|
||||||
|
name="Test package 1",
|
||||||
|
)
|
||||||
with self.assertRaises(ImproperlyConfigured) as ctx:
|
with self.assertRaises(ImproperlyConfigured) as ctx:
|
||||||
package = CustomerHostingPackage.objects.create_from_template(
|
package = CustomerHostingPackage.objects.create_from_template(
|
||||||
customer=self.user, template=self.template, name="Test customer package",
|
customer=user, template=template, name="Test customer package"
|
||||||
)
|
)
|
||||||
package.save()
|
package.save()
|
||||||
self.assertIn("testgroup", str(ctx.exception))
|
self.assertIn("testgroup", str(ctx.exception))
|
||||||
|
|
|
@ -4,7 +4,7 @@ This module defines the URL patterns for hosting package related views.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
from django.urls import path, re_path
|
from django.urls import re_path
|
||||||
|
|
||||||
from .views import (
|
from .views import (
|
||||||
AddHostingOption,
|
AddHostingOption,
|
||||||
|
@ -12,9 +12,7 @@ from .views import (
|
||||||
CreateCustomerHostingPackage,
|
CreateCustomerHostingPackage,
|
||||||
CreateHostingPackage,
|
CreateHostingPackage,
|
||||||
CustomerHostingPackageDetails,
|
CustomerHostingPackageDetails,
|
||||||
CustomerHostingPackageDiskUsageDetails,
|
|
||||||
HostingOptionChoices,
|
HostingOptionChoices,
|
||||||
UploadCustomerPackageDiskUsage,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -44,14 +42,4 @@ urlpatterns = [
|
||||||
AddHostingOption.as_view(),
|
AddHostingOption.as_view(),
|
||||||
name="add_hosting_option",
|
name="add_hosting_option",
|
||||||
),
|
),
|
||||||
path(
|
|
||||||
"<int:package>/disk-usage/",
|
|
||||||
CustomerHostingPackageDiskUsageDetails.as_view(),
|
|
||||||
name="disk_usage_details",
|
|
||||||
),
|
|
||||||
path(
|
|
||||||
"upload-disk-usage/",
|
|
||||||
UploadCustomerPackageDiskUsage.as_view(),
|
|
||||||
name="upload_disk_usage",
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,9 +4,6 @@ This module defines views related to hosting packages.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import http
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
@ -16,12 +13,6 @@ from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
from django.views.generic.edit import CreateView, FormView
|
from django.views.generic.edit import CreateView, FormView
|
||||||
|
|
||||||
import rest_framework.request
|
|
||||||
from rest_framework.permissions import BasePermission
|
|
||||||
from rest_framework.response import Response
|
|
||||||
from rest_framework.views import APIView
|
|
||||||
|
|
||||||
from gvacommon.viewmixins import StaffOrSelfLoginRequiredMixin
|
from gvacommon.viewmixins import StaffOrSelfLoginRequiredMixin
|
||||||
|
|
||||||
from .forms import (
|
from .forms import (
|
||||||
|
@ -33,14 +24,10 @@ from .forms import (
|
||||||
)
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
CustomerHostingPackage,
|
CustomerHostingPackage,
|
||||||
CustomerPackageDiskUsage,
|
|
||||||
DiskSpaceOption,
|
DiskSpaceOption,
|
||||||
MailboxOption,
|
MailboxOption,
|
||||||
UserDatabaseOption,
|
UserDatabaseOption,
|
||||||
)
|
)
|
||||||
from .serializers import DiskUsageSerializer
|
|
||||||
|
|
||||||
logger = logging.getLogger("gnuviechadmin.hostingpackages")
|
|
||||||
|
|
||||||
|
|
||||||
class CreateHostingPackage(PermissionRequiredMixin, CreateView):
|
class CreateHostingPackage(PermissionRequiredMixin, CreateView):
|
||||||
|
@ -272,85 +259,3 @@ class AddHostingOption(StaffUserRequiredMixin, FormView):
|
||||||
).format(option=option, package=hosting_package.name),
|
).format(option=option, package=hosting_package.name),
|
||||||
)
|
)
|
||||||
return redirect(hosting_package)
|
return redirect(hosting_package)
|
||||||
|
|
||||||
|
|
||||||
class HasDiskUsageUploadPermission(BasePermission):
|
|
||||||
def has_permission(self, request, view):
|
|
||||||
return (
|
|
||||||
request.user.has_perm("hostingpackages.add_customerpackagediskusage")
|
|
||||||
and request.method == "POST"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class UploadCustomerPackageDiskUsage(APIView):
|
|
||||||
permission_classes = [HasDiskUsageUploadPermission]
|
|
||||||
allowed_methods = ("POST",)
|
|
||||||
serializer = DiskUsageSerializer(many=True)
|
|
||||||
|
|
||||||
def post(self, request: rest_framework.request.Request, format=None):
|
|
||||||
if request.content_type != "application/json":
|
|
||||||
return Response("Unacceptable", status=http.HTTPStatus.BAD_REQUEST)
|
|
||||||
for row in request.data:
|
|
||||||
user = row["user"]
|
|
||||||
for key in row:
|
|
||||||
if key == "user":
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
for item, size in row[key].items():
|
|
||||||
try:
|
|
||||||
package = CustomerHostingPackage.objects.get(
|
|
||||||
osuser__username=user
|
|
||||||
)
|
|
||||||
(
|
|
||||||
metric,
|
|
||||||
created,
|
|
||||||
) = CustomerPackageDiskUsage.objects.get_or_create(
|
|
||||||
package=package,
|
|
||||||
source=key,
|
|
||||||
item=item,
|
|
||||||
)
|
|
||||||
metric.used_kb = size
|
|
||||||
metric.save()
|
|
||||||
except CustomerHostingPackage.DoesNotExist:
|
|
||||||
logger.warning(
|
|
||||||
"hosting package for user %s does not exist", user
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.info("usage date submitted by %s", request.user)
|
|
||||||
|
|
||||||
return Response("Accepted", status=http.HTTPStatus.ACCEPTED)
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerHostingPackageDiskUsageDetails(DetailView):
|
|
||||||
template_name_suffix = "_disk_usage_details"
|
|
||||||
model = CustomerHostingPackage
|
|
||||||
pk_url_kwarg = "package"
|
|
||||||
context_object_name = "hostingpackage"
|
|
||||||
|
|
||||||
def get_queryset(self, queryset=None):
|
|
||||||
return super().get_queryset().prefetch_related("customerpackagediskusage_set")
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context_data = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
disk_usage, mysql_usage, pgsql_usage = [], [], []
|
|
||||||
|
|
||||||
for usage in self.get_object().customerpackagediskusage_set.order_by(
|
|
||||||
"-used_kb"
|
|
||||||
):
|
|
||||||
if usage.source == "disk":
|
|
||||||
disk_usage.append(usage)
|
|
||||||
elif usage.source == "mysql":
|
|
||||||
mysql_usage.append(usage)
|
|
||||||
elif usage.source == "pgsql":
|
|
||||||
pgsql_usage.append(usage)
|
|
||||||
|
|
||||||
context_data.update(
|
|
||||||
{
|
|
||||||
"disk_usage": disk_usage,
|
|
||||||
"mysql_usage": mysql_usage,
|
|
||||||
"pgsql_usage": pgsql_usage,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return context_data
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class InvoiceConfig(AppConfig):
|
class InvoiceConfig(AppConfig):
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin invoice\n"
|
"Project-Id-Version: gnuviechadmin invoice\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-23 14:35+0200\n"
|
||||||
"PO-Revision-Date: 2023-04-23 14:35+0200\n"
|
"PO-Revision-Date: 2023-04-23 14:35+0200\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
|
@ -19,51 +19,51 @@ msgstr ""
|
||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
#: invoices/apps.py:8
|
#: invoice/apps.py:8
|
||||||
msgid "Invoices"
|
msgid "Invoices"
|
||||||
msgstr "Rechnungen"
|
msgstr "Rechnungen"
|
||||||
|
|
||||||
#: invoices/models.py:26
|
#: invoice/models.py:26
|
||||||
msgid "customer"
|
msgid "customer"
|
||||||
msgstr "Kunde"
|
msgstr "Kunde"
|
||||||
|
|
||||||
#: invoices/models.py:33
|
#: invoice/models.py:33
|
||||||
msgid "invoice number"
|
msgid "invoice number"
|
||||||
msgstr "Rechnungsnummer"
|
msgstr "Rechnungsnummer"
|
||||||
|
|
||||||
#: invoices/models.py:35
|
#: invoice/models.py:35
|
||||||
msgid "invoice date"
|
msgid "invoice date"
|
||||||
msgstr "Rechnungsdatum"
|
msgstr "Rechnungsdatum"
|
||||||
|
|
||||||
#: invoices/models.py:37
|
#: invoice/models.py:37
|
||||||
msgid "amount"
|
msgid "amount"
|
||||||
msgstr "Betrag"
|
msgstr "Betrag"
|
||||||
|
|
||||||
#: invoices/models.py:40
|
#: invoice/models.py:40
|
||||||
msgid "currency"
|
msgid "currency"
|
||||||
msgstr "Währung"
|
msgstr "Währung"
|
||||||
|
|
||||||
#: invoices/models.py:42
|
#: invoice/models.py:42
|
||||||
msgid "due date"
|
msgid "due date"
|
||||||
msgstr "Fälligkeit"
|
msgstr "Fälligkeit"
|
||||||
|
|
||||||
#: invoices/models.py:44
|
#: invoice/models.py:44
|
||||||
msgid "payment date"
|
msgid "payment date"
|
||||||
msgstr "Zahlungsdatum"
|
msgstr "Zahlungsdatum"
|
||||||
|
|
||||||
#: invoices/models.py:47
|
#: invoice/models.py:47
|
||||||
msgid "payment variant"
|
msgid "payment variant"
|
||||||
msgstr "Zahlungsart"
|
msgstr "Zahlungsart"
|
||||||
|
|
||||||
#: invoices/models.py:51
|
#: invoice/models.py:51
|
||||||
msgid "invoice"
|
msgid "invoice"
|
||||||
msgstr "Rechnung"
|
msgstr "Rechnung"
|
||||||
|
|
||||||
#: invoices/models.py:52
|
#: invoice/models.py:52
|
||||||
msgid "invoices"
|
msgid "invoices"
|
||||||
msgstr "Rechnungen"
|
msgstr "Rechnungen"
|
||||||
|
|
||||||
#: invoices/models.py:56
|
#: invoice/models.py:56
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Invoice {0}"
|
msgid "Invoice {0}"
|
||||||
msgstr "Rechnung {0}"
|
msgstr "Rechnung {0}"
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import FileExtensionValidator
|
from django.core.validators import FileExtensionValidator
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
CURRENCIES = [(1, "EUR")]
|
CURRENCIES = [(1, "EUR")]
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin\n"
|
"Project-Id-Version: gnuviechadmin\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-22 13:01+0200\n"
|
||||||
"PO-Revision-Date: 2023-07-22 19:56+0200\n"
|
"PO-Revision-Date: 2023-04-22 12:58+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -44,7 +44,7 @@ msgstr "Die folgenden E-Mailadressen sind Ihrem Konto zugeordnet:"
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "E-Mailadresse"
|
msgstr "E-Mailadresse"
|
||||||
|
|
||||||
#: templates/account/email.html:15 templates/account/email.html:26
|
#: templates/account/email.html:15 templates/account/email.html:25
|
||||||
msgid "Verified"
|
msgid "Verified"
|
||||||
msgstr "Geprüft"
|
msgstr "Geprüft"
|
||||||
|
|
||||||
|
@ -52,40 +52,31 @@ msgstr "Geprüft"
|
||||||
msgid "Primary"
|
msgid "Primary"
|
||||||
msgstr "Primär"
|
msgstr "Primär"
|
||||||
|
|
||||||
#: templates/account/email.html:17
|
#: templates/account/email.html:27
|
||||||
msgid "Selection"
|
|
||||||
msgstr "Auswahl"
|
|
||||||
|
|
||||||
#: templates/account/email.html:28
|
|
||||||
msgid "Unverified"
|
msgid "Unverified"
|
||||||
msgstr "Unbestätigt"
|
msgstr "Unbestätigt"
|
||||||
|
|
||||||
#: templates/account/email.html:33
|
#: templates/account/email.html:32
|
||||||
msgid "This is the current primary Email address"
|
msgid "This is the current primary Email address"
|
||||||
msgstr "Dies ist die aktuelle primäre E-Mailadresse"
|
msgstr "Dies ist die aktuelle primäre E-Mailadresse"
|
||||||
|
|
||||||
#: templates/account/email.html:43
|
#: templates/account/email.html:43
|
||||||
#, python-format
|
|
||||||
msgid "Select %(address)s"
|
|
||||||
msgstr "%(address)s auswählen"
|
|
||||||
|
|
||||||
#: templates/account/email.html:54
|
|
||||||
msgid "Make Primary"
|
msgid "Make Primary"
|
||||||
msgstr "Als primär definieren"
|
msgstr "Als primär definieren"
|
||||||
|
|
||||||
#: templates/account/email.html:57
|
#: templates/account/email.html:44
|
||||||
msgid "Re-send Verification"
|
msgid "Re-send Verification"
|
||||||
msgstr "Prüf-E-Mail noch einmal verschicken"
|
msgstr "Prüf-E-Mail noch einmal verschicken"
|
||||||
|
|
||||||
#: templates/account/email.html:58 templates/socialaccount/connections.html:42
|
#: templates/account/email.html:45 templates/socialaccount/connections.html:42
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Entfernen"
|
msgstr "Entfernen"
|
||||||
|
|
||||||
#: templates/account/email.html:63
|
#: templates/account/email.html:49
|
||||||
msgid "Warning:"
|
msgid "Warning:"
|
||||||
msgstr "Warnung:"
|
msgstr "Warnung:"
|
||||||
|
|
||||||
#: templates/account/email.html:63
|
#: templates/account/email.html:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"You currently do not have any e-mail address set up. You should really add "
|
"You currently do not have any e-mail address set up. You should really add "
|
||||||
"an e-mail address so you can receive notifications, reset your password, etc."
|
"an e-mail address so you can receive notifications, reset your password, etc."
|
||||||
|
@ -94,15 +85,15 @@ msgstr ""
|
||||||
"Mailadresse, um Benachrichtigungen zu erhalten, Ihr Passwort zurückzusetzen, "
|
"Mailadresse, um Benachrichtigungen zu erhalten, Ihr Passwort zurückzusetzen, "
|
||||||
"etc."
|
"etc."
|
||||||
|
|
||||||
#: templates/account/email.html:67
|
#: templates/account/email.html:52
|
||||||
msgid "Add E-mail Address"
|
msgid "Add E-mail Address"
|
||||||
msgstr "E-Mailadresse hinzufügen"
|
msgstr "E-Mailadresse hinzufügen"
|
||||||
|
|
||||||
#: templates/account/email.html:72
|
#: templates/account/email.html:57
|
||||||
msgid "Add E-mail"
|
msgid "Add E-mail"
|
||||||
msgstr "E-Mail hinzufügen"
|
msgstr "E-Mail hinzufügen"
|
||||||
|
|
||||||
#: templates/account/email.html:79
|
#: templates/account/email.html:64
|
||||||
msgid "Do you really want to remove the selected e-mail address?"
|
msgid "Do you really want to remove the selected e-mail address?"
|
||||||
msgstr "Wollen Sie die augewählte E-Mailadresse wirklich entfernen?"
|
msgstr "Wollen Sie die augewählte E-Mailadresse wirklich entfernen?"
|
||||||
|
|
||||||
|
@ -190,7 +181,7 @@ msgstr ""
|
||||||
"Mailadresse des Benutzers %(user_display)s ist."
|
"Mailadresse des Benutzers %(user_display)s ist."
|
||||||
|
|
||||||
#: templates/account/login.html:4 templates/account/login.html:5
|
#: templates/account/login.html:4 templates/account/login.html:5
|
||||||
#: templates/account/login.html:18 templates/base.html:112
|
#: templates/account/login.html:18 templates/base.html:124
|
||||||
#: templates/registration/login.html:4 templates/socialaccount/login.html:4
|
#: templates/registration/login.html:4 templates/socialaccount/login.html:4
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Anmelden"
|
msgstr "Anmelden"
|
||||||
|
@ -408,59 +399,67 @@ msgstr ""
|
||||||
"<strong>Hinweis:</strong> Sie können Ihre <a href=\"%(email_url)s\">E-"
|
"<strong>Hinweis:</strong> Sie können Ihre <a href=\"%(email_url)s\">E-"
|
||||||
"Mailadresse noch ändern</a>."
|
"Mailadresse noch ändern</a>."
|
||||||
|
|
||||||
#: templates/base.html:26
|
#: templates/base.html:32
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Dashboard"
|
msgstr "Dashboard"
|
||||||
|
|
||||||
#: templates/base.html:28
|
#: templates/base.html:34
|
||||||
msgid "Toggle navigation"
|
msgid "Toggle navigation"
|
||||||
msgstr "Navigation umschalten"
|
msgstr "Navigation umschalten"
|
||||||
|
|
||||||
#: templates/base.html:36
|
#: templates/base.html:42 templates/base.html:53
|
||||||
msgid "Hosting"
|
msgid "Hosting"
|
||||||
msgstr "Hosting"
|
msgstr "Hosting"
|
||||||
|
|
||||||
#: templates/base.html:42
|
#: templates/base.html:45
|
||||||
|
msgid "Your hosting packages"
|
||||||
|
msgstr "Ihre Hostingpakete"
|
||||||
|
|
||||||
|
#: templates/base.html:47
|
||||||
|
msgid "All hosting packages"
|
||||||
|
msgstr "Alle Hostingpakete"
|
||||||
|
|
||||||
|
#: templates/base.html:57
|
||||||
msgid "Links"
|
msgid "Links"
|
||||||
msgstr "Links"
|
msgstr "Links"
|
||||||
|
|
||||||
#: templates/base.html:45
|
#: templates/base.html:60
|
||||||
msgid "Web based mail system"
|
msgid "Web based mail system"
|
||||||
msgstr "Webbasiertes E-Mailsystem"
|
msgstr "Webbasiertes E-Mailsystem"
|
||||||
|
|
||||||
#: templates/base.html:46
|
#: templates/base.html:61
|
||||||
msgid "Webmail"
|
msgid "Webmail"
|
||||||
msgstr "Webmail"
|
msgstr "Webmail"
|
||||||
|
|
||||||
#: templates/base.html:48
|
#: templates/base.html:63
|
||||||
msgid "phpMyAdmin - MySQL database administration tool"
|
msgid "phpMyAdmin - MySQL database administration tool"
|
||||||
msgstr "phpMyAdmin - MySQL-Datenbankverwaltungswerkzeug"
|
msgstr "phpMyAdmin - MySQL-Datenbankverwaltungswerkzeug"
|
||||||
|
|
||||||
#: templates/base.html:49
|
#: templates/base.html:64
|
||||||
msgid "phpMyAdmin"
|
msgid "phpMyAdmin"
|
||||||
msgstr "phpMyAdmin"
|
msgstr "phpMyAdmin"
|
||||||
|
|
||||||
#: templates/base.html:51
|
#: templates/base.html:66
|
||||||
msgid "phpPgAdmin - PostgreSQL database administration tool"
|
msgid "phpPgAdmin - PostgreSQL database administration tool"
|
||||||
msgstr "phpPgAdmin - PostgreSQL-Datenbankverwaltungswerkzeug"
|
msgstr "phpPgAdmin - PostgreSQL-Datenbankverwaltungswerkzeug"
|
||||||
|
|
||||||
#: templates/base.html:52
|
#: templates/base.html:67
|
||||||
msgid "phpPgAdmin"
|
msgid "phpPgAdmin"
|
||||||
msgstr "phpPgAdmin"
|
msgstr "phpPgAdmin"
|
||||||
|
|
||||||
#: templates/base.html:57
|
#: templates/base.html:71
|
||||||
msgid "Imprint"
|
msgid "Imprint"
|
||||||
msgstr "Impressum"
|
msgstr "Impressum"
|
||||||
|
|
||||||
#: templates/base.html:61
|
#: templates/base.html:74
|
||||||
msgid "Privacy policy"
|
msgid "Privacy policy"
|
||||||
msgstr "Datenschutz"
|
msgstr "Datenschutz"
|
||||||
|
|
||||||
#: templates/base.html:65
|
#: templates/base.html:78
|
||||||
msgid "Contact"
|
msgid "Contact"
|
||||||
msgstr "Kontakt"
|
msgstr "Kontakt"
|
||||||
|
|
||||||
#: templates/base.html:73
|
#: templates/base.html:86
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in as <a href=\"%(profile_url)s\" class=\"navbar-link\" title=\"My "
|
"Signed in as <a href=\"%(profile_url)s\" class=\"navbar-link\" title=\"My "
|
||||||
|
@ -475,7 +474,7 @@ msgstr ""
|
||||||
"class=\"navbar-link\"><i class=\"bi-sign-stop\" title=\"Übernahme "
|
"class=\"navbar-link\"><i class=\"bi-sign-stop\" title=\"Übernahme "
|
||||||
"beenden\"></i></a>"
|
"beenden\"></i></a>"
|
||||||
|
|
||||||
#: templates/base.html:81
|
#: templates/base.html:93
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in as <a href=\"%(profile_url)s\" class=\"navbar-link\" title=\"My "
|
"Signed in as <a href=\"%(profile_url)s\" class=\"navbar-link\" title=\"My "
|
||||||
|
@ -484,31 +483,31 @@ msgstr ""
|
||||||
"Angemeldet als <a href=\"%(profile_url)s\" class=\"navbar-link\" "
|
"Angemeldet als <a href=\"%(profile_url)s\" class=\"navbar-link\" "
|
||||||
"title=\"Mein Profil\">%(user_display)s</a>"
|
"title=\"Mein Profil\">%(user_display)s</a>"
|
||||||
|
|
||||||
#: templates/base.html:91
|
#: templates/base.html:103
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "Mein Konto"
|
msgstr "Mein Konto"
|
||||||
|
|
||||||
#: templates/base.html:95
|
#: templates/base.html:107
|
||||||
msgid "Impersonate user"
|
msgid "Impersonate user"
|
||||||
msgstr "Als Nutzer agieren"
|
msgstr "Als Nutzer agieren"
|
||||||
|
|
||||||
#: templates/base.html:99
|
#: templates/base.html:111
|
||||||
msgid "Admin site"
|
msgid "Admin site"
|
||||||
msgstr "Adminsite"
|
msgstr "Adminsite"
|
||||||
|
|
||||||
#: templates/base.html:101
|
#: templates/base.html:113
|
||||||
msgid "Change Email"
|
msgid "Change Email"
|
||||||
msgstr "E-Mail ändern"
|
msgstr "E-Mail ändern"
|
||||||
|
|
||||||
#: templates/base.html:104
|
#: templates/base.html:116
|
||||||
msgid "Social Accounts"
|
msgid "Social Accounts"
|
||||||
msgstr "Konten in sozialen Netzwerken"
|
msgstr "Konten in sozialen Netzwerken"
|
||||||
|
|
||||||
#: templates/base.html:106
|
#: templates/base.html:118
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr "Abmelden"
|
msgstr "Abmelden"
|
||||||
|
|
||||||
#: templates/base.html:127
|
#: templates/base.html:139
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Schließen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
|
@ -528,12 +527,6 @@ msgstr "Django Impersonate - Nutzerliste"
|
||||||
msgid "User List - Page %(page_number)s"
|
msgid "User List - Page %(page_number)s"
|
||||||
msgstr "Nutzerliste - Seite %(page_number)s"
|
msgstr "Nutzerliste - Seite %(page_number)s"
|
||||||
|
|
||||||
#: templates/impersonate/list_users.html:14
|
|
||||||
#: templates/impersonate/search_users.html:24
|
|
||||||
#, python-format
|
|
||||||
msgid "Impersonate %(user)s"
|
|
||||||
msgstr "Als Nutzer %(user)s agieren"
|
|
||||||
|
|
||||||
#: templates/impersonate/list_users.html:21
|
#: templates/impersonate/list_users.html:21
|
||||||
msgid "Search users"
|
msgid "Search users"
|
||||||
msgstr "Nutzer suchen"
|
msgstr "Nutzer suchen"
|
||||||
|
|
|
@ -140,7 +140,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
def get_target(maf):
|
def get_target(maf):
|
||||||
return maf.target
|
return maf.target
|
||||||
|
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
def get_target(maf):
|
def get_target(maf):
|
||||||
return maf.target
|
return maf.target
|
||||||
|
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
def get_target(maf):
|
def get_target(maf):
|
||||||
return maf.target
|
return maf.target
|
||||||
|
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
ma.mailaddressforward_set.all(), ["test3@example.org"], get_target
|
ma.mailaddressforward_set.all(), ["test3@example.org"], get_target
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
def get_target(maf):
|
def get_target(maf):
|
||||||
return maf.target
|
return maf.target
|
||||||
|
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
ma.mailaddressforward_set.all(),
|
ma.mailaddressforward_set.all(),
|
||||||
["test2@example.org", "test3@example.org"],
|
["test2@example.org", "test3@example.org"],
|
||||||
get_target,
|
get_target,
|
||||||
|
@ -198,7 +198,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
def get_target(maf):
|
def get_target(maf):
|
||||||
return maf.target
|
return maf.target
|
||||||
|
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
ma.mailaddressforward_set.all(), ["test2@example.org"], get_target
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -213,6 +213,7 @@ class MailAddressTest(TestCaseWithCeleryTasks):
|
||||||
md = MailDomain.objects.create(domain="example.org")
|
md = MailDomain.objects.create(domain="example.org")
|
||||||
ma = MailAddress(localpart="test", domain=md)
|
ma = MailAddress(localpart="test", domain=md)
|
||||||
mafwds = ma.set_forward_addresses(["test2@example.org"], commit=False)
|
mafwds = ma.set_forward_addresses(["test2@example.org"], commit=False)
|
||||||
|
self.assertEqual(ma.mailaddressforward_set.count(), 0)
|
||||||
self.assertEqual(mafwds[0].target, "test2@example.org")
|
self.assertEqual(mafwds[0].target, "test2@example.org")
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,14 +242,14 @@ class MailboxManagerTest(TestCaseWithCeleryTasks):
|
||||||
md = MailDomain.objects.create(domain="example.org")
|
md = MailDomain.objects.create(domain="example.org")
|
||||||
address = MailAddress.objects.create(localpart="test", domain=md)
|
address = MailAddress.objects.create(localpart="test", domain=md)
|
||||||
mailboxes = Mailbox.objects.unused_or_own(address, self.user)
|
mailboxes = Mailbox.objects.unused_or_own(address, self.user)
|
||||||
self.assertQuerySetEqual(mailboxes, [])
|
self.assertQuerysetEqual(mailboxes, [])
|
||||||
|
|
||||||
def test_unused_or_own_unassigned(self):
|
def test_unused_or_own_unassigned(self):
|
||||||
md = MailDomain.objects.create(domain="example.org")
|
md = MailDomain.objects.create(domain="example.org")
|
||||||
address = MailAddress.objects.create(localpart="test", domain=md)
|
address = MailAddress.objects.create(localpart="test", domain=md)
|
||||||
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
||||||
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
assignable, [repr(mb) for mb in mailboxes], transform=repr
|
assignable, [repr(mb) for mb in mailboxes], transform=repr
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -258,7 +259,7 @@ class MailboxManagerTest(TestCaseWithCeleryTasks):
|
||||||
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
||||||
address.set_mailbox(mailboxes[0])
|
address.set_mailbox(mailboxes[0])
|
||||||
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
||||||
self.assertQuerySetEqual(
|
self.assertQuerysetEqual(
|
||||||
assignable, [repr(mb) for mb in mailboxes], transform=repr
|
assignable, [repr(mb) for mb in mailboxes], transform=repr
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -269,16 +270,16 @@ class MailboxManagerTest(TestCaseWithCeleryTasks):
|
||||||
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
||||||
address2.set_mailbox(mailboxes[0])
|
address2.set_mailbox(mailboxes[0])
|
||||||
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
assignable = Mailbox.objects.unused_or_own(address, self.user)
|
||||||
self.assertQuerySetEqual(assignable, [repr(mailboxes[1])], transform=repr)
|
self.assertQuerysetEqual(assignable, [repr(mailboxes[1])], transform=repr)
|
||||||
|
|
||||||
def test_unused_fresh(self):
|
def test_unused_fresh(self):
|
||||||
mailboxes = Mailbox.objects.unused(self.user)
|
mailboxes = Mailbox.objects.unused(self.user)
|
||||||
self.assertQuerySetEqual(mailboxes, [])
|
self.assertQuerysetEqual(mailboxes, [])
|
||||||
|
|
||||||
def test_unused_unassigned(self):
|
def test_unused_unassigned(self):
|
||||||
mailbox = Mailbox.objects.create_mailbox(self.user)
|
mailbox = Mailbox.objects.create_mailbox(self.user)
|
||||||
mailboxes = Mailbox.objects.unused(self.user)
|
mailboxes = Mailbox.objects.unused(self.user)
|
||||||
self.assertQuerySetEqual(mailboxes, [repr(mailbox)], transform=repr)
|
self.assertQuerysetEqual(mailboxes, [repr(mailbox)], transform=repr)
|
||||||
|
|
||||||
def test_unused_assigned(self):
|
def test_unused_assigned(self):
|
||||||
md = MailDomain.objects.create(domain="example.org")
|
md = MailDomain.objects.create(domain="example.org")
|
||||||
|
@ -286,7 +287,7 @@ class MailboxManagerTest(TestCaseWithCeleryTasks):
|
||||||
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)]
|
||||||
address.set_mailbox(mailboxes[0])
|
address.set_mailbox(mailboxes[0])
|
||||||
assignable = Mailbox.objects.unused(self.user)
|
assignable = Mailbox.objects.unused(self.user)
|
||||||
self.assertQuerySetEqual(assignable, [repr(mailboxes[1])], transform=repr)
|
self.assertQuerysetEqual(assignable, [repr(mailboxes[1])], transform=repr)
|
||||||
|
|
||||||
def test_create_mailbox_no_password(self):
|
def test_create_mailbox_no_password(self):
|
||||||
mailbox = Mailbox.objects.create_mailbox(self.user)
|
mailbox = Mailbox.objects.create_mailbox(self.user)
|
||||||
|
|
|
@ -166,7 +166,7 @@ class DeleteSshPublicKeyTest(HostingPackageAwareTestMixin, TestCase):
|
||||||
kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)},
|
kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)},
|
||||||
)
|
)
|
||||||
queryset = view.get_queryset()
|
queryset = view.get_queryset()
|
||||||
self.assertQuerySetEqual(queryset, [repr(self.sshkey)], transform=repr)
|
self.assertQuerysetEqual(queryset, [repr(self.sshkey)], transform=repr)
|
||||||
|
|
||||||
def test_get_context_data(self):
|
def test_get_context_data(self):
|
||||||
self.client.login(username=TEST_USER, password=TEST_PASSWORD)
|
self.client.login(username=TEST_USER, password=TEST_PASSWORD)
|
||||||
|
@ -234,7 +234,7 @@ class EditSshPublicKeyCommentTest(HostingPackageAwareTestMixin, TransactionTestC
|
||||||
kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)},
|
kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)},
|
||||||
)
|
)
|
||||||
queryset = view.get_queryset()
|
queryset = view.get_queryset()
|
||||||
self.assertQuerySetEqual(queryset, [repr(self.sshkey)], transform=repr)
|
self.assertQuerysetEqual(queryset, [repr(self.sshkey)], transform=repr)
|
||||||
|
|
||||||
def test_get_form_kwargs(self):
|
def test_get_form_kwargs(self):
|
||||||
self.client.login(username=TEST_USER, password=TEST_PASSWORD)
|
self.client.login(username=TEST_USER, password=TEST_PASSWORD)
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin taskresults\n"
|
"Project-Id-Version: gnuviechadmin taskresults\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-16 22:07+0200\n"
|
||||||
"PO-Revision-Date: 2023-07-22 19:57+0200\n"
|
"PO-Revision-Date: 2023-04-16 18:21+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -19,38 +19,38 @@ msgstr ""
|
||||||
"X-Generator: Poedit 3.2.2\n"
|
"X-Generator: Poedit 3.2.2\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
#: taskresults/models.py:24
|
#: taskresults/models.py:23
|
||||||
msgid "Task id"
|
msgid "Task id"
|
||||||
msgstr "Task-Id"
|
msgstr "Task-Id"
|
||||||
|
|
||||||
#: taskresults/models.py:25
|
#: taskresults/models.py:24
|
||||||
msgid "Task signature"
|
msgid "Task signature"
|
||||||
msgstr "Tasksignatur"
|
msgstr "Tasksignatur"
|
||||||
|
|
||||||
#: taskresults/models.py:26
|
#: taskresults/models.py:25
|
||||||
msgid "Task creator"
|
msgid "Task creator"
|
||||||
msgstr "Taskersteller"
|
msgstr "Taskersteller"
|
||||||
|
|
||||||
#: taskresults/models.py:27
|
#: taskresults/models.py:26
|
||||||
msgid "Task notes"
|
msgid "Task notes"
|
||||||
msgstr "Tasknotizen"
|
msgstr "Tasknotizen"
|
||||||
|
|
||||||
#: taskresults/models.py:28 taskresults/models.py:35
|
#: taskresults/models.py:27 taskresults/models.py:34
|
||||||
msgid "Task result"
|
msgid "Task result"
|
||||||
msgstr "Taskergebnis"
|
msgstr "Taskergebnis"
|
||||||
|
|
||||||
#: taskresults/models.py:30
|
#: taskresults/models.py:29
|
||||||
msgid "Task state"
|
msgid "Task state"
|
||||||
msgstr "Taskstatus"
|
msgstr "Taskstatus"
|
||||||
|
|
||||||
#: taskresults/models.py:36
|
#: taskresults/models.py:35
|
||||||
msgid "Task results"
|
msgid "Task results"
|
||||||
msgstr "Taskergebnisse"
|
msgstr "Taskergebnisse"
|
||||||
|
|
||||||
#: taskresults/models.py:43
|
#: taskresults/models.py:42
|
||||||
msgid "yes"
|
msgid "yes"
|
||||||
msgstr "ja"
|
msgstr "ja"
|
||||||
|
|
||||||
#: taskresults/models.py:43
|
#: taskresults/models.py:42
|
||||||
msgid "no"
|
msgid "no"
|
||||||
msgstr "nein"
|
msgstr "nein"
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: websites gnuviechadmin app\n"
|
"Project-Id-Version: websites gnuviechadmin app\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-07-22 19:45+0200\n"
|
"POT-Creation-Date: 2023-04-16 22:07+0200\n"
|
||||||
"PO-Revision-Date: 2023-07-22 19:57+0200\n"
|
"PO-Revision-Date: 2023-04-16 18:21+0200\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -31,27 +31,27 @@ msgstr "Webauftritt anlegen"
|
||||||
msgid "There is already a website for this subdomain"
|
msgid "There is already a website for this subdomain"
|
||||||
msgstr "Es gibt bereits einen Webauftritt mit dieser Subdomain"
|
msgstr "Es gibt bereits einen Webauftritt mit dieser Subdomain"
|
||||||
|
|
||||||
#: websites/models.py:20
|
#: websites/models.py:32
|
||||||
msgid "sub domain"
|
msgid "sub domain"
|
||||||
msgstr "Subdomain"
|
msgstr "Subdomain"
|
||||||
|
|
||||||
#: websites/models.py:22
|
#: websites/models.py:34
|
||||||
msgid "operating system user"
|
msgid "operating system user"
|
||||||
msgstr "Betriebssystemnutzer"
|
msgstr "Betriebssystemnutzer"
|
||||||
|
|
||||||
#: websites/models.py:24
|
#: websites/models.py:36
|
||||||
msgid "domain"
|
msgid "domain"
|
||||||
msgstr "Domain"
|
msgstr "Domain"
|
||||||
|
|
||||||
#: websites/models.py:25
|
#: websites/models.py:37
|
||||||
msgid "wildcard"
|
msgid "wildcard"
|
||||||
msgstr "Wildcard"
|
msgstr "Wildcard"
|
||||||
|
|
||||||
#: websites/models.py:29
|
#: websites/models.py:41
|
||||||
msgid "website"
|
msgid "website"
|
||||||
msgstr "Webauftritt"
|
msgstr "Webauftritt"
|
||||||
|
|
||||||
#: websites/models.py:30
|
#: websites/models.py:42
|
||||||
msgid "websites"
|
msgid "websites"
|
||||||
msgstr "Webauftritte"
|
msgstr "Webauftritte"
|
||||||
|
|
||||||
|
|
1434
poetry.lock
generated
1434
poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1,21 +1,21 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "gva"
|
name = "gva"
|
||||||
version = "0.14.0"
|
version = "0.13.0"
|
||||||
description = "gnuviechadmin web interface"
|
description = "gnuviechadmin web interface"
|
||||||
authors = ["Jan Dittberner <jan@dittberner.info>"]
|
authors = ["Jan Dittberner <jan@dittberner.info>"]
|
||||||
license = "AGPL-3+"
|
license = "AGPL-3+"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.8"
|
python = "^3.7"
|
||||||
django = "^4.2"
|
django = "<4"
|
||||||
psycopg2-binary = "^2.9"
|
psycopg2-binary = "^2.9"
|
||||||
celery = "^5.2.7"
|
celery = "^5.2.7"
|
||||||
django-allauth = "^0.52.0"
|
django-allauth = "^0.52.0"
|
||||||
django-crispy-forms = "^2.0"
|
django-crispy-forms = "^2.0"
|
||||||
django-debug-toolbar = "^3.8"
|
django-debug-toolbar = "^3.8"
|
||||||
django-model-utils = "^4.1"
|
django-model-utils = "^4.1"
|
||||||
gvacommon = {version = "^0.7.0", source = "gnuviech"}
|
gvacommon = {version = "^0.6.0", source = "gnuviech"}
|
||||||
passlib = "^1.7.4"
|
passlib = "^1.7.4"
|
||||||
redis = "^4.5.1"
|
redis = "^4.5.1"
|
||||||
requests-oauthlib = "^1.3.1"
|
requests-oauthlib = "^1.3.1"
|
||||||
|
@ -25,7 +25,6 @@ markdown = "^3.4.3"
|
||||||
django-filter = "^23.1"
|
django-filter = "^23.1"
|
||||||
crispy-bootstrap5 = "^0.7"
|
crispy-bootstrap5 = "^0.7"
|
||||||
python-magic = "^0.4.27"
|
python-magic = "^0.4.27"
|
||||||
isort = "^5.12.0"
|
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
@ -35,21 +34,16 @@ releases = "^2.0.0"
|
||||||
sphinxcontrib-blockdiag = "^3.0.0"
|
sphinxcontrib-blockdiag = "^3.0.0"
|
||||||
pylama = "^8.4.1"
|
pylama = "^8.4.1"
|
||||||
black = {extras = ["d"], version = "^23.3.0"}
|
black = {extras = ["d"], version = "^23.3.0"}
|
||||||
|
isort = "<5"
|
||||||
|
|
||||||
|
|
||||||
[[tool.poetry.source]]
|
[[tool.poetry.source]]
|
||||||
name = "gnuviech"
|
name = "gnuviech"
|
||||||
url = "https://pypi.gnuviech-server.de/simple"
|
url = "https://pypi.gnuviech-server.de/simple"
|
||||||
priority = "explicit"
|
default = false
|
||||||
|
secondary = false
|
||||||
|
|
||||||
|
|
||||||
[tool.isort]
|
|
||||||
profile = "black"
|
|
||||||
known_django = ["django","model_utils"]
|
|
||||||
known_drf = ["rest_framework"]
|
|
||||||
known_celery = ["celery"]
|
|
||||||
sections = ["FUTURE", "STDLIB", "DJANGO", "DRF", "CELERY", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["poetry-core"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
Loading…
Reference in a new issue