diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b40df197dd94deb70e14407da9b5c0a6f7175ac..50ef7cc24277cd98931421a527c26c561af8cd8d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -45,7 +45,6 @@ lint: stage: test script: - tox -e lint,security - allow_failure: true build_dist: stage: build diff --git a/README.rst b/README.rst index 5c08b69d1ac8d24ab74c7cdbf74a9e4b8e161d6e..63582b5a05cc86f553288bf2695cac72cf13f091 100644 --- a/README.rst +++ b/README.rst @@ -4,31 +4,72 @@ AlekSIS — All-libre extensible kit for school information systems Warning ------- -**This is a preview version of AlekSIS. Do not use with sensitive data. Especially, do not grant access to students yet.** - +**This is an alpha version of AlekSIS, the free school information system. +The AlekSIS team is looking for schools who want to help shape the 2.0 +final release and supports interested schools in operating AlekSIS.** What AlekSIS is ---------------- -AlekSIS is a web-based school information system (SIS) which can be used to +`AlekSIS`_ is a web-based school information system (SIS) which can be used to manage and/or publish organisational subjects of educational institutions. -It was originally developed together with Städt. Leibniz-Gymnasium Remscheid -as a proprietary product. Five years after the school stole the original -code base, as a complete re-implementation as well-designed, free and open -source software, BiscuIT-ng was started. In the meantime, students from the -Katharineum in Lübeck implemented School-Apps with the same goals and tools. -In 2020, BiscuIT-ng and School-Apps were combined into AlekSIS. +Formerly two separate projects (BiscuIT and SchoolApps), developed by +`Teckids e.V.`_ and a team of students at `Katharineum zu Lübeck`_, they +were merged into the AlekSIS project in 2020. AlekSIS is a platform based on Django, that provides central funstions and data structures that can be used by apps that are developed and provided -seperately. The core can interact closely with the Debian Edu / Skolelinux -system. +seperately. The AlekSIS team also maintains a set of official apps which +make AlekSIS a fully-featured software solutions for the information +management needs of schools. + +By design, the platform can be used by schools to write their own apps for +specific needs they face, also in coding classes. Students are empowered to +create real-world applications that bring direct value to their environment. + +AlekSIS is part of the `schul-frei`_ project as a component in sustainable +educational networks. Core features -------------- -TBA. +* For users: + + * Custom menu entries (e.g. in footer) + * Global preferences + * Group types + * Manage announcements + * Manage groups + * Manage persons + * Notifications via SMS email or dashboard + * Rules and permissions for users, objects and pages + * Two factor authentication via Yubikey, OTP or SMS + * User preferences + +* For admins + + * Asynchronous tasks with celery + * Authentication via LDAP + * Automatic backup of database, static and media files + +Official apps +------------- + ++--------------------------------------+-----------------------------+ +| App name | Purpose | ++======================================+=============================+ +| `AlekSIS-App-Chronos`_ | Manage time tables | ++--------------------------------------+-----------------------------+ +| `AlekSIS-App-DashboardFeeds`_ | RSS/Atom feed on dashboard | ++--------------------------------------+-----------------------------+ +| `AlekSIS-App-Hjelp`_ | Aiding for users | ++--------------------------------------+-----------------------------+ +| `AlekSIS-App-LDAP`_ | LDAP interface | ++--------------------------------------+-----------------------------+ +| `AlekSIS-App-Untis`_ | Untis interface | ++--------------------------------------+-----------------------------+ + Licence ------- @@ -40,8 +81,8 @@ Licence Copyright © 2018, 2019, 2020 Julian Leucker <leuckeju@katharineum.de> Copyright © 2018, 2019, 2020 Hangzhi Yu <yuha@katharineum.de> Copyright © 2019, 2020 Dominik George <dominik.george@teckids.org> - Copyright © 2019, 2020 mirabilos <thorsten.glaser@teckids.org> Copyright © 2019, 2020 Tom Teichler <tom.teichler@teckids.org> + Copyright © 2019 mirabilos <thorsten.glaser@teckids.org> Licenced under the EUPL, version 1.2 or later @@ -50,5 +91,13 @@ full licence text or on the `European Union Public Licence`_ website https://joinup.ec.europa.eu/collection/eupl/guidelines-users-and-developers (including all other official language versions). -.. _AlekSIS: https://edugit.org/AlekSIS/Official/AlekSIS +.. _AlekSIS: https://aleksis.org/ +.. _Teckids e.V.: https://www.teckids.org/ +.. _Katharineum zu Lübeck: https://www.katharineum.de/ .. _European Union Public Licence: https://eupl.eu/ +.. _schul-frei: https://schul-frei.org/ +.. _AlekSIS-App-Chronos: https://edugit.org/Teckids/AlekSIS/official/AlekSIS-App-Chronos +.. _AlekSIS-App-DashboardFeeds: https://edugit.org/Teckids/AlekSIS/official/AlekSIS-App-DashboardFeeds +.. _AlekSIS-App-Hjelp: https://edugit.org/Teckids/AlekSIS/official/AlekSIS-App-Hjelp +.. _AlekSIS-App-LDAP: https://edugit.org/Teckids/AlekSIS/official/AlekSIS-App-LDAP +.. _AlekSIS-App-Untis: https://edugit.org/Teckids/AlekSIS/official/AlekSIS-App-Untis diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 4ebd7728f27fb3a59c2183d81264b92e960014e7..ca5ffc85552ebe4267b4c7cf0a6d93bb0df7b7ef 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -197,8 +197,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): @classmethod def syncable_fields(cls) -> List[models.Field]: - """ Collect all fields that can be synced on a model """ - + """Collect all fields that can be synced on a model.""" return [ field for field in cls._meta.fields @@ -207,18 +206,19 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): @classmethod def syncable_fields_choices(cls) -> Tuple[Tuple[str, str]]: - """ Collect all fields that can be synced on a model """ - + """Collect all fields that can be synced on a model.""" return tuple( [(field.name, field.verbose_name or field.name) for field in cls.syncable_fields()] ) @classmethod def syncable_fields_choices_lazy(cls) -> Callable[[], Tuple[Tuple[str, str]]]: - """ Collect all fields that can be synced on a model """ - + """Collect all fields that can be synced on a model.""" return lazy(cls.syncable_fields_choices, tuple) + def __str__(self) -> str: + return f"{self.__class__.meta.name} {self.pk}" + class Meta: abstract = True diff --git a/apps/official/AlekSIS-App-Chronos b/apps/official/AlekSIS-App-Chronos index b3b28861982f952d4f0f6ba33c7a5866541e0087..bc3d5ef8d4294919ec28109b61dced73f0351c6a 160000 --- a/apps/official/AlekSIS-App-Chronos +++ b/apps/official/AlekSIS-App-Chronos @@ -1 +1 @@ -Subproject commit b3b28861982f952d4f0f6ba33c7a5866541e0087 +Subproject commit bc3d5ef8d4294919ec28109b61dced73f0351c6a diff --git a/pyproject.toml b/pyproject.toml index 8458be15206de82e59bf61d36a93d4c2bc62a330..a7a9e993eea4b591ce928f016be83171364892eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "AlekSIS" -version = "2.0a1" +version = "2.0a2" packages = [ { include = "aleksis" } ] @@ -9,14 +9,22 @@ include = ["CHANGELOG.rst", "CODE_OF_CONDUCT.rst", "CONTRIBUTING.rst", "LICENCE. description = "AlekSIS (School Information System) — Core" authors = ["Dominik George <dominik.george@teckids.org>", "Julian Leucker <leuckeju@katharineum.de>", "mirabilos <thorsten.glaser@teckids.org>", "Frank Poetzsch-Heffter <p-h@katharineum.de>", "Tom Teichler <tom.teichler@teckids.org>", "Jonathan Weth <wethjo@katharineum.de>", "Hangzhi Yu <yuha@katharineum.de>"] -license = "EUPL-1.2" +maintainers = ["Jonathan Weth <wethjo@katharineum.de>", "Dominik George <dominik.george@teckids.org>"] +license = "EUPL-1.2-or-later" homepage = "https://aleksis.org/" -repository = "https://edugit.org/AlekSIS/Official/AlekSIS" -documentation = "https://aleksis.edugit.io/AlekSIS/docs/html/" +repository = "https://edugit.org/AlekSIS/official/AlekSIS" +documentation = "https://aleksis.org/AlekSIS/docs/html/" +keywords = ["SIS", "education", "school", "digitisation", "school apps"] classifiers = [ + "Development Status :: 3 - Alpha", "Environment :: Web Environment", + "Framework :: Django :: 3.0", + "Intended Audience :: Developers", "Intended Audience :: Education", - "Topic :: Education" + "Topic :: Education", + "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Typing :: Typed", ] [tool.poetry.dependencies]