BEKANNTGABE VON PERSONENDATEN

3.10

Grenzüberschreitende Bekanntgabe von Personendaten

Wenn Daten aus der Schweiz in andere Länder bekannt gegeben werden, gibt es einige besondere Bestimmungen zu beachten.

Datenbearbeitungen in der Schweiz und in den meisten europäischen Staaten unterstehen klaren, im weltweiten Vergleich strengen datenschutzrechtlichen Bestimmungen. Werden Personendaten aus der Schweiz in Länder weitergegeben, in denen kein entsprechendes Datenschutzniveau gilt, dann besteht die Gefahr, dass diese Daten in einer Weise genutzt werden, die nach dem schweizerischen oder europäischen Datenschutzrecht nicht zulässig ist. Damit besteht für die betroffenen Personen die Gefahr von Grundrechtsverletzungen.

Aus diesem Grund legt § 23 des Informations- und Datenschutzgesetzes (IDG) fest, dass Personendaten nur in jene Staaten bekanntgegeben werden dürfen, die der Europaratskonvention 108, künftig 108+, beigetreten sind, also in Staaten, die damit einen zum schweizerischen Datenschutzrecht vergleichbaren Schutz für die Grundrechte der betroffenen Personen gewährleisten. In andere Staaten dürfen Personendaten nur dann bekannt gegeben werden, wenn deren Gesetzgebung ebenfalls einen angemessenen Schutz sicherstellt oder wenn durch vertragliche Vereinbarungen zwischen dem datenliefernden öffentlichen Organ und den Empfängerinnen oder Empfängern ein angemessener Schutz garantiert wird. Welche Staaten durch Gesetzgebung einen angemessenen Schutz gewährleisten, hält eine Liste des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (oder künftig des Bundesrates) fest.

Beim Datentransfer ins Ausland muss unterschieden werden zwischen der Übergabe von Personendaten vom verantwortlichen Organ an eine Auftragsdatenbearbeiterin (§ 7 IDG) einerseits und der Datenbekanntgabe in die eigene Verantwortung der Empfängerin andererseits. § 23 IDG gilt für den zweiten Fall, also bei der Bekanntgabe von Personendaten an eine Empfängerin, die sie dann zu einem eigenen Zweck und in eigener Verantwortung bearbeiten darf. Der erste Fall, die Auftragsbearbeitung, stellt keine Bekanntgabe im Sinne des IDG dar und damit gilt grundsätzlich auch § 23 IDG nicht. Denn die Auftragsdatenbearbeiterin darf die Daten zu dem Zweck bearbeiten, der vom auftraggebenden öffentlichen Organ vorgegeben ist – und dieses öffentliche Organ bleibt gegenüber den betroffenen Personen verantwortlich, auch für das, was die Auftragsdatenbearbeiterin tut und tun sollte, aber nicht tut. Damit werden die betroffenen Personen nicht schlechter gestellt, als wenn die Auftragsdatenbearbeitung in der Schweiz stattfinden würde. Bei der Übergabe der Daten an eine Auftragsdatenbearbeiterin im Ausland werden die Daten also zwar in einem anderen Land mit allenfalls weniger strenger Gesetzgebung bearbeitet, aber grundsätzlich dennoch nur nach dem Datenschutzniveau, welches auch für die Datenbearbeitung durch das bekanntgebende öffentliche Organ gilt. Auch wenn § 23 IDG auf die Übermittlung an eine Auftragsdatenbearbeiterin im Ausland nicht direkt anwendbar ist, müssen die Risiken der Datenübermittlung ins Ausland. beurteilt werden. Dazu sind die Risikoabwägungen analog zu den Kriterien von § 23 IDG hilfreich und können mit entsprechenden Schutzmassnahmen, zum Beispiel mit einer Verschlüsselung der Daten, vermieden oder auf ein tragbares Mass verringert werden.


Bekanntgabe von Personendaten in die USA

Für die Bekanntgabe von Personendaten in die USA bestanden in der Vergangenheit zwei Abkommen zwischen der EU-Kommission und den USA bzw. der Schweiz und den USA: das sogenannte «Safe Harbor»-Abkommen und das «Privacy Shield»-Framework. Der Europäische Gerichtshof (EuGH) hat allerdings bezüglich beider Abkommen festgestellt, dass sie trotz aller Bemühungen kein angemessenes Datenschutzniveau aus Sicht der EU schaffen. Die EuGH-Urteile binden die Schweiz zwar nicht, aber die Schweiz hat übereinstimmende Abkommen mit den USA abgeschlossen und muss wiederum auch gegenüber der EU auch ein angemessenes Datenschutzniveau aufweisen. Deshalb haben diese Urteile («Schrems-I und II») faktisch durchaus Auswirkungen auf die Zulässigkeit des Datentransfers von der Schweiz in die USA. Hier wird zu beobachten sein, wie sich Rechtssetzung und Rechtsprechung in Zukunft weiterentwickeln.

DJDT

Versionen

Paket Name Version
Django 4.2.17
Python 3.11.11
allauth Allauth 65.3.1.final.0
cachalot Cachalot 2.6.3
crispy_bootstrap5 Crispy_Bootstrap5 2024.10
crispy_forms Crispy_Forms 2.3
debug_toolbar Debug Toolbar 4.4.6
django_extensions Django Extensions 3.2.3
django_q Django Q 1.7.6
imagekit Imagekit 5.0.0
impersonate Impersonate 1.9.4
markdownx Markdownx 4.0.7
mozilla_django_oidc Mozilla_Django_Oidc 4.0.1
notifications Notifications 1.8.3
rosetta Rosetta 0.10.1
rules Rules 3.5.0.final.1
simple_history Simple_History 3.7.0
storages Storages 1.14.4
tos Terms Of Service 1.1.0
waffle django-waffle 4.1.0

Zeit

Ressourcenverwendung

Ressource Wert
CPU-Zeit Benutzer 454.066 ms
CPU-Zeit System 9.617 ms
CPU-Zeit gesamt 463.683 ms
Verstrichene Zeit 481.285 ms
Kontextwechsel 210 freiwillig, 30 unfreiwillig

Browserzeit

Timing-Attribut Verlauf Millisekunden seit Seitenaufruf (plus Dauer)
domainLookup3 (+260)
connect263 (+244)
request507 (+1610)
response1247 (+870)
domLoading1267 (+-1736881648803)
domInteractive2372
domContentLoadedEvent2372 (+74)
loadEvent-1736881647536 (+0)

Einstellungen von config.settings.staging

Einstellung Wert
ABSOLUTE_URL_OVERRIDES {}
ACCOUNT_ADAPTER 'lms_base.adapter.AccountAdapter'
ADMINS (('admin', 'notifications-nmc@unibas.ch'),)
ADMIN_URL 'admin/'
ALLOWED_HOSTS ['*']
APPEND_SLASH True
AUTHENTICATION_BACKENDS ('rules.permissions.ObjectPermissionBackend', 'lms_base.authentication.EDUIDAuthenticationBackend', 'django.contrib.auth.backends.ModelBackend')
AUTH_PASSWORD_VALIDATORS '********************'
AUTH_USER_MODEL 'users.User'
BASE_DIR '/app/project/config/../'
CACHALOT_ENABLED True
CACHES {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://tales-redis:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'IGNORE_EXCEPTIONS': True}}}
CACHE_MIDDLEWARE_ALIAS 'default'
CACHE_MIDDLEWARE_KEY_PREFIX '********************'
CACHE_MIDDLEWARE_SECONDS 600
CI_COMMIT_SHORT_SHA '484e3ae2'
CI_COMMIT_TAG ''
CRISPY_ALLOWED_TEMPLATE_PACKS 'bootstrap5'
CRISPY_TEMPLATE_PACK 'bootstrap5'
CSRF_COOKIE_AGE 31449600
CSRF_COOKIE_DOMAIN None
CSRF_COOKIE_HTTPONLY False
CSRF_COOKIE_MASKED False
CSRF_COOKIE_NAME 'csrftoken'
CSRF_COOKIE_PATH '/'
CSRF_COOKIE_SAMESITE None
CSRF_COOKIE_SECURE False
CSRF_FAILURE_VIEW 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS []
CSRF_USE_SESSIONS False
DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'tales-postgres', 'NAME': 'tptt', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'tales_db_user'}}
DATABASE_ROUTERS []
DATA_UPLOAD_MAX_MEMORY_SIZE 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS 1000
DATA_UPLOAD_MAX_NUMBER_FILES 100
DATETIME_FORMAT 'N j, Y, P'
DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT 'N j, Y'
DATE_INPUT_FORMATS ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG True
DEBUG_PROPAGATE_EXCEPTIONS False
DEBUG_TOOLBAR_CONFIG {'SHOW_TOOLBAR_CALLBACK': <function show_toolbar at 0x7910e57bd620>}
DEBUG_TOOLBAR_PANELS ['debug_toolbar.panels.history.HistoryPanel', 'debug_toolbar.panels.versions.VersionsPanel', 'debug_toolbar.panels.timer.TimerPanel', 'debug_toolbar.panels.settings.SettingsPanel', 'debug_toolbar.panels.headers.HeadersPanel', 'debug_toolbar.panels.request.RequestPanel', 'debug_toolbar.panels.sql.SQLPanel', 'debug_toolbar.panels.staticfiles.StaticFilesPanel', 'debug_toolbar.panels.templates.TemplatesPanel', 'debug_toolbar.panels.cache.CachePanel', 'cachalot.panels.CachalotPanel', 'debug_toolbar.panels.signals.SignalsPanel', 'debug_toolbar.panels.logging.LoggingPanel', 'debug_toolbar.panels.redirects.RedirectsPanel', 'debug_toolbar.panels.profiling.ProfilingPanel']
DECIMAL_SEPARATOR '.'
DEFAULT_AUTO_FIELD 'django.db.models.AutoField'
DEFAULT_CHARSET 'utf-8'
DEFAULT_EXCEPTION_REPORTER 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL 'contact-nmc@unibas.ch'
DEFAULT_INDEX_TABLESPACE ''
DEFAULT_TABLESPACE ''
DEPLOY_ENV 'staging'
DISALLOWED_USER_AGENTS []
DJANGO_APPS ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.forms', 'django.contrib.sites', 'django.contrib.flatpages', 'modeltranslation', 'django.contrib.admin', 'django.contrib.redirects', 'django.contrib.sitemaps', 'django.contrib.humanize')
DJANGO_NOTIFICATIONS_CONFIG {'USE_JSONFIELD': True}
EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST 'smtp.unibas.ch'
EMAIL_HOST_PASSWORD '********************'
EMAIL_HOST_USER ''
EMAIL_PORT 25
EMAIL_SSL_CERTFILE None
EMAIL_SSL_KEYFILE '********************'
EMAIL_SUBJECT_PREFIX '[Django] '
EMAIL_TIMEOUT None
EMAIL_USE_LOCALTIME False
EMAIL_USE_SSL False
EMAIL_USE_TLS False
FILE_UPLOAD_DIRECTORY_PERMISSIONS None
FILE_UPLOAD_HANDLERS ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE 2621440
FILE_UPLOAD_PERMISSIONS 420
FILE_UPLOAD_TEMP_DIR None
FIRST_DAY_OF_WEEK 0
FIXTURE_DIRS []
FORCE_SCRIPT_NAME None
FORMAT_MODULE_PATH None
FORM_RENDERER 'django.forms.renderers.TemplatesSetting'
IGNORABLE_404_URLS []
IMAGEKIT_CACHEFILE_DIR 'CACHE/images'
IMAGEKIT_CACHEFILE_NAMER 'imagekit.cachefiles.namers.hash'
IMAGEKIT_CACHE_BACKEND 'default'
IMAGEKIT_CACHE_PREFIX 'imagekit:'
IMAGEKIT_CACHE_TIMEOUT 300
IMAGEKIT_DEFAULT_CACHEFILE_BACKEND 'imagekit.cachefiles.backends.Simple'
IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY 'imagekit.cachefiles.strategies.JustInTime'
IMAGEKIT_DEFAULT_FILE_STORAGE 'default'
IMAGEKIT_SPEC_CACHEFILE_NAMER 'imagekit.cachefiles.namers.source_name_as_path'
IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY '********************'
INSTALLED_APPS ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.forms', 'django.contrib.sites', 'django.contrib.flatpages', 'modeltranslation', 'django.contrib.admin', 'django.contrib.redirects', 'django.contrib.sitemaps', 'django.contrib.humanize', 'simple_history', 'crispy_forms', 'crispy_bootstrap5', 'allauth', 'allauth.account', 'allauth.socialaccount', 'mozilla_django_oidc', 'django_extensions', 'markdownx', 'rules.apps.AutodiscoverRulesConfig', 'imagekit', 'waffle', 'django_htmx', 'cachalot', 'corsheaders', 'tos', 'tos_i18n', 'impersonate', 'rosetta', 'django_q', 'notifications', 'link_check', 'users.apps.UsersConfig', 'lms_base', 'lms_tales.apps.LMSTalesConfig', 'lms_comments.apps.LMSCommentsConfig', 'lms_static_texts.apps.LMSStaticTextsConfig', 'tags.apps.TagsConfig', 'startpage.apps.StartpageConfig', 'search.apps.SearchConfig', 'utils.apps.UtilsConfig', 'dashboard.apps.DashboardConfig', 'reporting.apps.ReportingConfig', 'lms_notifications.apps.LMSNotificationsConfig', 'lms_roles.apps.LMSRolesConfig', 'storages', 'debug_toolbar')
INTERNAL_IPS ['127.0.0.1']
LANGUAGES (('de', 'Deutsch'), ('en', 'Englisch'), ('fr', 'Franzoesisch'))
LANGUAGES_BIDI ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur']
LANGUAGE_CODE 'de'
LANGUAGE_COOKIE_AGE None
LANGUAGE_COOKIE_DOMAIN None
LANGUAGE_COOKIE_HTTPONLY False
LANGUAGE_COOKIE_NAME 'django_language'
LANGUAGE_COOKIE_PATH '/'
LANGUAGE_COOKIE_SAMESITE None
LANGUAGE_COOKIE_SECURE False
LOCALE_PATHS ['/app/project/config/../locale']
LOCAL_APPS ('users.apps.UsersConfig', 'lms_base', 'lms_tales.apps.LMSTalesConfig', 'lms_comments.apps.LMSCommentsConfig', 'lms_static_texts.apps.LMSStaticTextsConfig', 'tags.apps.TagsConfig', 'startpage.apps.StartpageConfig', 'search.apps.SearchConfig', 'utils.apps.UtilsConfig', 'dashboard.apps.DashboardConfig', 'reporting.apps.ReportingConfig', 'lms_notifications.apps.LMSNotificationsConfig', 'lms_roles.apps.LMSRolesConfig')
LOGGING {'disable_existing_loggers': False, 'formatters': {'verbose': {'format': '{asctime} {levelname} {name} {module} ' '{message}', 'style': '{'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'verbose'}, 'mail_admins': {'class': 'django.utils.log.AdminEmailHandler', 'include_html': True, 'level': 'ERROR'}}, 'loggers': {'django': {'handlers': ['console', 'mail_admins'], 'level': 'WARNING', 'propagate': True}, 'django.request': {'handlers': ['console', 'mail_admins'], 'level': 'ERROR', 'propagate': False}, 'django.security': {'handlers': ['console', 'mail_admins'], 'level': 'ERROR', 'propagate': False}, 'fontTools': {'handlers': ['console'], 'level': 'ERROR'}, 'tales': {'handlers': ['console'], 'level': 'INFO'}, 'weasyprint': {'handlers': ['console'], 'level': 'ERROR'}}, 'root': {'handlers': ['console'], 'level': 'WARNING'}, 'version': 1}
LOGGING_CONFIG 'logging.config.dictConfig'
LOGIN_REDIRECT_URL '/'
LOGIN_URL 'account_login'
LOGOUT_REDIRECT_URL '/'
MANAGERS []
MARKDOWNX_EDITOR_RESIZABLE True
MARKDOWNX_IMAGE_MAX_SIZE {'quality': 90, 'size': (1920, 5600)}
MARKDOWNX_MARKDOWNIFY_FUNCTION 'lms_base.utils.markdownify'
MARKDOWNX_MARKDOWN_EXTENSIONS ['markdown.extensions.extra', 'markdown.extensions.smarty', 'markdown.extensions.codehilite', 'markdown.extensions.fenced_code', 'markdown.extensions.attr_list', 'markdown.extensions.toc', 'utils.markdown_extensions', 'python_markdown_oembed_extension']
MARKDOWNX_MEDIA_PATH 'markdownx/'
MARKDOWNX_UPLOAD_URLS_PATH '/markdownx/upload/'
MARKDOWNX_URLS_PATH '/markdownx/markdownify/'
MEDIA_ROOT '/app/project/media'
MEDIA_URL '/media/'
MESSAGE_REAPPEAR_TIME 600
MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage'
MIDDLEWARE ['corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'lms_tales.middleware.SetLocaleFoundInUserSettings', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'allauth.account.middleware.AccountMiddleware', 'impersonate.middleware.ImpersonateMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'simple_history.middleware.HistoryRequestMiddleware', 'django.contrib.redirects.middleware.RedirectFallbackMiddleware', 'waffle.middleware.WaffleMiddleware', 'django_htmx.middleware.HtmxMiddleware', 'lms_tales.middleware.TalesUserAgreementMiddleware', 'lms_tales.middleware.ScheduledMessagesMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware']
MIGRATION_MODULES {'tos': 'lms_tales.migrate.tos'}
MODELTRANSLATION_CUSTOM_FIELDS ('JSONField',)
MODELTRANSLATION_DEFAULT_LANGUAGE 'de'
MODELTRANSLATION_FALLBACK_LANGUAGES ('de', 'en', 'fr')
MONTH_DAY_FORMAT 'F j'
NOTIFICATIONS_NOTIFICATION_MODEL 'notifications.Notification'
NUMBER_GROUPING 0
OIDC_OP_AUTHORIZATION_ENDPOINT 'https://login.test.eduid.ch/idp/profile/oidc/authorize'
OIDC_OP_JWKS_ENDPOINT 'https://login.test.eduid.ch/idp/profile/oidc/keyset'
OIDC_OP_TOKEN_ENDPOINT '********************'
OIDC_OP_USER_ENDPOINT 'https://login.test.eduid.ch/idp/profile/oidc/userinfo'
OIDC_RP_CLIENT_ID 'unibas-tales'
OIDC_RP_CLIENT_SECRET '********************'
OIDC_RP_SCOPES 'openid email profile https://login.eduid.ch/authz/User.Read'
OIDC_RP_SIGN_ALGO 'RS256'
OIDC_TOKEN_USE_BASIC_AUTH '********************'
PASSWORD_HASHERS '********************'
PASSWORD_RESET_TIMEOUT '********************'
PREPEND_WWW False
PROJECT_DIR '/app/project/config/../'
Q_CLUSTER {'catch_up': False, 'django_redis': 'default', 'name': 'QCluster', 'retry': 600, 'timeout': 500, 'workers': 4}
RELEASE_NAME ''
REQUIRE_SUPERUSER True
ROOT_URLCONF 'config.urls'
ROSETTA_MESSAGES_SOURCE_LANGUAGE_CODE 'de'
ROSETTA_MESSAGES_SOURCE_LANGUAGE_NAME 'Deutsch'
ROSETTA_SHOW_AT_ADMIN_PANEL 'True'
SECRET_KEY '********************'
SECRET_KEY_FALLBACKS '********************'
SECURE_CONTENT_TYPE_NOSNIFF True
SECURE_CROSS_ORIGIN_OPENER_POLICY 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS False
SECURE_HSTS_PRELOAD False
SECURE_HSTS_SECONDS 0
SECURE_PROXY_SSL_HEADER ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_REDIRECT_EXEMPT []
SECURE_REFERRER_POLICY 'same-origin'
SECURE_SSL_HOST None
SECURE_SSL_REDIRECT False
SERVER_EMAIL 'root@localhost'
SESSION_CACHE_ALIAS 'default'
SESSION_COOKIE_AGE 1209600
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_NAME 'sessionid'
SESSION_COOKIE_PATH '/'
SESSION_COOKIE_SAMESITE None
SESSION_COOKIE_SECURE False
SESSION_ENGINE 'django.contrib.sessions.backends.cache'
SESSION_EXPIRE_AT_BROWSER_CLOSE False
SESSION_FILE_PATH None
SESSION_SAVE_EVERY_REQUEST False
SESSION_SERIALIZER 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE 'config.settings.staging'
SHORT_DATETIME_FORMAT 'm/d/Y P'
SHORT_DATE_FORMAT 'm/d/Y'
SIGNING_BACKEND 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS []
SITE_DOMAIN 'https://nmc-tales-staging.nmc.unibas.ch/'
SITE_ID 1
SLACK_WEBHOOK 'https://hooks.slack.com/services/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'
STAGING_EMAIL_RECIPIENTS ['notifications-nmc@unibas.ch']
STATICFILES_DIRS ['/app/project/config/../static']
STATICFILES_FINDERS ('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder')
STATICFILES_STORAGE 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT '/app/project/config/../../staticfiles'
STATIC_URL '/static/'
STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TALES_BASE_URL 'https://tales.nmc.unibas.ch'
TALES_VERSION 'dev'
TEMPLATES [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/app/project/config/../templates', '/usr/local/lib/python3.11/site-packages/django/forms/templates'], 'OPTIONS': {'builtins': ['django.templatetags.i18n', 'django.templatetags.static'], 'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'utils.context_processors.ci_info'], 'debug': False, 'loaders': ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader']}}]
TEST_NON_SERIALIZED_APPS []
TEST_RUNNER 'django.test.runner.DiscoverRunner'
THIRD_PARTY_APPS ('debug_toolbar',)
THOUSAND_SEPARATOR ','
TIME_FORMAT 'P'
TIME_INPUT_FORMATS ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE 'Europe/Zurich'
USER_DEACTIVATION_AFTER_DAYS 730
USER_DELETION_AFTER_DAYS 912
USE_DEPRECATED_PYTZ False
USE_I18N True
USE_L10N True
USE_THOUSAND_SEPARATOR False
USE_TZ True
USE_X_FORWARDED_HOST True
USE_X_FORWARDED_PORT False
VIEW_CACHE_TTL 600
WAFFLE_LOG_MISSING_FLAGS 30
WAFFLE_LOG_MISSING_SAMPLES 30
WAFFLE_LOG_MISSING_SWITCHES 30
WSGI_APPLICATION 'config.wsgi.application'
X_FRAME_OPTIONS 'DENY'
YEAR_MONTH_FORMAT 'F Y'

Header

Anfrage-Header

Schlüssel Wert
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding gzip, deflate, br, zstd
Cache-Control no-cache
Host nmc-tales-staging.nmc.unibas.ch
Pragma no-cache
Priority u=0, i
Sec-Ch-Ua "HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
Sec-Ch-Ua-Mobile ?0
Sec-Ch-Ua-Platform "Windows"
Sec-Fetch-Dest document
Sec-Fetch-Mode navigate
Sec-Fetch-Site none
Sec-Fetch-User ?1
Upgrade-Insecure-Requests 1
User-Agent Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
X-Forwarded-For 18.220.89.180
X-Forwarded-Host nmc-tales-staging.nmc.unibas.ch
X-Forwarded-Proto https

Antwort-Header

Schlüssel Wert
Content-Type text/html; charset=utf-8

WSGI-Umgebung

Da sich die WSGI-Umgebung von der Umgebung des Servers ableitet, wird nur eine notwendige Teilmenge dargestellt.

Schlüssel Wert
PATH_INFO /de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526
QUERY_STRING
REMOTE_ADDR 18.220.89.180
REMOTE_HOST 18.220.89.180
REQUEST_METHOD GET
SCRIPT_NAME
SERVER_NAME 172.19.0.7
SERVER_PORT 8000

Anfrage

View-Informationen

View-Funktion Argumente Schlüsselwort-Argumente URL-Name
utils.decorators.cache_per_user.<locals>.decorator.<locals>.apply_cache () {'chapter_pk': 173, 'chapter_slug': 'bekanntgabe-von-personendaten', 'course_pk': 29, 'course_slug': 'data-protection', 'pk': 1526, 'slug': 'cross-border-disclosure-of-personal-data'} tales:step

Keine Cookies

Keine Sitzungsdaten

Keine GET-Daten

Keine POST-Daten

SQL-Abfragen von 1 Verbindung

  • default 16,76 ms (14 Abfragen inklusive 7 ähnlich )
Abfrage Verlauf Zeit (ms) Aktion
SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 WHERE "lms_tales_talesstep"."id" = 1526
 LIMIT 21
SELECT ••• FROM "lms_tales_talesstep" WHERE "lms_tales_talesstep"."id" = 1526 LIMIT 21
2,28

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(20)
  self.object = self.get_object()

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get_object(53)
  obj = queryset.get()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstepfilenew"."id",
       "lms_tales_talesstepfilenew"."created",
       "lms_tales_talesstepfilenew"."modified",
       "lms_tales_talesstepfilenew"."step_id",
       "lms_tales_talesstepfilenew"."file_id",
       "lms_tales_talesstepfilenew"."language"
  FROM "lms_tales_talesstepfilenew"
 WHERE ("lms_tales_talesstepfilenew"."language" = 'de' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
SELECT ••• FROM "lms_tales_talesstepfilenew" WHERE ("lms_tales_talesstepfilenew"."language" = 'de' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
3 ähnliche Abfragen.
1,21

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(63)
  if len(step_files_new) == 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstepfilenew"."id",
       "lms_tales_talesstepfilenew"."created",
       "lms_tales_talesstepfilenew"."modified",
       "lms_tales_talesstepfilenew"."step_id",
       "lms_tales_talesstepfilenew"."file_id",
       "lms_tales_talesstepfilenew"."language"
  FROM "lms_tales_talesstepfilenew"
 WHERE ("lms_tales_talesstepfilenew"."language" = 'en' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
SELECT ••• FROM "lms_tales_talesstepfilenew" WHERE ("lms_tales_talesstepfilenew"."language" = 'en' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
3 ähnliche Abfragen.
0,59

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstepfilenew"."id",
       "lms_tales_talesstepfilenew"."created",
       "lms_tales_talesstepfilenew"."modified",
       "lms_tales_talesstepfilenew"."step_id",
       "lms_tales_talesstepfilenew"."file_id",
       "lms_tales_talesstepfilenew"."language"
  FROM "lms_tales_talesstepfilenew"
 WHERE ("lms_tales_talesstepfilenew"."language" = 'fr' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
SELECT ••• FROM "lms_tales_talesstepfilenew" WHERE ("lms_tales_talesstepfilenew"."language" = 'fr' AND "lms_tales_talesstepfilenew"."step_id" = 1526)
3 ähnliche Abfragen.
0,56

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_taleschapter"."id",
       "lms_tales_taleschapter"."created",
       "lms_tales_taleschapter"."modified",
       "lms_tales_taleschapter"."status_changed",
       "lms_tales_taleschapter"."is_removed",
       "lms_tales_taleschapter"."title",
       "lms_tales_taleschapter"."title_de",
       "lms_tales_taleschapter"."title_en",
       "lms_tales_taleschapter"."title_fr",
       "lms_tales_taleschapter"."slug",
       "lms_tales_taleschapter"."order",
       "lms_tales_taleschapter"."status",
       "lms_tales_taleschapter"."course_id"
  FROM "lms_tales_taleschapter"
 WHERE ("lms_tales_taleschapter"."course_id" = 29 AND NOT "lms_tales_taleschapter"."is_removed" AND "lms_tales_taleschapter"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC
SELECT ••• FROM "lms_tales_taleschapter" WHERE ("lms_tales_taleschapter"."course_id" = 29 AND NOT "lms_tales_taleschapter"."is_removed" AND "lms_tales_taleschapter"."status" = 'published') ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC
1,27

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 171 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC,
          "lms_tales_talesstep"."order" ASC
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 171 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published') ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC, "lms_tales_talesstep"."order" ASC
4 ähnliche Abfragen.
1,70

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 172 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC,
          "lms_tales_talesstep"."order" ASC
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 172 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published') ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC, "lms_tales_talesstep"."order" ASC
4 ähnliche Abfragen.
1,71

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC,
          "lms_tales_talesstep"."order" ASC
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published') ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC, "lms_tales_talesstep"."order" ASC
4 ähnliche Abfragen.
1,73

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 174 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC,
          "lms_tales_talesstep"."order" ASC
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 174 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published') ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC, "lms_tales_talesstep"."order" ASC
4 ähnliche Abfragen.
1,30

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published' AND "lms_tales_talesstep"."order" > 10)
 ORDER BY "lms_tales_taleschapter"."course_id" ASC,
          "lms_tales_taleschapter"."order" ASC,
          "lms_tales_talesstep"."order" ASC
 LIMIT 1
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published' AND "lms_tales_talesstep"."order" > 10) ORDER BY "lms_tales_taleschapter"."course_id" ASC, "lms_tales_taleschapter"."order" ASC, "lms_tales_talesstep"."order" ASC LIMIT 1
0,83

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_next_step(128)
  return step.get_next(published_only=True)

/app/project/lms_base/models.py in get_next(249)
  return self._get_neighbour_step(is_next=True, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(71)
  return qs.first()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 INNER JOIN "lms_tales_taleschapter"
    ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id")
 WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published' AND "lms_tales_talesstep"."order" < 10)
 ORDER BY "lms_tales_taleschapter"."course_id" DESC,
          "lms_tales_taleschapter"."order" DESC,
          "lms_tales_talesstep"."order" DESC
 LIMIT 1
SELECT ••• FROM "lms_tales_talesstep" INNER JOIN "lms_tales_taleschapter" ON ("lms_tales_talesstep"."chapter_id" = "lms_tales_taleschapter"."id") WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published' AND "lms_tales_talesstep"."order" < 10) ORDER BY "lms_tales_taleschapter"."course_id" DESC, "lms_tales_taleschapter"."order" DESC, "lms_tales_talesstep"."order" DESC LIMIT 1
0,79

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_previous_step(105)
  return step.get_previous(published_only=True)

/app/project/lms_base/models.py in get_previous(255)
  return self._get_neighbour_step(is_next=False, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(72)
  return qs.last()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "auth_group"."id",
       "auth_group"."name"
  FROM "auth_group"
 INNER JOIN "lms_tales_talescourse_owner"
    ON ("auth_group"."id" = "lms_tales_talescourse_owner"."group_id")
 WHERE "lms_tales_talescourse_owner"."talescourse_id" = 29
SELECT ••• FROM "auth_group" INNER JOIN "lms_tales_talescourse_owner" ON ("auth_group"."id" = "lms_tales_talescourse_owner"."group_id") WHERE "lms_tales_talescourse_owner"."talescourse_id" = 29
1,03

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/usr/local/lib/python3.11/site-packages/rules/templatetags/rules.py in has_perm(18)
  return user.has_perm(perm, obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in has_perm(480)
  return _user_has_perm(self, perm, obj=obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in _user_has_perm(220)
  if backend.has_perm(user, perm, obj):

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(31)
  return has_perm(perm, user, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(23)
  return permissions.test_rule(name, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/rulesets.py in test_rule(6)
  return name in self and self[name].test(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in test(172)
  return bool(self._apply(*args))

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in OR(184)
  return self._combine(other, operator.or_, args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _combine(206)
  self_result = self._apply(*args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/app/project/lms_tales/rules.py in is_in_group(47)
  for owner in course.owner.all():

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_taleschapter"."id",
       "lms_tales_taleschapter"."created",
       "lms_tales_taleschapter"."modified",
       "lms_tales_taleschapter"."status_changed",
       "lms_tales_taleschapter"."is_removed",
       "lms_tales_taleschapter"."title",
       "lms_tales_taleschapter"."title_de",
       "lms_tales_taleschapter"."title_en",
       "lms_tales_taleschapter"."title_fr",
       "lms_tales_taleschapter"."slug",
       "lms_tales_taleschapter"."order",
       "lms_tales_taleschapter"."status",
       "lms_tales_taleschapter"."course_id"
  FROM "lms_tales_taleschapter"
 WHERE ("lms_tales_taleschapter"."course_id" = 29 AND NOT "lms_tales_taleschapter"."is_removed" AND "lms_tales_taleschapter"."status" = 'published')
 ORDER BY "lms_tales_taleschapter"."order" ASC
SELECT ••• FROM "lms_tales_taleschapter" WHERE ("lms_tales_taleschapter"."course_id" = 29 AND NOT "lms_tales_taleschapter"."is_removed" AND "lms_tales_taleschapter"."status" = 'published') ORDER BY "lms_tales_taleschapter"."order" ASC
0,65

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(107)
  chapter_list = list(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

SELECT "lms_tales_talesstep"."id",
       "lms_tales_talesstep"."created",
       "lms_tales_talesstep"."modified",
       "lms_tales_talesstep"."status_changed",
       "lms_tales_talesstep"."is_removed",
       "lms_tales_talesstep"."title",
       "lms_tales_talesstep"."title_de",
       "lms_tales_talesstep"."title_en",
       "lms_tales_talesstep"."title_fr",
       "lms_tales_talesstep"."subtitle",
       "lms_tales_talesstep"."subtitle_de",
       "lms_tales_talesstep"."subtitle_en",
       "lms_tales_talesstep"."subtitle_fr",
       "lms_tales_talesstep"."short_description",
       "lms_tales_talesstep"."short_description_de",
       "lms_tales_talesstep"."short_description_en",
       "lms_tales_talesstep"."short_description_fr",
       "lms_tales_talesstep"."title_image",
       "lms_tales_talesstep"."slug",
       "lms_tales_talesstep"."content",
       "lms_tales_talesstep"."content_de",
       "lms_tales_talesstep"."content_en",
       "lms_tales_talesstep"."content_fr",
       "lms_tales_talesstep"."content_html",
       "lms_tales_talesstep"."content_html_de",
       "lms_tales_talesstep"."content_html_en",
       "lms_tales_talesstep"."content_html_fr",
       "lms_tales_talesstep"."content_json",
       "lms_tales_talesstep"."content_json_de",
       "lms_tales_talesstep"."content_json_en",
       "lms_tales_talesstep"."content_json_fr",
       "lms_tales_talesstep"."copyright",
       "lms_tales_talesstep"."copyright_de",
       "lms_tales_talesstep"."copyright_en",
       "lms_tales_talesstep"."copyright_fr",
       "lms_tales_talesstep"."step_type",
       "lms_tales_talesstep"."duration",
       "lms_tales_talesstep"."order",
       "lms_tales_talesstep"."status",
       "lms_tales_talesstep"."allow_comments",
       "lms_tales_talesstep"."call_to_action",
       "lms_tales_talesstep"."call_to_action_de",
       "lms_tales_talesstep"."call_to_action_en",
       "lms_tales_talesstep"."call_to_action_fr",
       "lms_tales_talesstep"."chapter_id"
  FROM "lms_tales_talesstep"
 WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published')
 ORDER BY "lms_tales_talesstep"."order" ASC
SELECT ••• FROM "lms_tales_talesstep" WHERE ("lms_tales_talesstep"."chapter_id" = 173 AND NOT "lms_tales_talesstep"."is_removed" AND "lms_tales_talesstep"."status" = 'published') ORDER BY "lms_tales_talesstep"."order" ASC
1,10

Verbindung: default

Transaktionsstatus: Wartet

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(118)
  step_list = list(self.chapter.published_steps.all().order_by("order"))

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(64)
  result = execute_query_func()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in <lambda>(80)
  execute_query_func = lambda: original(compiler, *args, **kwargs)

Statische Dateien (273 gefunden, 7 benutzt)

Pfad mit statischen Dateien

  1. /app/project/static

Apps mit statischen Dateien

  1. modeltranslation
  2. django.contrib.admin
  3. django_extensions
  4. markdownx
  5. django_htmx
  6. rosetta
  7. notifications
  8. debug_toolbar

Statische Dateien

images/icon_tales_white.png
/app/project/static/images/icon_tales_white.png
images/icon_tales_transp.png
/app/project/static/images/icon_tales_transp.png
lms_base/css/lms_base.css
/app/project/static/lms_base/css/lms_base.css
lms_tales/css/lms_tales.css
None
lms_base/js/lms_base.js
/app/project/static/lms_base/js/lms_base.js
lms_tales/js/lms_tales.js
/app/project/static/lms_tales/js/lms_tales.js
images/uni-basel-logo-de.svg
/app/project/static/images/uni-basel-logo-de.svg

django.contrib.staticfiles.finders.FileSystemFinder (123 Dateien)

Pfad Ort
robots.txt /app/project/static/robots.txt
alphorn_07.jpg /app/project/static/alphorn_07.jpg
browserconfig.xml /app/project/static/browserconfig.xml
alphorn_11.jpg /app/project/static/alphorn_11.jpg
lottie/optimized_tales_banner2.mp4 /app/project/static/lottie/optimized_tales_banner2.mp4
lottie/optimized_tales_banner_av1.webm /app/project/static/lottie/optimized_tales_banner_av1.webm
lottie/tales_banner3.mp4 /app/project/static/lottie/tales_banner3.mp4
lottie/optimized_tales_banner3.webm /app/project/static/lottie/optimized_tales_banner3.webm
lottie/optimized_tales_banner2.webm /app/project/static/lottie/optimized_tales_banner2.webm
lottie/tales_banner.json /app/project/static/lottie/tales_banner.json
lottie/optimized_tales_banner3.mp4 /app/project/static/lottie/optimized_tales_banner3.mp4
lottie/optimized_tales_banner_av1.mp4 /app/project/static/lottie/optimized_tales_banner_av1.mp4
lottie/optimized_tales_banner.mp4 /app/project/static/lottie/optimized_tales_banner.mp4
lottie/tales_banner2.mp4 /app/project/static/lottie/tales_banner2.mp4
lms_base/font/nmc.woff /app/project/static/lms_base/font/nmc.woff
lms_base/font/icon-left.woff2 /app/project/static/lms_base/font/icon-left.woff2
lms_base/font/nmc.woff2 /app/project/static/lms_base/font/nmc.woff2
lms_base/font/nmc.eot /app/project/static/lms_base/font/nmc.eot
lms_base/font/icon-left.woff /app/project/static/lms_base/font/icon-left.woff
lms_base/font/nmc.svg /app/project/static/lms_base/font/nmc.svg
lms_base/font/icon-left.svg /app/project/static/lms_base/font/icon-left.svg
lms_base/font/nmc.ttf /app/project/static/lms_base/font/nmc.ttf
lms_base/font/icon-left.eot /app/project/static/lms_base/font/icon-left.eot
lms_base/font/icon-left.ttf /app/project/static/lms_base/font/icon-left.ttf
lms_base/css/lms_base.css /app/project/static/lms_base/css/lms_base.css
lms_base/css/lms_base.css.map /app/project/static/lms_base/css/lms_base.css.map
lms_base/js/lms_base.js /app/project/static/lms_base/js/lms_base.js
lms_base/js/bootstrap.bundle.min.js /app/project/static/lms_base/js/bootstrap.bundle.min.js
reporting/css/report_pdf.css.map /app/project/static/reporting/css/report_pdf.css.map
reporting/css/report_pdf.css /app/project/static/reporting/css/report_pdf.css
reporting/images/nmcunilogo.png /app/project/static/reporting/images/nmcunilogo.png
reporting/images/background.jpg /app/project/static/reporting/images/background.jpg
dropzone/dropzone.min.css /app/project/static/dropzone/dropzone.min.css
dropzone/dropzone-amd-module.min.js /app/project/static/dropzone/dropzone-amd-module.min.js
dropzone/basic.min.css /app/project/static/dropzone/basic.min.css
dropzone/dropzone.min.js /app/project/static/dropzone/dropzone.min.js
lms_tales/font/nmc.woff /app/project/static/lms_tales/font/nmc.woff
lms_tales/font/icon-left.woff2 /app/project/static/lms_tales/font/icon-left.woff2
lms_tales/font/nmc.woff2 /app/project/static/lms_tales/font/nmc.woff2
lms_tales/font/nmc.eot /app/project/static/lms_tales/font/nmc.eot
lms_tales/font/icon-left.woff /app/project/static/lms_tales/font/icon-left.woff
lms_tales/font/nmc.svg /app/project/static/lms_tales/font/nmc.svg
lms_tales/font/icon-left.svg /app/project/static/lms_tales/font/icon-left.svg
lms_tales/font/nmc.ttf /app/project/static/lms_tales/font/nmc.ttf
lms_tales/font/icon-left.eot /app/project/static/lms_tales/font/icon-left.eot
lms_tales/font/icon-left.ttf /app/project/static/lms_tales/font/icon-left.ttf
lms_tales/js/lms_tales.js /app/project/static/lms_tales/js/lms_tales.js
opos/4_4.html /app/project/static/opos/4_4.html
opos/4_3.html /app/project/static/opos/4_3.html
opos/4_5.html /app/project/static/opos/4_5.html
opos/4_1.html /app/project/static/opos/4_1.html
tales_editor/favicon.ico /app/project/static/tales_editor/favicon.ico
tales_editor/index.html /app/project/static/tales_editor/index.html
tales_editor/css/chunk-vendors.css /app/project/static/tales_editor/css/chunk-vendors.css
tales_editor/css/app.css /app/project/static/tales_editor/css/app.css
tales_editor/img/bootstrap-icons.svg /app/project/static/tales_editor/img/bootstrap-icons.svg
tales_editor/img/remixicon.symbol.svg /app/project/static/tales_editor/img/remixicon.symbol.svg
tales_editor/js/app.js /app/project/static/tales_editor/js/app.js
tales_editor/js/app.js.map /app/project/static/tales_editor/js/app.js.map
tales_editor/js/chunk-vendors.js /app/project/static/tales_editor/js/chunk-vendors.js
tales_editor/js/chunk-vendors.js.map /app/project/static/tales_editor/js/chunk-vendors.js.map
images/opos_map_xs.png /app/project/static/images/opos_map_xs.png
images/opos_map_xl.png /app/project/static/images/opos_map_xl.png
images/edu-id-button-gray.png /app/project/static/images/edu-id-button-gray.png
images/icon_tales_mint.png /app/project/static/images/icon_tales_mint.png
images/favicon.ico /app/project/static/images/favicon.ico
images/door.jpg /app/project/static/images/door.jpg
images/icon_tales_transp_32x32.png /app/project/static/images/icon_tales_transp_32x32.png
images/uni-basel-logo-de.svg /app/project/static/images/uni-basel-logo-de.svg
images/raymond_ammann.jpg /app/project/static/images/raymond_ammann.jpg
images/help_en.jpg /app/project/static/images/help_en.jpg
images/opos_map_xs.avif /app/project/static/images/opos_map_xs.avif
images/opos_map_md.png /app/project/static/images/opos_map_md.png
images/help_de.jpg /app/project/static/images/help_de.jpg
images/bild.png /app/project/static/images/bild.png
images/help.jpg /app/project/static/images/help.jpg
images/Hochformat.jpg /app/project/static/images/Hochformat.jpg
images/empty_classroom.jpg /app/project/static/images/empty_classroom.jpg
images/uni-basel-logo-de.png /app/project/static/images/uni-basel-logo-de.png
images/contact-side-image-1.jpg /app/project/static/images/contact-side-image-1.jpg
images/icon_tales_white.png /app/project/static/images/icon_tales_white.png
images/portalflag.png /app/project/static/images/portalflag.png
images/uni-basel-logo-en.svg /app/project/static/images/uni-basel-logo-en.svg
images/contact-side-image-2.jpg /app/project/static/images/contact-side-image-2.jpg
images/alp_und_hirtenhorn.jpg /app/project/static/images/alp_und_hirtenhorn.jpg
images/icon_tales_transp.png /app/project/static/images/icon_tales_transp.png
images/Weltkarte_Opos.png /app/project/static/images/Weltkarte_Opos.png
images/batkitty.jpg /app/project/static/images/batkitty.jpg
images/help_fr.jpg /app/project/static/images/help_fr.jpg
nahtkurs_glossar/antikoagu.jpg /app/project/static/nahtkurs_glossar/antikoagu.jpg
nahtkurs_glossar/anamnese.jpg /app/project/static/nahtkurs_glossar/anamnese.jpg
nahtkurs_glossar/wundinfektion.jpg /app/project/static/nahtkurs_glossar/wundinfektion.jpg
nahtkurs_glossar/tensilestength.jpg /app/project/static/nahtkurs_glossar/tensilestength.jpg
nahtkurs_glossar/glucose.jpg /app/project/static/nahtkurs_glossar/glucose.jpg
nahtkurs_glossar/nacl.jpg /app/project/static/nahtkurs_glossar/nacl.jpg
sounds/temperiert_nr_7.mp3 /app/project/static/sounds/temperiert_nr_7.mp3
sounds/alphorn_13.mp3 /app/project/static/sounds/alphorn_13.mp3
sounds/alphorn_05.mp3 /app/project/static/sounds/alphorn_05.mp3
sounds/alphorn_11.mp3 /app/project/static/sounds/alphorn_11.mp3
sounds/naturton_nr_7.mp3 /app/project/static/sounds/naturton_nr_7.mp3
sounds/hirtenhorn_04.mp3 /app/project/static/sounds/hirtenhorn_04.mp3
sounds/alphorn_14.mp3 /app/project/static/sounds/alphorn_14.mp3
sounds/alphorn_01.mp3 /app/project/static/sounds/alphorn_01.mp3
sounds/alphorn_12.mp3 /app/project/static/sounds/alphorn_12.mp3
sounds/alphorn_02.mp3 /app/project/static/sounds/alphorn_02.mp3
sounds/alphorn_09.mp3 /app/project/static/sounds/alphorn_09.mp3
sounds/alphorn_04.mp3 /app/project/static/sounds/alphorn_04.mp3
sounds/alphorn_15.mp3 /app/project/static/sounds/alphorn_15.mp3
sounds/hirtenhorn_07.mp3 /app/project/static/sounds/hirtenhorn_07.mp3
sounds/alphorn_08.mp3 /app/project/static/sounds/alphorn_08.mp3
sounds/alphorn_03.mp3 /app/project/static/sounds/alphorn_03.mp3
sounds/hirtenhorn_02.mp3 /app/project/static/sounds/hirtenhorn_02.mp3
sounds/alphorn_10.mp3 /app/project/static/sounds/alphorn_10.mp3
sounds/hirtenhorn_01.mp3 /app/project/static/sounds/hirtenhorn_01.mp3
sounds/hirtenhorn_06.mp3 /app/project/static/sounds/hirtenhorn_06.mp3
sounds/alphorn_07.mp3 /app/project/static/sounds/alphorn_07.mp3
sounds/temperiert_nr_11.mp3 /app/project/static/sounds/temperiert_nr_11.mp3
sounds/hirtenhorn_08.mp3 /app/project/static/sounds/hirtenhorn_08.mp3
sounds/naturton_nr_11.mp3 /app/project/static/sounds/naturton_nr_11.mp3
sounds/alphorn_16.mp3 /app/project/static/sounds/alphorn_16.mp3
sounds/hirtenhorn_05.mp3 /app/project/static/sounds/hirtenhorn_05.mp3
sounds/hirtenhorn_03.mp3 /app/project/static/sounds/hirtenhorn_03.mp3
sounds/alphorn_06.mp3 /app/project/static/sounds/alphorn_06.mp3

django.contrib.staticfiles.finders.AppDirectoriesFinder (150 Dateien)

Pfad Ort
modeltranslation/css/tabbed_translation_fields.css /usr/local/lib/python3.11/site-packages/modeltranslation/static/modeltranslation/css/tabbed_translation_fields.css
modeltranslation/js/clearable_inputs.js /usr/local/lib/python3.11/site-packages/modeltranslation/static/modeltranslation/js/clearable_inputs.js
modeltranslation/js/tabbed_translation_fields.js /usr/local/lib/python3.11/site-packages/modeltranslation/static/modeltranslation/js/tabbed_translation_fields.js
modeltranslation/js/force_jquery.js /usr/local/lib/python3.11/site-packages/modeltranslation/static/modeltranslation/js/force_jquery.js
admin/css/autocomplete.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/autocomplete.css
admin/css/responsive.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/responsive.css
admin/css/widgets.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/widgets.css
admin/css/changelists.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/changelists.css
admin/css/dark_mode.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/dark_mode.css
admin/css/responsive_rtl.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css
admin/css/nav_sidebar.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css
admin/css/dashboard.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/dashboard.css
admin/css/forms.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/forms.css
admin/css/rtl.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/rtl.css
admin/css/login.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/login.css
admin/css/base.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/base.css
admin/css/vendor/select2/select2.min.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css
admin/css/vendor/select2/select2.css /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css
admin/css/vendor/select2/LICENSE-SELECT2.md /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md
admin/img/icon-clock.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg
admin/img/sorting-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg
admin/img/icon-alert.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg
admin/img/icon-changelink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg
admin/img/selector-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg
admin/img/calendar-icons.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg
admin/img/tooltag-arrowright.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg
admin/img/inline-delete.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg
admin/img/icon-yes.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg
admin/img/icon-unknown-alt.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg
admin/img/icon-viewlink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg
admin/img/search.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/search.svg
admin/img/icon-deletelink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg
admin/img/README.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/README.txt
admin/img/LICENSE /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/LICENSE
admin/img/icon-calendar.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg
admin/img/tooltag-add.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg
admin/img/icon-unknown.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg
admin/img/icon-addlink.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg
admin/img/icon-no.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/icon-no.svg
admin/img/gis/move_vertex_off.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg
admin/img/gis/move_vertex_on.svg /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg
admin/js/SelectBox.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/SelectBox.js
admin/js/jquery.init.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/jquery.init.js
admin/js/inlines.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/inlines.js
admin/js/collapse.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/collapse.js
admin/js/filters.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/filters.js
admin/js/change_form.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/change_form.js
admin/js/autocomplete.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/autocomplete.js
admin/js/nav_sidebar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js
admin/js/popup_response.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/popup_response.js
admin/js/SelectFilter2.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js
admin/js/actions.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/actions.js
admin/js/core.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/core.js
admin/js/cancel.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/cancel.js
admin/js/prepopulate.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/prepopulate.js
admin/js/urlify.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/urlify.js
admin/js/calendar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/calendar.js
admin/js/prepopulate_init.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js
admin/js/theme.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/theme.js
admin/js/admin/DateTimeShortcuts.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js
admin/js/admin/RelatedObjectLookups.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
admin/js/vendor/select2/select2.full.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js
admin/js/vendor/select2/select2.full.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js
admin/js/vendor/select2/LICENSE.md /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md
admin/js/vendor/select2/i18n/zh-CN.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js
admin/js/vendor/select2/i18n/sr-Cyrl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js
admin/js/vendor/select2/i18n/uk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js
admin/js/vendor/select2/i18n/ar.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js
admin/js/vendor/select2/i18n/ka.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js
admin/js/vendor/select2/i18n/bn.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js
admin/js/vendor/select2/i18n/pt.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js
admin/js/vendor/select2/i18n/hi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js
admin/js/vendor/select2/i18n/dsb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js
admin/js/vendor/select2/i18n/bs.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js
admin/js/vendor/select2/i18n/ru.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js
admin/js/vendor/select2/i18n/ms.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js
admin/js/vendor/select2/i18n/et.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js
admin/js/vendor/select2/i18n/sl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js
admin/js/vendor/select2/i18n/he.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js
admin/js/vendor/select2/i18n/is.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js
admin/js/vendor/select2/i18n/cs.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js
admin/js/vendor/select2/i18n/sq.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js
admin/js/vendor/select2/i18n/sv.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js
admin/js/vendor/select2/i18n/ne.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js
admin/js/vendor/select2/i18n/ko.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js
admin/js/vendor/select2/i18n/vi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js
admin/js/vendor/select2/i18n/ca.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js
admin/js/vendor/select2/i18n/id.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js
admin/js/vendor/select2/i18n/nb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js
admin/js/vendor/select2/i18n/hr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js
admin/js/vendor/select2/i18n/af.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js
admin/js/vendor/select2/i18n/de.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js
admin/js/vendor/select2/i18n/mk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js
admin/js/vendor/select2/i18n/hy.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js
admin/js/vendor/select2/i18n/it.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js
admin/js/vendor/select2/i18n/hu.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js
admin/js/vendor/select2/i18n/ja.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js
admin/js/vendor/select2/i18n/sk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js
admin/js/vendor/select2/i18n/hsb.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js
admin/js/vendor/select2/i18n/ro.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js
admin/js/vendor/select2/i18n/en.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js
admin/js/vendor/select2/i18n/el.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js
admin/js/vendor/select2/i18n/fa.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js
admin/js/vendor/select2/i18n/pt-BR.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js
admin/js/vendor/select2/i18n/da.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js
admin/js/vendor/select2/i18n/sr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js
admin/js/vendor/select2/i18n/ps.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js
admin/js/vendor/select2/i18n/lt.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js
admin/js/vendor/select2/i18n/az.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js
admin/js/vendor/select2/i18n/fr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js
admin/js/vendor/select2/i18n/fi.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js
admin/js/vendor/select2/i18n/tk.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js
admin/js/vendor/select2/i18n/th.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js
admin/js/vendor/select2/i18n/gl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js
admin/js/vendor/select2/i18n/eu.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js
admin/js/vendor/select2/i18n/es.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js
admin/js/vendor/select2/i18n/km.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js
admin/js/vendor/select2/i18n/bg.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js
admin/js/vendor/select2/i18n/lv.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js
admin/js/vendor/select2/i18n/zh-TW.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js
admin/js/vendor/select2/i18n/pl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js
admin/js/vendor/select2/i18n/tr.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js
admin/js/vendor/select2/i18n/nl.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js
admin/js/vendor/xregexp/xregexp.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js
admin/js/vendor/xregexp/LICENSE.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt
admin/js/vendor/xregexp/xregexp.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js
admin/js/vendor/jquery/jquery.min.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js
admin/js/vendor/jquery/jquery.js /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js
admin/js/vendor/jquery/LICENSE.txt /usr/local/lib/python3.11/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt
django_extensions/css/jquery.autocomplete.css /usr/local/lib/python3.11/site-packages/django_extensions/static/django_extensions/css/jquery.autocomplete.css
django_extensions/img/indicator.gif /usr/local/lib/python3.11/site-packages/django_extensions/static/django_extensions/img/indicator.gif
django_extensions/js/jquery.ajaxQueue.js /usr/local/lib/python3.11/site-packages/django_extensions/static/django_extensions/js/jquery.ajaxQueue.js
django_extensions/js/jquery.autocomplete.js /usr/local/lib/python3.11/site-packages/django_extensions/static/django_extensions/js/jquery.autocomplete.js
django_extensions/js/jquery.bgiframe.js /usr/local/lib/python3.11/site-packages/django_extensions/static/django_extensions/js/jquery.bgiframe.js
markdownx/admin/css/markdownx.css /usr/local/lib/python3.11/site-packages/markdownx/static/markdownx/admin/css/markdownx.css
markdownx/admin/css/markdownx.min.css /usr/local/lib/python3.11/site-packages/markdownx/static/markdownx/admin/css/markdownx.min.css
markdownx/js/markdownx.min.js /usr/local/lib/python3.11/site-packages/markdownx/static/markdownx/js/markdownx.min.js
markdownx/js/markdownx.js /usr/local/lib/python3.11/site-packages/markdownx/static/markdownx/js/markdownx.js
django-htmx.js /usr/local/lib/python3.11/site-packages/django_htmx/static/django-htmx.js
admin/rosetta/css/rosetta.css /usr/local/lib/python3.11/site-packages/rosetta/static/admin/rosetta/css/rosetta.css
admin/rosetta/js/rosetta.js /usr/local/lib/python3.11/site-packages/rosetta/static/admin/rosetta/js/rosetta.js
admin/img/icon_searchbox_rosetta.png /usr/local/lib/python3.11/site-packages/rosetta/static/admin/img/icon_searchbox_rosetta.png
notifications/notify.js /usr/local/lib/python3.11/site-packages/notifications/static/notifications/notify.js
debug_toolbar/css/toolbar.css /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/css/toolbar.css
debug_toolbar/css/print.css /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/css/print.css
debug_toolbar/js/utils.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/utils.js
debug_toolbar/js/toolbar.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/toolbar.js
debug_toolbar/js/history.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/history.js
debug_toolbar/js/timer.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/timer.js
debug_toolbar/js/redirect.js /usr/local/lib/python3.11/site-packages/debug_toolbar/static/debug_toolbar/js/redirect.js

Templates (6 gerendert)

Template-Pfade

  1. /app/project/templates
  2. /usr/local/lib/python3.11/site-packages/django/forms/templates

Templates

step/step_home.html
/app/project/lms_tales/templates/step/step_home.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>}
lms_tales_base.html
/app/project/templates/lms_tales_base.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>}
base.html
/app/project/templates/base.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>}
components/header.html
/app/project/templates/components/header.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>} {'block': <Block Node: header. Contents: [<TextNode: '\n '>, <IncludeNode: template=<FilterExpression '"components/header.html"'>>, <TextNode: '\n '>]>}
components/sidebar-navigation.html
/app/project/templates/components/sidebar-navigation.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>} {'block': <Block Node: sidebar-nav. Contents: [<TextNode: '\n <nav id="sid'>, <django.template.library.SimpleNode object at 0x7910c05bab10>, <TextNode: '>\n '>, <django.templatetags.i18n.TranslateNode object at 0x7910c05e2c50>, <TextNode: '</span>\n '>, <IfNode>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7910c05a5450>, <TextNode: '>\n '>, <django.templatetags.i18n.TranslateNode object at 0x7910c05a5790>, <TextNode: '</span>\n '>, <Block Node: navigation. Contents: [<TextNode: '\n '>]>, <TextNode: '\n </div>\n '>]>} {'block': <Block Node: navigation. Contents: [<TextNode: '\n '>, <IncludeNode: template=<FilterExpression '"components/sidebar-navigation.html"'>>, <TextNode: '\n'>]>}
step/step-title.html
/app/project/lms_tales/templates/step/step-title.html
Context zeigen {'False': False, 'None': None, 'True': True} {'CI_COMMIT_SHORT_SHA': '484e3ae2', 'CI_COMMIT_TAG': '', 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'ERROR': 40, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30}, 'DEPLOY_ENV': 'staging', 'LANGUAGES': '<<languages>>', 'LANGUAGE_BIDI': False, 'LANGUAGE_CODE': 'de', 'MEDIA_URL': '/media/', 'RELEASE_NAME': '', 'STATIC_URL': '/static/', 'TIME_ZONE': 'Europe/Zurich', 'csrf_token': '<SimpleLazyObject: ' "'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>", 'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>), 'request': '<<request>>', 'user': '<SimpleLazyObject: <SimpleLazyObject: ' '<django.contrib.auth.models.AnonymousUser object at ' '0x7910c06b38d0>>>'} {'active_courseruns': [], 'active_courserunsteps': [], 'active_language_available': True, 'available_languages': [('de', 'Deutsch'), ('en', 'Englisch')], 'course': <TalesCourse: Datenschutz>, 'course_contact': '', 'files': '<<queryset of lms_tales.TalesStepFileNew>>', 'object': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'talesstep': <TalesStep: Grenzüberschreitende Bekanntgabe von Personendaten>, 'view': <lms_tales.views.step_views.StepDetails object at 0x7910c05a3890>} {'block': <Block Node: breadcrumb-bar. Contents: [<TextNode: '\n <div id="tit'>, <Block Node: sidebar-arrow. Contents: [<TextNode: '\n <div'>, <django.template.library.SimpleNode object at 0x7910c05dfe50>, <TextNode: '\n '>, <django.templatetags.i18n.TranslateNode object at 0x7910c069ee90>, <TextNode: '</span>\n '>]>, <TextNode: '\n <div cla'>, <Block Node: breadcrumb. Contents: [<TextNode: '\n '>]>, <TextNode: '\n '>]>} {'block': <Block Node: breadcrumb. Contents: [<TextNode: '\n '>, <IncludeNode: template=<FilterExpression '"step/step-title.html"'>>, <TextNode: '\n'>]>}

Context-Prozessoren

django.template.context_processors.csrf
Context zeigen {'csrf_token': <SimpleLazyObject: 'fBYipm6F9yGAVX2GDSVY3hn07e5zAqlLzdLTFJc8Fb3Yml10fsM9AyZGzZCO8F39'>}
django.template.context_processors.debug
Context zeigen {}
django.template.context_processors.request
Context zeigen {'request': <ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>}
django.contrib.auth.context_processors.auth
Context zeigen {'user': <SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>, 'perms': PermWrapper(<SimpleLazyObject: <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7910c06b38d0>>>)}
django.template.context_processors.i18n
Context zeigen {'LANGUAGES': (('de', 'Deutsch'), ('en', 'Englisch'), ('fr', 'Franzoesisch')), 'LANGUAGE_CODE': 'de', 'LANGUAGE_BIDI': False}
django.template.context_processors.media
Context zeigen {'MEDIA_URL': '/media/'}
django.template.context_processors.static
Context zeigen {'STATIC_URL': '/static/'}
django.template.context_processors.tz
Context zeigen {'TIME_ZONE': 'Europe/Zurich'}
django.contrib.messages.context_processors.messages
Context zeigen {'messages': <FallbackStorage: request=<ASGIRequest: GET '/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526'>>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}}
utils.context_processors.ci_info
Context zeigen {'CI_COMMIT_TAG': '', 'CI_COMMIT_SHORT_SHA': '484e3ae2', 'RELEASE_NAME': '', 'DEPLOY_ENV': 'staging'}

Cache-Aufrufe von 1 Backend

Zusammenfassung

Aufrufe gesamt Zeit gesamt Cache erfolgreich Cache verfehlt
52 23,078542668372393 ms 162 0

Befehle

add get set get_or_set touch delete clear get_many set_many delete_many has_key incr decr incr_version decr_version
0 4 1 0 0 0 0 33 14 0 0 0 0 0 0

Aufrufe

Zeit (ms) Typ Argumente Schlüsselwort-Argumente Backend
0,7611 get_many (dict_keys(['b5ac959681ff06eff632d25a5961a4d3cad09b42', '542c27005f4e84288827ce70a7d49bc73324a5e7', '887f8247d0ff979264c73b069f790024b2aa98e1', 'a2cec6efb2cb51d9fcdc73ec65d0d02848d3205f', 'af167bf678e72a9b2a64d8869d420b8d25e96148', 'f2b266a5acd7f191551fca80dea8475d456a300c', 'e5890f0f95e54c95fc7d85ffd3cd8f5079a384eb', '7d22fa9ec7aaf50b239b17bb4529f27be72f4b3d', 'fab86eaeb6f68c1bd14e3c42d6a32fc63fe5c10b', '1671d58e08fb6227d160e4add3baac34f778006f', '5634047d837b3106d3997f0611a298a16f6754cb', '38c0c9db04f183fb89086db2a3a02d20d5c1cbda', '33cd0b10f8c2fd53802b0948820b8b58da6bb27c', 'dbdc4e6f3de4931fbb7e39044291d87c49a581a7', 'bf555e2c224baeeac5838ee69c053900ce037b1d', '452aaa2adbf5d826d715538ebfd87013a599bacd', '5ef73f3d610667d7836abd847979ad8d02582140', '28b4f1c78186b497fc0611b76d5609a36a170804', 'acd1c2a120952e0445e89d8a2cc8faa99cc73454', '3fdb5b63faddfa01f5ebd09a89b74c9b3ec742bf', 'bc41695a90f568da6f9c44d14dbb30130bea76db', '6d6bdc7046f6d1410bd41d09cd570831af97fd31', '2288e6f142e998339c6d4985913358f76533a29e', 'f6e1a4d48790db63f8cb8c5653192a74ca00d34a', 'e19dd8b0e8a705c5914b55bbeb94d01f20e5368e', 'bf2a5aa392ac965fc14b9cc5fc8fcce588b2cf57', '9de26d60cec57eaab1ec19a62cf772073ae0e30f', '138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', 'd890e5bc0b77c02793036efa76f50a25770a52a7', 'd00779073776b2287204a6fa5336494275fc73d5', '76e323efd8711853e13c9f7cf976845908364eb2', 'e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', 'd144abeb0db81d5dfea390a27c6d616aa1783141', 'b33158a576dd24b41063563867ce3f9044eb1acf', 'a78875b90f65061214a7b7eaa1a66176310060a1', 'd1accdb7a5e2af4fd7d0fc7e34b048f555cd65a0', '0b7593abe25ebbf222c98d71b199a17877e17478', 'da8bff0e0d25742e869a69b7508c37ccde5f8f33', '0098dff618e4e4ce8b226fb3dcd5d9042e69eb75', '8e3f73e6feaebee5ffbc4479f566917f08b4bbca', '5c50c6b3292213266ec6601a46b9ff857efec10a', '9ba11033f2e0b0478fa7ea0cfcde90c7ea880b1b', '810de96c2cc412e55eb18a19206c9b4f4879ec68', 'da75293c9ac4e9ae833da9fecd1ab668d629ce49', 'e4392949c2513e35c4d436a230e913efc13e4556', '9a3409722cd89bb29bc78c6bd4bca2cc2aad3e96', '5bd1ef7c64b457cbb725c42d97969db3ebe85f66', 'f3d241856fbbba355385868203e06010b65b882e', '1511f7c2f0ac6c43b58dfa27858c3d8561280f80', 'e2a6b84fc2a64f0ca59dd6e95fe6e1a5f3850ad5', 'b72f66480a030f14a954ea7eeb482d64fa1da084', '9e3a2b98ae55fa975425fa81a4e6e13342147b8a', '0e90ed3afbea5b3254d013a2b352642aaa2ce984', '2b2eb1f58e7ba0ac1ae04f9e9c95bde41f64e3fc', 'f38ac9d1db097d95b5062273e0a941d2da616361', 'cf84cec99a10af4507238b31bfce2171063a0c1d', 'c9b253ceb06244b30c24377ae68ae44353b4b3c4', '946a725506b18b4afe14d273540101238984908d', 'd34b8ed7c3bb0d3a712a5e42065744014bfe1542']),) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(40)
  self.collect_invalidations()

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in collect_invalidations(52)
  for cache_key, timestamp in cache.get_many(

0,3811 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', 'b2ef04dfa231757495495c639673b7648a49a9cf'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(20)
  self.object = self.get_object()

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get_object(53)
  obj = queryset.get()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,5544 set_many ({'b2ef04dfa231757495495c639673b7648a49a9cf': (1736881648.1196969, [[(1526, datetime.datetime(2023, 8, 2, 8, 0, 32, 389319, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 672959, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 625005, tzinfo=datetime.timezone.utc), False, 'Cross-border disclosure of personal data', 'Grenzüberschreitende Bekanntgabe von Personendaten', 'Cross-border disclosure of personal data', None, '', None, None, None, 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', 'In diesem Artikel lernen Sie die Bestimmungen für die grenzüberschreitende Bekanntgabe von Personendaten kennen.', 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', None, '', 'cross-border-disclosure-of-personal-data', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', 'Wenn Daten aus der Schweiz in andere Länder bekannt gegeben werden, gibt es einige besondere Bestimmungen zu beachten.\r\n{.lead}\r\n\r\nDatenbearbeitungen in der Schweiz und in den meisten europäischen Staaten unterstehen klaren, im weltweiten Vergleich strengen datenschutzrechtlichen Bestimmungen. Werden Personendaten aus der Schweiz in Länder weitergegeben, in denen kein entsprechendes Datenschutzniveau gilt, dann besteht die Gefahr, dass diese Daten in einer Weise genutzt werden, die nach dem schweizerischen oder europäischen Datenschutzrecht nicht zulässig ist. Damit besteht für die betroffenen Personen die Gefahr von Grundrechtsverletzungen.\r\n \r\nAus diesem Grund legt § 23 des Informations- und Datenschutzgesetzes (IDG) fest, dass Personendaten nur in jene Staaten bekanntgegeben werden dürfen, die der Europaratskonvention 108, künftig 108+, beigetreten sind, also in Staaten, die damit einen zum schweizerischen Datenschutzrecht vergleichbaren Schutz für die Grundrechte der betroffenen Personen gewährleisten. In andere Staaten dürfen Personendaten nur dann bekannt gegeben werden, wenn deren Gesetzgebung ebenfalls einen angemessenen Schutz sicherstellt oder wenn durch vertragliche Vereinbarungen zwischen dem datenliefernden öffentlichen Organ und den Empfängerinnen oder Empfängern ein angemessener Schutz garantiert wird. Welche Staaten durch Gesetzgebung einen angemessenen Schutz gewährleisten, hält eine [Liste](https://www.fedlex.admin.ch/eli/cc/2022/568/de#annex_1) des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (oder künftig des Bundesrates) fest.\r\n \r\nBeim Datentransfer ins Ausland muss unterschieden werden zwischen der Übergabe von Personendaten vom verantwortlichen Organ an eine Auftragsdatenbearbeiterin (§ 7 IDG) einerseits und der Datenbekanntgabe in die eigene Verantwortung der Empfängerin andererseits. § 23 IDG gilt für den zweiten Fall, also bei der Bekanntgabe von Personendaten an eine Empfängerin, die sie dann zu einem eigenen Zweck und in eigener Verantwortung bearbeiten darf. \r\nDer erste Fall, die Auftragsbearbeitung, stellt keine Bekanntgabe im Sinne des IDG dar und damit gilt grundsätzlich auch § 23 IDG nicht. Denn die Auftragsdatenbearbeiterin darf die Daten zu dem Zweck bearbeiten, der vom auftraggebenden öffentlichen Organ vorgegeben ist – und dieses öffentliche Organ bleibt gegenüber den betroffenen Personen verantwortlich, auch für das, was die Auftragsdatenbearbeiterin tut und tun sollte, aber nicht tut. Damit werden die betroffenen Personen nicht schlechter gestellt, als wenn die Auftragsdatenbearbeitung in der Schweiz stattfinden würde. Bei der Übergabe der Daten an eine Auftragsdatenbearbeiterin im Ausland werden die Daten also zwar in einem anderen Land mit allenfalls weniger strenger Gesetzgebung bearbeitet, aber grundsätzlich dennoch nur nach dem Datenschutzniveau, welches auch für die Datenbearbeitung durch das bekanntgebende öffentliche Organ gilt. Auch wenn § 23 IDG auf die Übermittlung an eine Auftragsdatenbearbeiterin im Ausland nicht direkt anwendbar ist, müssen die Risiken der Datenübermittlung ins Ausland. beurteilt werden. Dazu sind die Risikoabwägungen analog zu den Kriterien von § 23 IDG hilfreich und können mit entsprechenden Schutzmassnahmen, zum Beispiel mit einer Verschlüsselung der Daten, vermieden oder auf ein tragbares Mass verringert werden.\r\n\r\n<br>\r\n##Bekanntgabe von Personendaten in die USA\r\nFür die Bekanntgabe von Personendaten in die USA bestanden in der Vergangenheit zwei Abkommen zwischen der EU-Kommission und den USA bzw. der Schweiz und den USA: das sogenannte «Safe Harbor»-Abkommen und das «Privacy Shield»-Framework. Der Europäische Gerichtshof (EuGH) hat allerdings bezüglich beider Abkommen festgestellt, dass sie trotz aller Bemühungen kein angemessenes Datenschutzniveau aus Sicht der EU schaffen. Die EuGH-Urteile binden die Schweiz zwar nicht, aber die Schweiz hat übereinstimmende Abkommen mit den USA abgeschlossen und muss wiederum auch gegenüber der EU auch ein angemessenes Datenschutzniveau aufweisen. Deshalb haben diese Urteile («Schrems-I und II») faktisch durchaus Auswirkungen auf die Zulässigkeit des Datentransfers von der Schweiz in die USA. Hier wird zu beobachten sein, wie sich Rechtssetzung und Rechtsprechung in Zukunft weiterentwickeln.', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 10, 'published', False, None, None, None, None, 173)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(20)
  self.object = self.get_object()

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get_object(53)
  obj = queryset.get()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,4147 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', 'b2ef04dfa231757495495c639673b7648a49a9cf'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(108)
  self.object = self.get_object()

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get_object(53)
  obj = queryset.get()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3793 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', 'eeff524d4b513353eef8b8668cd9e68894f1c052'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(63)
  if len(step_files_new) == 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3469 set_many ({'eeff524d4b513353eef8b8668cd9e68894f1c052': (1736881648.1275291, [])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(63)
  if len(step_files_new) == 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,3685 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', 'eeff524d4b513353eef8b8668cd9e68894f1c052'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3744 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', '82375774d2949ea769e8bc97dd85447e055a43cb'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3375 set_many ({'82375774d2949ea769e8bc97dd85447e055a43cb': (1736881648.1334448, [])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,3397 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', '5eecd0f38fa292f31831dc42904a506fba490351'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3311 set_many ({'5eecd0f38fa292f31831dc42904a506fba490351': (1736881648.137612, [])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(69)
  if len(step_files_new) > 0:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,4397 get_many (['76e323efd8711853e13c9f7cf976845908364eb2', '0106b0991d9f2003fccdfac98cc569a89586246b'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(72)
  context["course"] = self.object.chapter.course

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,4232 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', 'fd55796fe444e75da9618786e4ad78ad4284dde8'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(64)
  response = function(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in view(104)
  return self.dispatch(request, *args, **kwargs)

/app/project/lms_tales/views/mixins.py in dispatch(31)
  return super().dispatch(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/base.py in dispatch(143)
  return handler(request, *args, **kwargs)

/app/project/lms_tales/views/step_views.py in get(36)
  response = super().get(request, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py in get(109)
  context = self.get_context_data(object=self.object)

/app/project/lms_tales/views/step_views.py in get_context_data(72)
  context["course"] = self.object.chapter.course

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2898 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(314)
  match = condition.eval(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in eval(877)
  return self.value.resolve(context, ignore_failures=True)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2435 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2775 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2624 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2560 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2520 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2450 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '312c357d2eed306581bb334378808fbccf7019ea', '06d263d60d926105c9c3152877a08c48b4d0b182'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(890)
  current = getattr(current, bit)

/app/project/lms_tales/models.py in meta(83)
  + ", ".join([author.name for author in self.get_course().authors.all()]),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,4350 get ('waffle:4.1.0a156ed0e9d07cd12e770c8dca0575feb',) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/waffle/templatetags/waffle_tags.py in render(36)
  if self.condition(context.get('request', None), name):

/usr/local/lib/python3.11/site-packages/waffle/__init__.py in flag_is_active(19)
  flag = get_waffle_flag_model().get(flag_name)

/usr/local/lib/python3.11/site-packages/waffle/models.py in get(52)
  cached = cache.get(cache_key)

0,3528 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '2adb532da1e33ed90d19795feaf8a36da5bb611d'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3581 set_many ({'2adb532da1e33ed90d19795feaf8a36da5bb611d': (1736881648.348072, [[(171, datetime.datetime(2020, 12, 1, 13, 52, 5, 983642, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 21, 10, 32, 28, 149049, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 21, 10, 32, 28, 149055, tzinfo=datetime.timezone.utc), False, 'Fundamentals', 'Grundlagen', 'Fundamentals', None, 'fundamentals', 14662, 'published', 29), (172, datetime.datetime(2020, 12, 1, 13, 52, 17, 340184, tzinfo=datetime.timezone.utc), datetime.datetime(2022, 5, 5, 8, 47, 38, 75493, tzinfo=datetime.timezone.utc), datetime.datetime(2022, 5, 5, 8, 47, 38, 50364, tzinfo=datetime.timezone.utc), False, 'Controllers', 'Controller', 'Controllers', None, 'controllers', 14663, 'published', 29), (173, datetime.datetime(2020, 12, 1, 13, 52, 26, 385162, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 26, 15, 11, 51, 343314, tzinfo=datetime.timezone.utc), datetime.datetime(2023, 8, 17, 8, 19, 56, tzinfo=datetime.timezone.utc), False, 'Bekanntgabe von Personendaten', 'Bekanntgabe von Personendaten', 'Disclosure of personal data', None, 'bekanntgabe-von-personendaten', 14664, 'published', 29), (174, datetime.datetime(2020, 12, 1, 13, 52, 37, 278537, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 26, 15, 51, 32, 807993, tzinfo=datetime.timezone.utc), datetime.datetime(2020, 12, 1, 13, 52, 37, tzinfo=datetime.timezone.utc), False, 'Rechte der betroffenen Personen', 'Rechte der betroffenen Personen', 'Rights of data subjects', None, 'rechte-der-betroffenen-personen', 14665, 'published', 29)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,4895 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', 'e991a8391c95c7beed56e916a4f3255b7c026c41'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,9394 set_many ({'e991a8391c95c7beed56e916a4f3255b7c026c41': (1736881648.356729, [[(870, datetime.datetime(2020, 12, 1, 13, 53, 34, 71249, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 26, 48, 223520, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 26, 48, 173021, tzinfo=datetime.timezone.utc), False, 'Data protection is needed everywhere', 'Datenschutz braucht es überall', 'Data protection is needed everywhere', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin use examples to introduce the open course "Data Protection".', 'In diesem Video führen Danielle Kaufmann und Beat Rudin anhand von Beispielen in den offenen Kurs «Datenschutz» ein.', 'In this video, Danielle Kaufmann and Beat Rudin use examples to introduce the open course "Data Protection".', None, '', 'data-protection-is-needed-everywhere', 'We constantly encounter the topic of data protection: Be it in everyday life, in private or at work.\r\n{.lead} \r\n\r\nIn this video, the importance of data protection will be illustrated using four different scenarios. You will also be introduced to Danielle Kaufmann and Beat Rudin, who will guide you through the course.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/637527905?h=9f8ffade39&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-1_datenschutz.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Das Thema Datenschutz begegnet einem ständig. Sei es im Alltag, im Privaten oder bei der Arbeit.\r\n{.lead} \r\n \r\nIn diesem Video wird die Relevanz von Datenschutz anhand von vier Situationen aufgezeigt. Ausserdem lernen Sie Danielle Kaufmann und Beat Rudin kennen, die Sie durch diesen Kurs führen werden.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/637527905?h=9f8ffade39&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-1_datenschutz.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'We constantly encounter the topic of data protection: Be it in everyday life, in private or at work.\r\n{.lead} \r\n\r\nIn this video, the importance of data protection will be illustrated using four different scenarios. You will also be introduced to Danielle Kaufmann and Beat Rudin, who will guide you through the course.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/637527905?h=9f8ffade39&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-1_datenschutz.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '5 minutes', 0, 'published', False, None, None, None, None, 171), (871, datetime.datetime(2020, 12, 1, 13, 54, 10, 369231, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 27, 29, 279378, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 27, 29, 195921, tzinfo=datetime.timezone.utc), False, 'When does data protection apply?', 'Wann ist Datenschutz anwendbar?', 'When does data protection apply?', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin explain when data protection is applicable.', 'In diesem Video erklären Danielle Kaufmann und Beat Rudin, wann Datenschutz anwendbar ist.', 'In this video, Danielle Kaufmann and Beat Rudin explain when data protection is applicable.', None, '', 'when-does-data-protection-apply', 'Data protection is essential. But what are the criteria for it to be applicable?\r\n{.lead}\r\n\r\nAs we saw in the intro video, data protection plays an important role in many different areas. In this video, we explain which criteria must be met for data protection law to apply.\r\n\r\n\r\n<br>\r\n \r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638557970?h=d91035511e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-2_wann_ist_datenschutz_anwendbar.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Datenschutz ist essentiell. Doch was sind die Kriterien, damit er anwendbar wird?\r\n{.lead}\r\n\r\nWie wir im Introvideo gesehen haben, spielt Datenschutz in vielen verschiedenen Bereichen eine wichtige Rolle. Im Video erklären wir Ihnen, welche Kriterien gegeben sein müssen, damit Datenschutzrecht überhaupt anwendbar wird.\r\n\r\n<br>\r\n \r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638557970?h=d91035511e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-2_wann_ist_datenschutz_anwendbar.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Data protection is essential. But what are the criteria for it to be applicable?\r\n{.lead}\r\n\r\nAs we saw in the intro video, data protection plays an important role in many different areas. In this video, we explain which criteria must be met for data protection law to apply.\r\n\r\n\r\n<br>\r\n \r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638557970?h=d91035511e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-2_wann_ist_datenschutz_anwendbar.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '6 minutes', 1, 'published', False, None, None, None, None, 171), (872, datetime.datetime(2020, 12, 1, 13, 54, 48, 880177, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 27, 46, 195341, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 27, 46, 138734, tzinfo=datetime.timezone.utc), False, 'When do data protection laws apply', 'Wann kommt Datenschutzrecht zum Zug?', 'When do data protection laws apply', None, '', None, None, None, 'This video quiz of the open course "Data Protection" tests your knowledge of the principles of data protection.', 'Dieses Video-Quiz des offenen Kurses «Datenschutz» prüft Ihr Wissen über die Grundsätze des Datenschutzes.', 'This video quiz of the open course "Data Protection" tests your knowledge of the principles of data protection.', None, '', 'when-do-data-protection-laws-apply', 'So far, you have learned some fundamental information about data protection. Now you will have the opportunity to apply the knowledge you have acquired.\r\n{.lead}\r\n \r\nHave you understood what personal data is? Why do we talk about direct and indirect identifiability of persons? And what are the criteria again for data protection law to apply?\r\n<br></br>\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=320" width="842" height="731" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 1.3_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Bis jetzt haben Sie bereits grundlegende Dinge über Datenschutz gelernt und werden nun die Möglichkeit haben, das bisher angeeignete Wissen anzuwenden.\r\n{.lead}\r\n \r\nHaben Sie verstanden, was Personendaten sind? Weshalb die Rede von direkter und indirekter Bestimmbarkeit von Personen ist? Und was sind noch einmal die Kriterien, damit das Datenschutzrecht zum Zug kommt?\r\n<br></br>\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=294" width="958" height="866" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 1.3"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'So far, you have learned some fundamental information about data protection. Now you will have the opportunity to apply the knowledge you have acquired.\r\n{.lead}\r\n \r\nHave you understood what personal data is? Why do we talk about direct and indirect identifiability of persons? And what are the criteria again for data protection law to apply?\r\n<br></br>\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=320" width="842" height="731" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 1.3_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TQ', '5 minutes', 2, 'published', False, None, None, None, None, 171), (873, datetime.datetime(2020, 12, 1, 13, 55, 39, 397313, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 17, 31, 396459, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 17, 31, 341195, tzinfo=datetime.timezone.utc), False, 'Anonymized data that turns back into personal data', 'Anonymisierte Daten, die wieder zu Personendaten werden', 'Anonymized data that turns back into personal data', None, '', None, None, None, 'In this article, you will learn how anonymized data and personal data are related.', 'In diesem Artikel erfahren Sie, wie anonymisierte Daten und Personendaten zusammenhängen.', 'In this article, you will learn how anonymized data and personal data are related.', None, '', 'anonymized-data-that-turns-back-into-personal-data', 'If someone is processing personal data, data protection law applies. The opposite is also the case: if no personal data is processed, data protection law and its legal requirements do not apply. Anonymously collected Data and anonymized data is not (any longer) personal data if the reference to the individual is effectively and permanently removed. So is anonymization the easiest way to free oneself from legal obligations?\r\n{.lead}\r\n\r\nIn principle, yes. But simply removing last names, first names and dates of birth isn’t sufficient to achieve anonymization, because this does not effectively remove all references to the individual. As long as the remaining information can still be connected to the affected person, the information is still considered personal data.\r\n\r\nIn order to eliminate the reference to the person, it must be ensured that it is impossible to use the totality of the available information – together with all available context information – to identify the individual person. A statement made in 1982 about “the wife of the teacher from Lauwil...” falls under the category of personal data because only one teacher taught in Lauwil (a small municipality near Basel) in 1982 and he only had one wife.\r\n\r\nGeographical information in particular frequently carries a great deal of identifying information: the residential address alone can be used to identify a single individual in some cases. With additional information about age, number of children, size of apartment, etc., a person can be identified even if he or she lives in an apartment building. A mobile telephone movement profile without a name can also be identifying: how many people repeatedly spend both their days and nights in the same location as you, both working and living in the same place you do?\r\n\r\n\r\n<br>\r\n\r\n**So how can the reference to the person be removed?**<br>\r\n\r\nIn general, by removing all information that makes it possible to determine who the data refers to.\r\n\r\nStatistical data is often anonymous – but not always. Information about the average salary of city employees of the City of Basel in 2019 is not a matter of personal data. The same is true of data on the average earnings of primary school teachers. However, when it comes to the salary of the President of the Executive Council of the Canton of Basel-Stadt, then the personal reference is obvious: there was only one President of the Executive Council in 2019.\r\n\r\nThe more data is connected together, the more likely the affected individuals are to be identified. Here’s an example: we want to know how well the members of Basel’s Parlament represent the population of Basel. The individual statements – percentages by gender, age groups, residential district, professional category, taxable income and assets, dog ownership (for example, 26% of Grand Council members have a dog, but only 16% of the population does) – do not allow for any individuals to be identified, so they do not represent personal data. However, if the entire dataset about all 100 Grand Council members were published, it would certainly be possible to identify certain individual parliament members from a combination of information. This turns the seemingly anonymized data back into personal data.\r\n\r\n\r\n<br>\r\n**How can data be anonymized?**<br>\r\n\r\nThe answer cannot be given in general terms. Different methods – or combinations of them – can be used to achieve this goal:\r\n\r\n* Omit certain details that would allow identification. \r\n* Data from multiple people is summarized (“on average...”). \r\n* Information that may allow identification is not given “precisely”, but grouped into categories: instead of listing the exact age or income, use age categories (under 20, 20–40, 40–60, over 60) or income ranges (less than CHF 40,000, CHF 40,001–60,000, CHF 60,001–80,000, more than CHF 80,000), etc. \r\n* For percentages that could lead to identifiability (0% = no one, 100% = all), the numbers are summarized in broader terms (less than 30%, 30–40%, 40–50%, ... more than 70%). \r\n\r\n\r\nIt always matters how many individuals the specific information available applies to. It’s safest if – according to a well-known rule of thumb – the available data applies to a group of at least 20 individuals (for special personal data, to at least 50 individuals). This can be achieved\r\n\r\n* by choosing the reference value appropriately: for special personal data (e.g. health data) or data subject to professional confidentiality (e.g. tax data), data might be shown by district or city block (the entire rectangular area between four streets), whereas for “regular” personal data (e.g. age of resident), it might be shown by side of the block (the side of a street along a city block). \r\n* by disallowing the display of data where the group of relevant individuals is too small (e.g., if there are fewer than the required minimum number of tax returns in a particular city block). \r\n\r\nFinally, it must be mentioned that modern technologies (such as “big data”) are making it increasingly easy for data that has previously been anonymized to become identifiable again through combinations. Such possibilities cannot be ruled out in the future; therefore, the risk of de-anonymization or re-identification must be taken into account.', "Wenn jemand Personendaten bearbeitet, gilt das Datenschutzrecht. Im Umkehrschluss bedeutet das: Werden keine Personendaten bearbeitet, gilt das Datenschutzrecht mit seinen gesetzlichen Anforderungen nicht. Anonym erhobene oder anonymisierte Daten sind keine Personendaten (mehr), wenn der Personenbezug wirksam und endgültig entfernt ist. Ist also Anonymisierung der einfachste Weg, sich von gesetzlichen Fesseln zu befreien?\r\n{.lead}\r\n\r\nGrundsätzlich ja. Doch zur Anonymisierung reicht es nicht, einfach Vornamen, Namen und Geburtsdatum zu entfernen. Denn damit ist der Personenbezug nicht wirksam entfernt. Solange aus den verbleibenden Informationen noch auf die betroffenen Personen geschlossen werden kann, sind die Informationen immer noch Personendaten.\r\n\r\nDamit der Personenbezug beseitigt ist, muss dafür gesorgt werden, dass aus der Gesamtheit der zur Verfügung stehenden Informationen – samt verfügbaren Kontextinformationen – nicht mehr auf eine bestimmte Person geschlossen werden kann. Eine 1982 getätigte Aussage über «die Frau des Lehrers von Lauwil …» fällt unter die Kategorie der Personendaten, weil 1982 an der Schule in Lauwil (einer kleinen Baselbieter Gemeinde) nur ein Lehrer unterrichtet hat und dieser nur eine Ehefrau hatte.\r\n\r\nGerade räumliche, also raumbezogene Informationen weisen regelmässig einen hohen Identifizierungswert auf: Schon allein aus der Wohnadresse kann unter Umständen auf eine bestimmte Person geschlossen werden. Mit zusätzlichen Angaben zum Alter, zur Anzahl Kinder, zur Wohnungsgrösse usw. kann auch dann auf eine bestimmte Person geschlossen werden, wenn diese in einem Mehrfamilienhaus wohnhaft ist. Auch ein Mobilfunk-Bewegungsprofil ohne Namen ist identifizierend: Wie viele Personen halten sich tagsüber und nachts mehrheitlich am selben Ort auf wie Sie, arbeiten und wohnen folglich am selben Ort wie Sie?\r\n\r\n<br>\r\n\r\n**Wie kann also der Personenbezug entfernt werden?**<br>\r\n\r\nGrundsätzlich indem alle Angaben entfernt werden, die es erlauben zu eruieren, auf wen sich die Angaben beziehen.\r\n\r\nStatistische Angaben sind häufig anonyme Daten – aber nicht immer. Bei den Angaben über den durchschnittlichen Lohn der baselstädtischen Staatsangestellten im Jahr 2019 handelt es sich nicht mehr um Personendaten. Ebensowenig bei den Angaben darüber, was eine Primarlehrerin oder ein Primarlehrer durchschnittlich verdient. Geht es aber um den Lohn der Regierungspräsidentin oder des Regierungspräsidenten des Kantons Basel-Stadt, dann ist der Personenbezug offensichtlich – es gab im Jahr 2019 nur eine einzige Regierungspräsidentin.\r\n\r\nJe mehr Daten miteinander verknüpft sind, desto eher sind die Personen, um die es geht, bestimmbar. Nehmen wir ein Beispiel: Wir möchten wissen, wie repräsentativ die Mitglieder des baselstädtischen Parlaments die Basler Bevölkerung vertreten. Die jeweils allein stehenden Aussagen, wie gross der Anteil nach Geschlecht, nach Altersgruppen, nach Wohnquartier, nach Berufsgruppen, nach steuerbarem Einkommen und Vermögen, nach Hundehaltung usw. (z. B. 26 % der Grossratsmitglieder haben einen Hund, aber nur 16 % der Bevölkerung) ist, lassen keinen Schluss auf bestimmte Personen zu, stellen also keine Personendaten dar. Werden aber die gesamten Datensätze über alle 100 Grossratsmitglieder veröffentlicht, kann aus der Kombination der Angaben zu den einzelnen Kriterien sehr wohl auf bestimmte einzelne Parlamentsangehörige geschlossen werden. Damit werden die scheinbar anonymisierten Daten wieder zu Personendaten.\r\n\r\n<br>\r\n**Wie können Daten anonymisiert werden?**<br>\r\n\r\nDie Lösung kann nicht in genereller Art umschrieben werden. Verschiedene Wege – oder Kombinationen – führen zum Ziel:\r\n\r\n* Bestimmte, eine Identifizierung ermöglichende Angaben werden weggelassen.\r\n* Es werden Daten über mehrere Personen zusammengefasst («durchschnittlich …»).\r\n* Die Informationen, die allenfalls eine Identifikation erlauben, werden nicht «genau» wiedergegeben, sondern in Kategorien zusammengefasst: statt des genauen Alters die Zugehörigkeit zu einer Alterskategorie (unter 20-jährig, 20–40-jährig, 40–60-jährig, über 60-jährig) oder die Zusammenfassung zu einer Einkommenskategorie (weniger als 40'000 Franken, 40’001–60'000, 60’001–80'000, mehr als 80'000) usw.\r\n* Bei Prozentanteilen werden die Zahlen in der Nähe der Identifizierbarkeit (0 % = niemand, 100 % = alle) grosszügiger zusammengefasst (weniger als 30 %, 30–40 %, 40–50 %, … mehr als 70 %).\r\n\r\nEs spielt immer eine Rolle, auf wie viele Personen die konkret zur Verfügung stehenden Informationen zutreffen. Auf der sicheren Seite sind Sie – so lautet eine verbreitete Faustregel –, wenn die verfügbaren Daten auf eine Gruppe von mindestens 20 Personen (bei besonderen Personendaten auf mindestens 50 Personen) zutreffen. Die Umsetzung ist möglich,\r\n\r\n* indem die Bezugsgrösse angemessen gewählt wird: Bei besonderen Personendaten (z. B. Gesundheitsdaten) oder Daten, die einem Berufs- oder besonderen Amtsgeheimnis unterstehen (z. B. Steuerdaten), können beispielsweise pro Quartier oder pro «Wohnblock» (ein Geviert zwischen vier Strassen) «gewöhnliche» Personendaten (z. B. das Alter der Einwohnerinnen und Einwohner) vielleicht pro Wohnblockseite (die Seite einer Strasse, die einen Wohnblock begrenzt) angezeigt werden.\r\n* indem dort, wo die Gruppe der betroffenen Personen zu gering ist, die Anzeige der Daten unterdrückt wird (z. B. wenn in einem «Wohnblock» weniger als die verlangte Minimalanzahl von Steuererklärungen vorliegt).\r\n\r\nZum Schluss ist noch darauf hinzuweisen, dass moderne Technologien (wie «Big Data») es zunehmend erleichtern, vorgängig kunstgerecht anonymisierte Daten durch Kombinationen wieder identifizierend werden zu lassen. Das kann nicht für alle Zukunft ausgeschlossen werden; deshalb muss das Risiko der De-Anonymisierung oder Re-Identifikation berücksichtigt werden.", 'If someone is processing personal data, data protection law applies. The opposite is also the case: if no personal data is processed, data protection law and its legal requirements do not apply. Anonymously collected Data and anonymized data is not (any longer) personal data if the reference to the individual is effectively and permanently removed. So is anonymization the easiest way to free oneself from legal obligations?\r\n{.lead}\r\n\r\nIn principle, yes. But simply removing last names, first names and dates of birth isn’t sufficient to achieve anonymization, because this does not effectively remove all references to the individual. As long as the remaining information can still be connected to the affected person, the information is still considered personal data.\r\n\r\nIn order to eliminate the reference to the person, it must be ensured that it is impossible to use the totality of the available information – together with all available context information – to identify the individual person. A statement made in 1982 about “the wife of the teacher from Lauwil...” falls under the category of personal data because only one teacher taught in Lauwil (a small municipality near Basel) in 1982 and he only had one wife.\r\n\r\nGeographical information in particular frequently carries a great deal of identifying information: the residential address alone can be used to identify a single individual in some cases. With additional information about age, number of children, size of apartment, etc., a person can be identified even if he or she lives in an apartment building. A mobile telephone movement profile without a name can also be identifying: how many people repeatedly spend both their days and nights in the same location as you, both working and living in the same place you do?\r\n\r\n\r\n<br>\r\n\r\n**So how can the reference to the person be removed?**<br>\r\n\r\nIn general, by removing all information that makes it possible to determine who the data refers to.\r\n\r\nStatistical data is often anonymous – but not always. Information about the average salary of city employees of the City of Basel in 2019 is not a matter of personal data. The same is true of data on the average earnings of primary school teachers. However, when it comes to the salary of the President of the Executive Council of the Canton of Basel-Stadt, then the personal reference is obvious: there was only one President of the Executive Council in 2019.\r\n\r\nThe more data is connected together, the more likely the affected individuals are to be identified. Here’s an example: we want to know how well the members of Basel’s Parlament represent the population of Basel. The individual statements – percentages by gender, age groups, residential district, professional category, taxable income and assets, dog ownership (for example, 26% of Grand Council members have a dog, but only 16% of the population does) – do not allow for any individuals to be identified, so they do not represent personal data. However, if the entire dataset about all 100 Grand Council members were published, it would certainly be possible to identify certain individual parliament members from a combination of information. This turns the seemingly anonymized data back into personal data.\r\n\r\n\r\n<br>\r\n**How can data be anonymized?**<br>\r\n\r\nThe answer cannot be given in general terms. Different methods – or combinations of them – can be used to achieve this goal:\r\n\r\n* Omit certain details that would allow identification. \r\n* Data from multiple people is summarized (“on average...”). \r\n* Information that may allow identification is not given “precisely”, but grouped into categories: instead of listing the exact age or income, use age categories (under 20, 20–40, 40–60, over 60) or income ranges (less than CHF 40,000, CHF 40,001–60,000, CHF 60,001–80,000, more than CHF 80,000), etc. \r\n* For percentages that could lead to identifiability (0% = no one, 100% = all), the numbers are summarized in broader terms (less than 30%, 30–40%, 40–50%, ... more than 70%). \r\n\r\n\r\nIt always matters how many individuals the specific information available applies to. It’s safest if – according to a well-known rule of thumb – the available data applies to a group of at least 20 individuals (for special personal data, to at least 50 individuals). This can be achieved\r\n\r\n* by choosing the reference value appropriately: for special personal data (e.g. health data) or data subject to professional confidentiality (e.g. tax data), data might be shown by district or city block (the entire rectangular area between four streets), whereas for “regular” personal data (e.g. age of resident), it might be shown by side of the block (the side of a street along a city block). \r\n* by disallowing the display of data where the group of relevant individuals is too small (e.g., if there are fewer than the required minimum number of tax returns in a particular city block). \r\n\r\nFinally, it must be mentioned that modern technologies (such as “big data”) are making it increasingly easy for data that has previously been anonymized to become identifiable again through combinations. Such possibilities cannot be ruled out in the future; therefore, the risk of de-anonymization or re-identification must be taken into account.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '5 minutes', 3, 'published', False, None, None, None, None, 171), (874, datetime.datetime(2020, 12, 1, 14, 3, 11, 1102, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 17, 58, 883107, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 17, 58, 837644, tzinfo=datetime.timezone.utc), False, 'General legal sources', 'Allgemeine Rechtsquellen', 'General legal sources', None, '', None, None, None, 'In this article, you will learn about the legal sources on which data protection in Switzerland is based.', 'In diesem Artikel lernen Sie, auf welchen Rechtsquellen der Datenschutz in der Schweiz basiert.', 'In this article, you will learn about the legal sources on which data protection in Switzerland is based.', None, '', 'general-legal-sources', 'If someone is processing personal data, data protection law applies. However, the question arises as to which data protection law applies.\r\n{.lead}\r\n\r\nAs a contracting state, Switzerland is subject to the overarching Council of Europe Convention 108 or – in its modernized version – **the Council of Europe Convention 108+**. Once ratified, the requirements of the Convention 108+ apply to both the federal government and the cantons. The second legal framework is formed by **EU legislation**. Switzerland is not a member of the European Union, due to the signing and ratification of the Schengen Association Agreement, the **EU-Directive 2016/680** applies to public institutions in the areas of police and judicial cooperation. \r\n \r\nFurthermore there is the famous **General Data Protection Regulation 2016/679** (GDPR). It does not apply directly to public authorities and companies in Switzerland, but because the EU-Commission has to decide whether Switzerland has an appropriate level of data protection, the standard of the GDPR regulations must be taken into account. Additionally, the GDPR does apply directly to Swiss companies or public authorities in some cases. Namely, if they meet one of the following criteria: \r\n\r\n<br>\r\n\r\n1. They have a location in an EU country. \r\n2. They offer goods or services to persons in the EU. \r\n3. They monitor the behavior of persons in the EU. \r\n\r\n\r\n<br>\r\n##What applies in Switzerland?\r\n\r\nAnd then we come to the question of what applies in Switzerland. The federal government is responsible for creating laws where corresponding legislative powers are granted by the Swiss Constitution. An application for powers to govern data protection was made, but was rejected in the National Council in 1977. Therefore, the federal government still has no comprehensive legislative powers in the area of data protection. It is only responsible for such legislation where it can derive legislative powers from another constitutional provision.\r\n\r\nFirstly, this is the case in civil law and civil procedure law. This is why the federal government may regulate data processing for private individuals. Secondly, the federal government is responsible for regulating data processing wherever it has constitutionally assigned duties. If it is allowed to regulate social welfare (e.g. OASI or DI), then this also includes the rules for data processing by social welfare agencies. As a result, the federal government can regulate these two areas: **data processing by federal institutions and data processing by private entities** (individuals/private companies).\r\n\r\nThe federal government has done this by enacting the Federal Act on Data Protection.\r\n\r\nThe cantons are responsible for all other areas. The cantons may/must enact their own data protection laws for data processing by their cantonal and communal public institutions. At first glance, this may sound like a federalist jumble of laws. However, Switzerland’s association with Schengen has ensured that these regulations have been fairly harmonised in the area of public law.\r\n\r\n\r\n<br>\r\n##Different laws – depending on who is processing the data\r\n\r\nTo summarize, it can be said that the person or entity performing the data processing determines which data protection laws is applicable. If private individuals or federal institutions are processing personal data, the Federal Act on Data Protection applies to them. If cantonal or communal public institutions are processing personal data, the respective data protection act or information and data protection act of their canton applies. In other words, for you, as employees of a public authority or public institution of the Canton of Basel-Stadt such as the university, the **Information and Data Protection Act of the Canton of Basel-Stadt** (IDG) always applies.\r\n\r\nBut does the IDG provide an answer as to whether a particular data processor is allowed to collect, transmit etc. personal data? You will find out in the next chapter.', 'Wenn jemand Personendaten bearbeitet, kommt Datenschutzrecht zum Zug. Es stellt sich aber die Frage, um welches Datenschutzrecht, oder konkreter: um welches Datenschutzgesetz es sich dabei handelt.\r\n{.lead}\r\n\r\nEs gibt einen europäischen Überbau und zwar die Europaratskonvention 108 oder – jetzt in der modernisierten Version – die **Europaratskonvention 108+**. Nach der Ratifikation gelten die Anforderungen der Europaratskonvention 108+ für Bund und Kantone. Der zweite Überbau besteht aus **Rechtserlassen der EU**. Nun ist die Schweiz ja nicht Mitglied der Europäischen Union, aber über das Schengen-Assoziierungsabkommen gilt für öffentliche Organe mindestens im Bereich der polizeilichen und justiziellen Zusammenarbeit die **Richtlinie 2016/680 der EU**. \r\n\r\nZudem gibt es noch die «berühmte» **Datenschutzgrundverordnung 2016/679** (kurz: DSGVO). Sie gilt nicht direkt für Behörden und Unternehmen in der Schweiz, aber weil die EU-Kommission darüber entscheiden muss, ob die Schweiz ein angemessenes Datenschutzniveau hat, sind die Bestimmungen der DSGVO als Massstab für diese Angemessenheit nicht unbeachtlich. Ausserdem gilt die DSGVO in ganz wenigen Fällen auch direkt für Schweizer Unternehmen oder Behörden. Dann nämlich, wenn sie eines der folgenden Kriterien erfüllen: \r\n\r\n<br>\r\n\r\n1. Sie haben eine Niederlassung in einem EU-Staat.\r\n2. Sie bieten Waren oder Dienstleistungen an Personen in der EU an.\r\n3. Sie überwachen das Verhalten von Personen in der EU.\r\n\r\n<br>\r\n##Was gilt in der Schweiz?\r\n\r\nUnd damit kommen wir zur Frage, was denn innerhalb der Schweiz gilt. Der Bund ist zuständig, Recht zu setzen, wenn ihm die Bundesverfassung eine entsprechende Rechtsetzungskompetenz einräumt. Das wurde zwar generell für den Datenschutz beantragt, 1977 im Nationalrat aber abgelehnt. Darum hat der Bund bis heute keine umfassende Rechtsetzungskompetenz im Bereich des Datenschutzes. Er ist nur dort zuständig, wo er eine Rechtsetzungskompetenz aus einer anderen Verfassungsbestimmung ableiten kann.\r\n\r\nDas ist erstens im Zivilrecht und Zivilprozessrecht der Fall. Darum darf er die Datenbearbeitung durch Privatpersonen gesetzlich regeln. Zweitens ist er überall dort zum Regeln der Datenbearbeitung zuständig, wo die Verfassung ihm einen Aufgabenbereich zuordnet. Wenn er die Sozialversicherungen (wie z. B. die AHV oder IV) regeln darf, dann gehören dazu auch die Regeln für das Datenbearbeiten durch die Sozialversicherungen. Der Bund darf folglich diese zwei Bereiche, also das **Datenbearbeiten durch Bundesorgane** und das **Datenbearbeiten durch Private** (Privatpersonen/private Unternehmen) regeln.\r\n\r\nDies hat der Bund getan, indem er das Bundesgesetz über den Datenschutz erlassen hat.\r\n\r\nFür alle anderen Bereiche sind die Kantone zuständig. Die Kantone dürfen bzw. müssen eigene Datenschutzgesetze erlassen für das Datenbearbeiten durch ihre kantonalen und kommunalen öffentlichen Organe. Das klingt im ersten Moment möglicherweise nach einem föderalistischen Wirrwarr. Die Schengen-Assoziierung der Schweiz hat aber dafür gesorgt, dass diese Regelungen im öffentlich-rechtlichen Bereich ziemlich harmonisiert wurden.\r\n\r\n<br>\r\n##Je nach Datenbearbeiter:in – andere Gesetze\r\n\r\nZusammenfassend kann man sagen: Nach der Person, welche die Datenbearbeitung vornimmt, bestimmt sich, welches Datenschutzgesetz anwendbar ist. Bearbeiten Privatpersonen oder Bundesorgane Personendaten, gilt für sie das Bundesdatenschutzgesetz. Bearbeiten kantonale oder kommunale öffentliche Organe Personendaten, gilt für sie das jeweilige Datenschutzgesetz oder Informations- und Datenschutzgesetz ihres Kantons. Mit anderen Worten: Für Sie als Mitarbeiter:in einer öffentlichen Behörde oder eines öffentlichen Organs des Kantons Basel-Stadt, wie etwa die Universität, gilt immer das **Informations- und Datenschutzgesetz des Kantons Basel-Stadt** (kurz: IDG).\r\n\r\nDoch gibt das IDG die Antwort darauf, ob eine bestimmte Datenbearbeiterin oder ein bestimmter Datenbearbeiter Personendaten erheben, weitergeben usw. darf? Dies erfahren Sie im nächsten Kapitel.', 'If someone is processing personal data, data protection law applies. However, the question arises as to which data protection law applies.\r\n{.lead}\r\n\r\nAs a contracting state, Switzerland is subject to the overarching Council of Europe Convention 108 or – in its modernized version – **the Council of Europe Convention 108+**. Once ratified, the requirements of the Convention 108+ apply to both the federal government and the cantons. The second legal framework is formed by **EU legislation**. Switzerland is not a member of the European Union, due to the signing and ratification of the Schengen Association Agreement, the **EU-Directive 2016/680** applies to public institutions in the areas of police and judicial cooperation. \r\n \r\nFurthermore there is the famous **General Data Protection Regulation 2016/679** (GDPR). It does not apply directly to public authorities and companies in Switzerland, but because the EU-Commission has to decide whether Switzerland has an appropriate level of data protection, the standard of the GDPR regulations must be taken into account. Additionally, the GDPR does apply directly to Swiss companies or public authorities in some cases. Namely, if they meet one of the following criteria: \r\n\r\n<br>\r\n\r\n1. They have a location in an EU country. \r\n2. They offer goods or services to persons in the EU. \r\n3. They monitor the behavior of persons in the EU. \r\n\r\n\r\n<br>\r\n##What applies in Switzerland?\r\n\r\nAnd then we come to the question of what applies in Switzerland. The federal government is responsible for creating laws where corresponding legislative powers are granted by the Swiss Constitution. An application for powers to govern data protection was made, but was rejected in the National Council in 1977. Therefore, the federal government still has no comprehensive legislative powers in the area of data protection. It is only responsible for such legislation where it can derive legislative powers from another constitutional provision.\r\n\r\nFirstly, this is the case in civil law and civil procedure law. This is why the federal government may regulate data processing for private individuals. Secondly, the federal government is responsible for regulating data processing wherever it has constitutionally assigned duties. If it is allowed to regulate social welfare (e.g. OASI or DI), then this also includes the rules for data processing by social welfare agencies. As a result, the federal government can regulate these two areas: **data processing by federal institutions and data processing by private entities** (individuals/private companies).\r\n\r\nThe federal government has done this by enacting the Federal Act on Data Protection.\r\n\r\nThe cantons are responsible for all other areas. The cantons may/must enact their own data protection laws for data processing by their cantonal and communal public institutions. At first glance, this may sound like a federalist jumble of laws. However, Switzerland’s association with Schengen has ensured that these regulations have been fairly harmonised in the area of public law.\r\n\r\n\r\n<br>\r\n##Different laws – depending on who is processing the data\r\n\r\nTo summarize, it can be said that the person or entity performing the data processing determines which data protection laws is applicable. If private individuals or federal institutions are processing personal data, the Federal Act on Data Protection applies to them. If cantonal or communal public institutions are processing personal data, the respective data protection act or information and data protection act of their canton applies. In other words, for you, as employees of a public authority or public institution of the Canton of Basel-Stadt such as the university, the **Information and Data Protection Act of the Canton of Basel-Stadt** (IDG) always applies.\r\n\r\nBut does the IDG provide an answer as to whether a particular data processor is allowed to collect, transmit etc. personal data? You will find out in the next chapter.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '5 minutes', 4, 'published', False, None, None, None, None, 171), (875, datetime.datetime(2020, 12, 1, 14, 4, 47, 773099, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 18, 21, 528181, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 18, 21, 483692, tzinfo=datetime.timezone.utc), False, 'Special legal sources', 'Besondere Rechtsquellen', 'Special legal sources', None, '', None, None, None, 'In this video, Beat Rudin describes the special legal sources for public institutions in Basel-Stadt.', 'In diesem Video beschreibt Beat Rudin die besonderen Rechtsquellen für öffentliche Organe in Basel-Stadt.', 'In this video, Beat Rudin describes the special legal sources for public institutions in Basel-Stadt.', None, '', 'special-legal-sources', 'The legislative body for the Canton of Basel-Stadt has enacted the Information and Data Protection Act (IDG). The IDG applies whenever you process data as an employee of a public authority or public institution in the Canton of Basel-Stadt.\r\n{.lead}\r\n\r\nAs you learned in the last chapter, the IDG applies to you as an employee of a public authority or a public institution in the Canton of Basel-Stadt such as the university. In this video, you will learn whether you are allowed to collect personal data in this role or disclose it with other authorities or private individuals.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625531913?h=74288c80bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-6_besondere_rechtsquellen.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Der baselstädtische Gesetzgeber hat das Informations- und Datenschutzgesetz (= IDG) erlassen. Wenn Sie als Mitarbeiterin oder Mitarbeiter einer baselstädtischen Behörde oder eines öffentlichen Organs Personendaten bearbeiten, gilt also das IDG.\r\n{.lead}\r\n\r\nWie Sie im letzten Kapitel erfahren haben, gilt für Sie als Mitarbeiterin oder Mitarbeiter einer basel-städtischen Behörde oder eines öffentlichen Organs des Kantons Basel-Stadt, wie etwa die Universität, das IDG. Im Video erfahren Sie, ob Sie in dieser Rolle Personendaten erheben oder anderen Behörden oder Privaten bekannt geben dürfen.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625531913?h=74288c80bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-6_besondere_rechtsquellen.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'The legislative body for the Canton of Basel-Stadt has enacted the Information and Data Protection Act (IDG). The IDG applies whenever you process data as an employee of a public authority or public institution in the Canton of Basel-Stadt.\r\n{.lead}\r\n\r\nAs you learned in the last chapter, the IDG applies to you as an employee of a public authority or a public institution in the Canton of Basel-Stadt such as the university. In this video, you will learn whether you are allowed to collect personal data in this role or disclose it with other authorities or private individuals.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625531913?h=74288c80bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-6_besondere_rechtsquellen.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '6 minutes', 5, 'published', False, None, None, None, None, 171), (876, datetime.datetime(2020, 12, 1, 14, 5, 12, 36383, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 29, 18, 105742, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 29, 18, 61079, tzinfo=datetime.timezone.utc), False, 'Responsibility and liability', 'Verantwortlichkeit', 'Responsibility and liability', None, '', None, None, None, 'In this audio conversation, Danielle Kaufmann and Beat Rudin talk about data protection responsibilities.', 'In diesem Audio-Gespräch unterhalten sich Danielle Kaufmann und Beat Rudin über die Verantwortlichkeiten beim Datenschutz.', 'In this audio conversation, Danielle Kaufmann and Beat Rudin talk about data protection responsibilities.', None, '', 'responsibility-and-liability', 'Now you are familiar with many of the fundamentals of data protection in public institutions. But who is ultimately responsible for implementing them? And what happens if data protection is not adequately ensured?\r\n{.lead}\r\n\r\nData protection is ultimately always about people. On the one hand, people’s data must be protected. On the other hand, responsible people must ensure that this is done sufficiently and properly. In this conversation with Danielle Kaufmann and Beat Rudin, you will learn more about the division of roles and responsibilities in data protection, but also what happens if something goes wrong.\r\n\r\n<br>\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013684%3Fsecret_token%3Ds-wUH1BHB7KID&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'Nun haben Sie bereits viel Grundlegendes zum Thema Datenschutz in öffentlichen Organen erfahren. Aber wer ist schlussendlich dafür verantwortlich, dass dieser umgesetzt wird? Und was geschieht, wenn der Datenschutz nicht ausreichend gewährleistet ist?\r\n{.lead}\r\n\r\nBeim Datenschutz geht es letztendlich immer um Menschen. Einerseits müssen die Daten von Menschen geschützt werden. Andererseits müssen verantwortliche Personen dafür sorgen, dass der Datenschutz ebendieser gewährleistet ist. Im Gespräch mit Danielle Kaufmann und Beat Rudin erfahren Sie mehr über die Rollenverteilung und Verantwortlichkeiten im Datenschutz, aber auch, was geschieht, wenn dabei mal etwas nicht klappt.\r\n\r\n<br>\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013684%3Fsecret_token%3Ds-wUH1BHB7KID&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'Now you are familiar with many of the fundamentals of data protection in public institutions. But who is ultimately responsible for implementing them? And what happens if data protection is not adequately ensured?\r\n{.lead}\r\n\r\nData protection is ultimately always about people. On the one hand, people’s data must be protected. On the other hand, responsible people must ensure that this is done sufficiently and properly. In this conversation with Danielle Kaufmann and Beat Rudin, you will learn more about the division of roles and responsibilities in data protection, but also what happens if something goes wrong.\r\n\r\n<br>\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013684%3Fsecret_token%3Ds-wUH1BHB7KID&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TA', '7 Minuten', 6, 'published', False, None, None, None, None, 171), (877, datetime.datetime(2020, 12, 1, 14, 6, 3, 180018, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 29, 34, 431368, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 29, 34, 383773, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the first chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das erste Kapitel des offenen Kurses «Datenschutz» ab', 'This quiz concludes the first chapter of the open course "Data Protection".', None, '', 'quiz', 'So far, you have learned some fundamental things about data protection. Now you will have the opportunity to test the knowledge you have acquired.\r\n{.lead}\r\n\r\nHow is anonymized data turned back into personal data? What are special legal sources again? And what’s the deal with responsibility for data protection? Test your knowledge!\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=316" width="836" height="386" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz_Quiz_1-8_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Bis jetzt haben Sie bereits grundlegende Dinge über Datenschutz gelernt und werden nun die Möglichkeit haben, das bisher angeeignete Wissen zu testen.\r\n{.lead}\r\n\r\nWie werden anonymisierte Daten wieder zu Personendaten? Was sind noch einmal besondere Rechtsquellen? Und was hat es mit der Verantwortlichkeit im Datenschutz auf sich? Testen Sie jetzt Ihre Kenntnisse!\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=270" width="958" height="411" frameborder="0" allowfullscreen="allowfullscreen"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'So far, you have learned some fundamental things about data protection. Now you will have the opportunity to test the knowledge you have acquired.\r\n{.lead}\r\n\r\nHow is anonymized data turned back into personal data? What are special legal sources again? And what’s the deal with responsibility for data protection? Test your knowledge!\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=316" width="836" height="386" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz_Quiz_1-8_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TQ', '6 Minuten', 7, 'published', False, None, None, None, None, 171), (878, datetime.datetime(2020, 12, 1, 14, 7, 16, 46048, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 19, 29, 416001, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 19, 29, 372168, tzinfo=datetime.timezone.utc), False, 'Thank you', 'Danke', 'Thank you', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the first chapter of the open course "Data Protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin das erste Kapitel des offenen Kurses «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the first chapter of the open course "Data Protection".', None, '', 'thank-you', 'Congratulations! You have completed the first chapter on the topic of data protection.\r\n{.lead}\r\n \r\nIn Chapter 1, you learned that data protection is necessary in many areas of our everyday lives. You also gained an overview of when data protection law applies and what role general and special legal sources play.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532009?h=f579133db5&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-9_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Glückwunsch! Sie haben das erste Kapitel zum Thema Datenschutz abgeschlossen.\r\n{.lead}\r\n \r\nIn Kapitel 1 haben Sie gelernt, dass es Datenschutz in vielen Bereichen unseres Alltags braucht. Ausserdem haben Sie einen Einblick davon bekommen, in welchen Momenten Datenschutzrecht anwendbar ist, und welche Rolle allgemeine und besondere Rechtsquellen spielen.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532009?h=f579133db5&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-9_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations! You have completed the first chapter on the topic of data protection.\r\n{.lead}\r\n \r\nIn Chapter 1, you learned that data protection is necessary in many areas of our everyday lives. You also gained an overview of when data protection law applies and what role general and special legal sources play.\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532009?h=f579133db5&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="1-9_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '1 Minuten', 8, 'published', False, None, None, None, None, 171)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,5984 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', 'e7b4972ba49deca7a2a89bc2870e232e6f82725c'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

1,3503 set_many ({'e7b4972ba49deca7a2a89bc2870e232e6f82725c': (1736881648.3689682, [[(979, datetime.datetime(2021, 11, 16, 8, 57, 29, 993734, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 8, 269474, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 8, 193502, tzinfo=datetime.timezone.utc), False, 'Principles of data processing', 'Grundsätze der Datenbearbeitung', 'Principles of data processing', None, '', None, None, None, 'In this article, a questionnaire shows you the principles of data processing.', 'In diesem Artikel zeigt Ihnen ein Fragebogen die Grundsätze der Datenbearbeitung.', 'In this article, a questionnaire shows you the principles of data processing.', None, '', 'principles-of-data-processing', 'Processing of data by public institutions touches on a range of principles that are important to be aware of. But first, we would like to get to know you a little better.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013681%3Fsecret_token%3Ds-3grzsYP5Scl&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=317" width="904" height="441" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.1_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>\r\n\r\n<br>\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013678%3Fsecret_token%3Ds-2wu1FVHaDBU&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'Die Datenbearbeitung durch öffentliche Organe beruht auf einer Reihe von Grundsätzen, die es zu beachten gilt. Aber zunächst würden wir Sie gerne etwas besser kennenlernen.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013681%3Fsecret_token%3Ds-3grzsYP5Scl&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=295" width="860" height="441" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.1"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>\r\n\r\n<br>\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013678%3Fsecret_token%3Ds-2wu1FVHaDBU&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'Processing of data by public institutions touches on a range of principles that are important to be aware of. But first, we would like to get to know you a little better.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013681%3Fsecret_token%3Ds-3grzsYP5Scl&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=317" width="904" height="441" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.1_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>\r\n\r\n<br>\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013678%3Fsecret_token%3Ds-2wu1FVHaDBU&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TM', '4 minutes', 0, 'published', False, None, None, None, None, 172), (1018, datetime.datetime(2021, 11, 16, 12, 57, 0, 161057, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 19, 52, 453230, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 19, 52, 404323, tzinfo=datetime.timezone.utc), False, 'Principle 1: Legal basis', 'Grundsatz 1: Gesetzliche Grundlage', 'Principle 1: Legal basis', None, '', None, None, None, 'In this article, you will learn about the first principle of data processing: the legal basis.', 'In diesem Artikel lernen Sie den ersten Grundsatz der Datenbearbeitung kennen: die gesetzliche Grundlage.', 'In this article, you will learn about the first principle of data processing: the legal basis.', None, '', 'principle-1-legal-basis', 'The first principle is related to the legal validity of the data processing. What legal basis is required if we want to process data?\r\n{.lead}\r\n\r\n![Icon Rechtsmaessigkeit](/media/markdownx/81d892b9-f838-4b93-b82c-b1e4f6f848b0.png)\r\n{.thumb-4}\r\n\r\n\r\nThe quiz in the previous step would obviously have taken data collection too far. But how can we know what kinds of data processing are possible and permissible? As a governmental institution, we must act on a legal basis. That is the constitutional principle of legality. This principle also applies to data processing. Unlike private institutions, public institutions are not permitted to process data simply because they can show an overriding interest in doing so. With regard to data processing, this principle is laid down in § 9 IDG:\r\n\r\n<br>\r\n\r\n> **Section 9** Prerequisites for the Processing of Personal Data \r\n<br>\r\n> 1 \r\nA public institution may process personal data if/when \r\na) there is a legal basis for doing so or \r\nb) it is necessary to fulfill a legal task. \r\n<br>\r\n> 2 \r\nSensitive personal data may be processed if/when \r\na) a law explicitly permits or requires it or \r\nb) it is absolutely necessary to fulfill a task clearly defined by law. \r\n<br>\r\n> 3 \r\nThe processing of personal data must be carried out in good faith and must be proportionate.\r\n\r\nThis legal basis may appear in two forms: as a **direct legal basis** or as an **indirect legal basis**. What do each of these mean?\r\n\r\n<br>\r\n## Direct and indirect legal basis\r\nWe speak of a **direct legal basis** if the data processing is explicitly regulated in a law. On the other hand we speak of an **indirect legal basis**, if laws or ordinances only describe a task which requires that personal data is processed in order to fulfill it, but do not contain any direct guidelines on how to process the data. This is also a legal basis, but it does not directly regulate the data processing; rather, it affects it only indirectly.\r\n\r\nHowever, these two bases are not simply interchangeable. An indirect legal basis does not always suffice. It depends what kind of personal data is being processed. There is yet another distinction in § 9 IDG, namely that between **regular personal data** and **special personal data**.\r\n\r\n\r\n<br>\r\n## Regular and special personal data\r\n\r\nThere has to be a legal basis for processing **regular personal data**. This basis can be a law or an ordinance. However, in order to process **special personal data**, § 9 Para. 2 requires a law; that is, a basis in a law in the formal sense. An ordinance, which is typically issued by the Executive Council of a canton, does not suffice in this case. Instead, it requires as its basis a law passed by the parliament, and in certain cases may even have been subjected to a referendum. Let’s take a look now at the requirements for legal bases in two examples. \r\n\r\n<br>\r\n## Example 1: Collecting data on religious affiliation\r\nIn our first example, let’s examine the question of whether or not the residents’ registration office is permitted to collect religious affiliation data from persons registering in the canton. As we have learned, this requires a valid legal basis. But because religious affiliation is considered **special personal data**, it requires a direct legal basis; that is, a law in the formal sense. We refer here to § 9, Para. 2. Such a legal basis for the collection of data by the residents’ registration office can be found in the sectoral laws governing resident registration, namely in the Canton of Basel-Stadt’s Settlement and Residence Act (NAG). However, § 10 IDG does not directly specify whether and how the residents’ registration office may collect religious affiliation data. Instead, it refers to Art. 6 and 7 of the Federal Act on the Harmonization of the Register of Residents and of other Official Registers of Persons, the so-called Register Harmonization Act (RHA).\r\n\r\nSo the Settlement and Resident Act does not itself specify what data the residents’ registration office is permitted to collect, but instead refers us to a federal law. And that is where we finally find our answer: this federal law describes the minimum required contents of the resident register and stipulates that affiliation with a religious community that is recognized under public law or otherwise recognized by the canton is to be recorded therein. Thus, we have what is required by § 9 Para. 2: namely, a legal basis in a law in the formal sense; in this case, a basis for recording religious affiliation in the resident register. **Please note, however:** the Register Harmonization Act only speaks of religious communities that are recognized under public law or otherwise recognized by the canton. Therefore, it would also have to be checked which religious communities the canton has recognized it its constitution or via an order of the Executive Council.\r\n\r\nWhat does this example demonstrate? When there is a direct legal basis, it is relatively easy to determine what a public institution is allowed to do: whatever there is a legal basis for. It is somewhat more difficult in the case of an indirect legal basis because it is not the data processing itself that is regulated in the law or ordinance, but only the task. In such cases, it must be determined which data processing operations are truly necessary to fulfil this legal task.\r\n\r\n\r\n<br>\r\n## Example 2: School law and combating infectious diseases among children\r\n\r\nThe coronavirus pandemic has brought the practice of contact tracing into the public eye. However, Child and Youth Health Services already has many years of experience with contact tracing, since working together with other offices to combat infectious diseases is one of their duties. This requires them to collect health data, which counts as special personal data (§ 3 Para. 4 IDG). In order to process this special personal data, a basis in a law in the formal sense is required. For this, we can refer to § 140 Para. 4 Letter f of the School Law, in which this task of combating infectious diseases among children is described.\r\n\r\nUnlike cases of direct legal basis, however, we still don’t have a clear answer as to what exactly the public health office is permitted to do to accomplish this task. Since there are no guidelines in this indirect legal basis of the School Law, we turn now to § 9 Para. 2 Letter b IDG: according to this, the public health office is only permitted to process personal data as is **absolutely necessar**y to accomplish this legal task. With this, the IDG refers to a second principle, namely the **principle of proportionality**, which we will examine below.', 'Der erste Grundsatz betrifft die Rechtmässigkeit der Datenbearbeitung. Welche gesetzliche Grundlage ist erforderlich, wenn wir Daten bearbeiten wollen?\r\n{.lead}\r\n\r\n![Icon Rechtsmaessigkeit](/media/markdownx/81d892b9-f838-4b93-b82c-b1e4f6f848b0.png)\r\n{.thumb-4}\r\n\r\n\r\nDas Quiz im vorherigen Step wäre bei einer Datenerhebung offensichtlich zu weit gegangen. Aber woran können wir uns orientieren, wenn wir wissen wollen, welche Formen der Datenbearbeitung möglich und zulässig sind? Als staatliche Behörden müssen wir auf einer gesetzlichen Grundlage handeln. Das ist das verfassungsrechtliche Legalitätsprinzip. Dieses Prinzip gilt auch für die Datenbearbeitung. Denn anders als Private dürfen öffentliche Organe nicht allein schon deshalb Daten bearbeiten, weil sie ein überwiegendes Interesse daran geltend machen können. In Bezug auf das Datenbearbeiten ist dieser Grundsatz festgelegt im § 9 des IDG:\r\n\r\n<br>\r\n\r\n> **§ 9** Voraussetzungen für das Bearbeiten von Personendaten \r\n<br>\r\n> 1 \r\nEin öffentliches Organ darf Personendaten bearbeiten, wenn \r\na) dafür eine gesetzliche Grundlage besteht oder \r\nb) dies zur Erfüllung einer gesetzlichen Aufgabe erforderlich ist. \r\n<br>\r\n> 2 \r\nBesondere Personendaten dürfen bearbeitet werden, wenn \r\na) ein Gesetz dazu ausdrücklich ermächtigt oder verpflichtet oder \r\nb) es für eine in einem Gesetz klar umschriebene Aufgabe zwingend notwendig ist. \r\n<br>\r\n> 3 \r\nDas Bearbeiten von Personendaten hat nach Treu und Glauben zu erfolgen und muss verhältnismässig sein.\r\n\r\nDiese gesetzliche Grundlage kann nun in zwei Formen erscheinen: als **unmittelbare gesetzliche Grundlage** oder als **mittelbare gesetzliche Grundlage**. Was ist darunter jeweils zu verstehen?\r\n\r\n<br>\r\n## Unmittelbare und mittelbare gesetzliche Grundlage\r\nVon einer **unmittelbaren gesetzliche Grundlage** sprechen wir dann, wenn das Datenbearbeiten in einem Gesetz ausdrücklich geregelt wird. Von einer **mittelbaren gesetzlichen Grundlage** wiederum sprechen wir, wenn Gesetze oder Verordnungen nur eine Aufgabe umschreiben, zu deren Erfüllung das öffentliche Organ Personendaten bearbeiten muss, aber keine direkten Vorgaben dazu enthält, wie Daten zu bearbeiten sind. Das ist zwar auch eine gesetzliche Grundlage, aber sie regelt nicht unmittelbar das Datenbearbeiten, sondern sie wirkt nur mittelbar.\r\n\r\nDiese beiden Grundlagen sind aber nicht einfach austauschbar. Nicht immer genügt eine mittelbare gesetzliche Grundlage. Es kommt darauf an, was für eine Art von Personendaten bearbeitet werden soll. Dafür gibt noch eine weitere Unterscheidung im § 9 IDG, nämlich die zwischen **gewöhnlichen Personendaten** und **besonderen Personendaten**.\r\n\r\n<br>\r\n## Gewöhnliche und besondere Personendaten\r\n\r\nWenn **gewöhnliche Personendaten** bearbeitet werden sollen, dann braucht es dafür eine gesetzliche Grundlage. Diese Grundlage kann in einem Gesetz oder in einer Verordnung bestehen. Sollen hingegen **besondere Personendaten** bearbeitet werden, dann verlangt § 9 Abs. 2 ein Gesetz, also eine Grundlage in einem Gesetz im formellen Sinn. Eine Verordnung, die in der Regel vom Regierungsrat erlassen wird, genügt in diesem Fall nicht, sondern es braucht dafür als unmittelbare Grundlage ein Gesetz, das vom Parlament beschlossen worden ist und unter Umständen sogar dem Referendum unterstanden hat. Schauen wir uns nun die Anforderungen an die gesetzlichen Grundlagen an zwei Beispielen einmal an. \r\n\r\n<br>\r\n## Beispiel 1: Erfassung von Konfessions- oder Religionszugehörigkeit\r\nAls erstes Beispiel widmen wir uns der Frage, ob die Einwohnerkontrolle die Konfessions- oder Religionszugehörigkeit von Personen, die sich im Kanton anmelden, erfassen darf oder nicht. Wie wir inzwischen wissen, braucht es dafür eine qualifizierte gesetzliche Grundlage. Weil die Konfession- oder Religionszugehörigkeit aber ein **besonderes Personendatum** ist, braucht es eine unmittelbare gesetzliche Grundlage, also ein Gesetz im formellen Sinn. Dabei beziehen wir uns auf § 9, Abs. 2. Eine solche gesetzliche Grundlage über die Erhebung von Daten durch die Einwohnerkontrolle finden wir nun im Fachgesetz für die Einwohnerkontrolle, und zwar im baselstädtischen Niederlassungs- und Aufenthaltsgesetz (NAG). Allerdings wird dort im § 10 nicht direkt festgelegt, ob und wie die Einwohnerkontrolle die Konfessions- oder Religionszugehörigkeit erfassen darf, sondern es wird verwiesen auf die Art. 6 und 7 des Bundesgesetz über die Harmonisierung der Einwohnerregister und anderer amtlicher Personenregister das sogenannte Registerharmonisierungsgesetz (RHG) zu führen sind.\r\n\r\nDas Niederlassungs- und Aufenthaltsgesetz führt also nicht selbst auf, welche Daten die Einwohnerkontrolle erheben darf, sondern verweist uns wiederum auf ein Bundesgesetz. Dort werden wir aber endlich fündig: Dieses Bundesgesetz betrifft nämlich den minimalen Inhalt der Einwohnerregister und legt fest, dass die Zugehörigkeit zu einer öffentlich-rechtlichen oder auf andere Weise vom Kanton anerkannten Religionsgemeinschaft darin aufzunehmen ist. Damit liegt uns das vor, was § 9 Abs. 2 verlangt hat, nämlich eine gesetzliche Grundlage in einem Gesetz im formellen Sinn, in diesem Fall für die Aufnahme der Religionsgemeinschaft in das Einwohnerregister. **Aber Achtung:** Das Registerharmonisierungsgesetz spricht nur von öffentlich-rechtlichen oder auf andere Weise kantonal anerkannten Religionsgemeinschaften. Es müsste also zusätzlich noch geprüft werden, welche Religionsgemeinschaften der Kanton in seiner Verfassung oder durch einen Grossratsbeschluss anerkannt hat.\r\n\r\nWas sehen wir anhand von diesem Beispiel? Bei der unmittelbaren gesetzlichen Grundlage ist es relativ einfach festzustellen, was ein öffentliches Organ tun darf, wofür also eine gesetzliche Grundlage besteht. Etwas schwieriger ist es bei einer mittelbaren gesetzlichen Grundlage, weil dort gerade nicht das Datenbearbeiten selbst im Gesetz oder in der Verordnung geregelt wird, sondern nur die Aufgabe. In einem solchen Fall müssen wir untersuchen, welche Datenbearbeitungen wirklich erforderlich sind, um diese gesetzliche Aufgabe zu erfüllen.\r\n\r\n<br>\r\n## Beispiel 2: Schulgesetz und die Bekämpfung ansteckender Krankheiten unter Kindern\r\n\r\nMit der Corona-Pandemie ist auch die Kontaktnachverfolgung als Massnahme in den öffentlichen Fokus gerückt. Der Kinder- und Jugendgesundheitsdienst hat damit aber schon länger Erfahrung, denn zu seinen Aufgaben gehört die Mitwirkung bei der Bekämpfung der ansteckenden Krankheiten unter den Kindern. Dafür müssen Gesundheitsdaten erhoben werden, die als besondere Personendaten gelten (§ 3 Abs. 4 des IDG). Es braucht daher für die Bearbeitung dieser besonderen Personendaten eine Grundlage in einem Gesetz im formellen Sinn. Dafür beziehen wir uns auf § 140 Absatz 4 Buchstabe f des Schulgesetzes, in dem diese Aufgabe der Bekämpfung ansteckender Krankheiten unter Kindern beschrieben ist.\r\n\r\nAnders als bei unmittelbaren gesetzlichen Grundlagen ist damit aber die Frage noch nicht klar beantwortet, was der Gesundheitsdienst zur Erfüllung dieser Aufgabe eigentlich genau tun darf. Da es in dieser mittelbaren gesetzlichen Grundlage des Schulgesetzes keine Vorgaben gibt, wenden wir uns nun § 9 Abs. 2 Buchstabe b IDG zu: Der Gesundheitsdienst darf demnach nur solche besonderen Personendaten bearbeiten, die zur Erfüllung dieser gesetzlichen Aufgaben **zwingend notwendig** sind. Damit verweist das IDG auf einen zweiten Grundsatz, nämlich auf das **Verhältnismässigkeitsprinzip**, das wir uns in der Folge anschauen werden.', 'The first principle is related to the legal validity of the data processing. What legal basis is required if we want to process data?\r\n{.lead}\r\n\r\n![Icon Rechtsmaessigkeit](/media/markdownx/81d892b9-f838-4b93-b82c-b1e4f6f848b0.png)\r\n{.thumb-4}\r\n\r\n\r\nThe quiz in the previous step would obviously have taken data collection too far. But how can we know what kinds of data processing are possible and permissible? As a governmental institution, we must act on a legal basis. That is the constitutional principle of legality. This principle also applies to data processing. Unlike private institutions, public institutions are not permitted to process data simply because they can show an overriding interest in doing so. With regard to data processing, this principle is laid down in § 9 IDG:\r\n\r\n<br>\r\n\r\n> **Section 9** Prerequisites for the Processing of Personal Data \r\n<br>\r\n> 1 \r\nA public institution may process personal data if/when \r\na) there is a legal basis for doing so or \r\nb) it is necessary to fulfill a legal task. \r\n<br>\r\n> 2 \r\nSensitive personal data may be processed if/when \r\na) a law explicitly permits or requires it or \r\nb) it is absolutely necessary to fulfill a task clearly defined by law. \r\n<br>\r\n> 3 \r\nThe processing of personal data must be carried out in good faith and must be proportionate.\r\n\r\nThis legal basis may appear in two forms: as a **direct legal basis** or as an **indirect legal basis**. What do each of these mean?\r\n\r\n<br>\r\n## Direct and indirect legal basis\r\nWe speak of a **direct legal basis** if the data processing is explicitly regulated in a law. On the other hand we speak of an **indirect legal basis**, if laws or ordinances only describe a task which requires that personal data is processed in order to fulfill it, but do not contain any direct guidelines on how to process the data. This is also a legal basis, but it does not directly regulate the data processing; rather, it affects it only indirectly.\r\n\r\nHowever, these two bases are not simply interchangeable. An indirect legal basis does not always suffice. It depends what kind of personal data is being processed. There is yet another distinction in § 9 IDG, namely that between **regular personal data** and **special personal data**.\r\n\r\n\r\n<br>\r\n## Regular and special personal data\r\n\r\nThere has to be a legal basis for processing **regular personal data**. This basis can be a law or an ordinance. However, in order to process **special personal data**, § 9 Para. 2 requires a law; that is, a basis in a law in the formal sense. An ordinance, which is typically issued by the Executive Council of a canton, does not suffice in this case. Instead, it requires as its basis a law passed by the parliament, and in certain cases may even have been subjected to a referendum. Let’s take a look now at the requirements for legal bases in two examples. \r\n\r\n<br>\r\n## Example 1: Collecting data on religious affiliation\r\nIn our first example, let’s examine the question of whether or not the residents’ registration office is permitted to collect religious affiliation data from persons registering in the canton. As we have learned, this requires a valid legal basis. But because religious affiliation is considered **special personal data**, it requires a direct legal basis; that is, a law in the formal sense. We refer here to § 9, Para. 2. Such a legal basis for the collection of data by the residents’ registration office can be found in the sectoral laws governing resident registration, namely in the Canton of Basel-Stadt’s Settlement and Residence Act (NAG). However, § 10 IDG does not directly specify whether and how the residents’ registration office may collect religious affiliation data. Instead, it refers to Art. 6 and 7 of the Federal Act on the Harmonization of the Register of Residents and of other Official Registers of Persons, the so-called Register Harmonization Act (RHA).\r\n\r\nSo the Settlement and Resident Act does not itself specify what data the residents’ registration office is permitted to collect, but instead refers us to a federal law. And that is where we finally find our answer: this federal law describes the minimum required contents of the resident register and stipulates that affiliation with a religious community that is recognized under public law or otherwise recognized by the canton is to be recorded therein. Thus, we have what is required by § 9 Para. 2: namely, a legal basis in a law in the formal sense; in this case, a basis for recording religious affiliation in the resident register. **Please note, however:** the Register Harmonization Act only speaks of religious communities that are recognized under public law or otherwise recognized by the canton. Therefore, it would also have to be checked which religious communities the canton has recognized it its constitution or via an order of the Executive Council.\r\n\r\nWhat does this example demonstrate? When there is a direct legal basis, it is relatively easy to determine what a public institution is allowed to do: whatever there is a legal basis for. It is somewhat more difficult in the case of an indirect legal basis because it is not the data processing itself that is regulated in the law or ordinance, but only the task. In such cases, it must be determined which data processing operations are truly necessary to fulfil this legal task.\r\n\r\n\r\n<br>\r\n## Example 2: School law and combating infectious diseases among children\r\n\r\nThe coronavirus pandemic has brought the practice of contact tracing into the public eye. However, Child and Youth Health Services already has many years of experience with contact tracing, since working together with other offices to combat infectious diseases is one of their duties. This requires them to collect health data, which counts as special personal data (§ 3 Para. 4 IDG). In order to process this special personal data, a basis in a law in the formal sense is required. For this, we can refer to § 140 Para. 4 Letter f of the School Law, in which this task of combating infectious diseases among children is described.\r\n\r\nUnlike cases of direct legal basis, however, we still don’t have a clear answer as to what exactly the public health office is permitted to do to accomplish this task. Since there are no guidelines in this indirect legal basis of the School Law, we turn now to § 9 Para. 2 Letter b IDG: according to this, the public health office is only permitted to process personal data as is **absolutely necessar**y to accomplish this legal task. With this, the IDG refers to a second principle, namely the **principle of proportionality**, which we will examine below.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '10 minutes', 1, 'published', False, None, None, None, None, 172), (1019, datetime.datetime(2021, 11, 16, 14, 16, 20, 135436, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 42, 622850, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 42, 576193, tzinfo=datetime.timezone.utc), False, 'Principle 2: Proportionality', 'Grundsatz 2: Verhältnismässigkeit', 'Principle 2: Proportionality', None, '', None, None, None, 'In this podcast, Beat Rudin introduces you to the second principle of data processing: proportionality.', 'In diesem Podcast stellt Beat Rudin Ihnen den zweiten Grundsatz der Datenbearbeitung vor: die Verhältnismässigkeit.', 'In this podcast, Beat Rudin introduces you to the second principle of data processing: proportionality.', None, '', 'principle-2-proportionality', 'The processing of data not only requires a legal basis; it must also be proportionate.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013669%3Fsecret_token%3Ds-i7QaX0q3fjc&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n\r\nLink to the [Lecture by Professor Marcel Salathé on the challenges of digital epidemiology](https://vimeo.com/460613791){:target=“_blank”}', 'Das Bearbeiten von Daten bedarf nicht nur einer gesetzlichen Grundlage, sondern es muss auch verhältnismässig sein.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013669%3Fsecret_token%3Ds-i7QaX0q3fjc&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n\r\nLink zum erwähnten [Vortrag von Prof. Dr. Marcel Salathé über die Herausforderungen der digitalen Epidemiologie](https://vimeo.com/460613791){:target=“_blank”}', 'The processing of data not only requires a legal basis; it must also be proportionate.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013669%3Fsecret_token%3Ds-i7QaX0q3fjc&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>\r\n\r\n\r\nLink to the [Lecture by Professor Marcel Salathé on the challenges of digital epidemiology](https://vimeo.com/460613791){:target=“_blank”}', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TA', '6 minutes', 2, 'published', False, None, None, None, None, 172), (1020, datetime.datetime(2021, 11, 16, 14, 16, 52, 729226, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 57, 136539, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 30, 57, 88028, tzinfo=datetime.timezone.utc), False, 'Principle 3: Purpose', 'Grundsatz 3: Zweckbindung', 'Principle 3: Purpose', None, '', None, None, None, 'In this video, Beat Rudin introduces you to the third principle of data processing: purpose.', 'In diesem Video stellt Beat Rudin Ihnen den dritten Grundsatz der Datenbearbeitung vor: die Zweckbindung.', 'In this video, Beat Rudin introduces you to the third principle of data processing: purpose.', None, '', 'principle-3-purpose', 'The third principle of data protection law is all about purpose.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638580985?h=4a0bcb3024&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-4_zweckbindung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Beim dritten Grundsatz des Datenschutzrechts geht es um die Zweckbindung.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638580985?h=4a0bcb3024&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-4_zweckbindung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'The third principle of data protection law is all about purpose.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638580985?h=4a0bcb3024&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-4_zweckbindung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '5 minutes', 3, 'published', False, None, None, None, None, 172), (1021, datetime.datetime(2021, 11, 16, 14, 17, 32, 619215, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 31, 11, 926310, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 31, 11, 868970, tzinfo=datetime.timezone.utc), False, 'Principle 4: Transparency', 'Grundsatz 4: Transparenz', 'Principle 4: Transparency', None, '', None, None, None, 'In this article, you will learn about the fourth principle of data processing: transparency.', 'In diesem Artikel lernen Sie den vierten Grundsatz der Datenbearbeitung kennen: die Transparenz.', 'In this article, you will learn about the fourth principle of data processing: transparency.', None, '', 'principle-4-transparency', 'The fourth principle of data protection law relates to transparency or recognizability. \r\n{.lead}\r\n\r\n![Icon Transparenz](/media/markdownx/c8968d42-04e4-4d73-b7a0-56c61743836d.png)\r\n{.thumb-4}\r\n\r\nIn discussions about data protection, questions of transparency come up most frequently. Transparency means that the affected individual must be able to recognize what personal data has been collected about them and for what purpose it is being processed. This is required by § 15 of the Information and Data Protection Act. This transparency is derived from the good-faith principle, according to which processing of data concerning you that is not transparent (i.e. not recognizable to you) must be prevented unless creating transparency would seriously endanger the fulfillment of the legal task. However, this is only the case in exceptional circumstances, such as in the field of criminal prosecution. For such cases, the relevant laws allow, for example, to open a criminal investigation and to postpone the notification of this opening to the affected individual.\r\n\r\nThere are two additional special rules regarding transparency that are set forth in § 15 IDG:\r\n\r\n\r\n<br>\r\n\r\n1. When personal data is being collected in a systematic way, such as with questionnaires, forms, or online recordings, the legal basis for the data collection and its intended purpose must be provided.\r\n<br>\r\n<br>\r\n2. When special personal data is being obtained, the public institution is not only required to permit and facilitate transparency, but also to *actively* inform the affected individual of the purpose for the data processing. This applies as long as it does not seriously jeopardize the fulfillment of the legal tasks. \r\n\r\n<br>\r\nThis information obligation will be expanded in the future owing to international legal requirements. The German Federal Data Protection Act, for example, extends this requirement to the obtaining of so-called regular personal data, and legislators for the Canton of Basel-Stadt will have to do the same in the next revision of the IDG. Then, in the near future, not only when obtaining special personal data, but also when obtaining ordinary personal data, the public institutions will be obliged to actively inform affected individuals about the processed data or the categories of processed data, the legal basis and purpose for the data processing, the recipients of the data, and the rights that the affected persons are entitled to. This can either be included as part of the relevant form or, if you are collecting the data during a conversation, by handing out an information sheet. Despite the new regulation, the effort involved is relatively limited.', 'Der vierte Grundsatz aus dem Datenschutzrecht betrifft die Transparenz oder Erkennbarkeit. \r\n{.lead}\r\n\r\n![Icon Transparenz](/media/markdownx/c8968d42-04e4-4d73-b7a0-56c61743836d.png)\r\n{.thumb-4}\r\n\r\nWenn die Rede von Datenschutz ist, geht es meist auch um Fragen nach der Transparenz. Transparenz heisst, dass die betroffene Person erkennen können muss, welche Personendaten über sie beschafft und zu welchem Zweck sie bearbeitet werden. So verlangt es § 15 des Informations- und Datenschutzgesetzes. Diese Transparenz ist Ausfluss des Prinzips von Treu und Glauben, wonach verhindert werden muss, dass über Sie intransparent, also für Sie nicht erkennbar, Daten bearbeitet werden, ausser wenn durch die Schaffung der Transparenz die Erfüllung der gesetzlichen Aufgabe ernsthaft gefährdet würde. Das ist aber nur in Ausnahmen der Fall, beispielsweise im Bereich der Strafverfolgung. Dort ermöglichen es die entsprechenden Gesetze, etwa eine Strafuntersuchung zu eröffnen und die Mitteilung dieser Eröffnung an die betroffene Person aufzuschieben.\r\n\r\nDarüber hinaus gibt es zwei besondere Regelungen in Bezug auf die Transparenz, die im § 15 IDG festgelegt sind:\r\n\r\n<br>\r\n\r\n1. Wenn Personendaten systematisch erhoben werden, namentlich mit Fragebögen, Formularen oder in Online-Erfassungen, dann muss dabei angegeben sein, auf welche gesetzliche Grundlage die Datenerhebung gestützt ist und zu welchem Zweck sie erfolgt.\r\n<br>\r\n<br>\r\n2. Wenn besondere Personendaten beschafft werden, dann ist das öffentliche Organ nicht nur dazu verpflichtet, diese Erkennbarkeit zuzulassen und zu ermöglichen, sondern auch dazu, die betroffene Person über den Zweck der Bearbeitung *aktiv* zu informieren. Das gilt, soweit dadurch nicht die Erfüllung der gesetzlichen Aufgaben ernsthaft gefährdet wird.\r\n\r\n<br>\r\nAufgrund der internationalen rechtlichen Vorgaben wird diese Informationspflicht in Zukunft ausgedehnt. Im Bundesdatenschutzgesetz wird beispielsweise auch für die Beschaffung von sogenannten gewöhnlichen Personendaten diese Informationspflicht aufgestellt und der basel-städtische Gesetzgeber wird das bei der nächsten Revision des IDG ebenfalls tun müssen. Dann wird künftig nicht nur beim Beschaffen von besonderen Personendaten, sondern auch beim Beschaffen sogenannter gewöhnlicher Personendaten das öffentliche Organ dazu verpflichtet sein, aktiv zu informieren über die bearbeiteten Daten oder die Kategorien der bearbeiteten Daten, über die Rechtsgrundlage der Datenbearbeitung und den Zweck der Datenbearbeitung, über die allfälligen Empfängerinnen und Empfänger der Daten und über die Rechte, die der betroffenen Person zustehen. Das kann wiederum als Teil des jeweiligen Formulars oder, wenn man die Daten in einem Gespräch erhebt, durch die Aushändigung eines Informationsschreibens erfolgen. Der Aufwand ist also trotz der neuen Regelung relativ beschränkt.', 'The fourth principle of data protection law relates to transparency or recognizability. \r\n{.lead}\r\n\r\n![Icon Transparenz](/media/markdownx/c8968d42-04e4-4d73-b7a0-56c61743836d.png)\r\n{.thumb-4}\r\n\r\nIn discussions about data protection, questions of transparency come up most frequently. Transparency means that the affected individual must be able to recognize what personal data has been collected about them and for what purpose it is being processed. This is required by § 15 of the Information and Data Protection Act. This transparency is derived from the good-faith principle, according to which processing of data concerning you that is not transparent (i.e. not recognizable to you) must be prevented unless creating transparency would seriously endanger the fulfillment of the legal task. However, this is only the case in exceptional circumstances, such as in the field of criminal prosecution. For such cases, the relevant laws allow, for example, to open a criminal investigation and to postpone the notification of this opening to the affected individual.\r\n\r\nThere are two additional special rules regarding transparency that are set forth in § 15 IDG:\r\n\r\n\r\n<br>\r\n\r\n1. When personal data is being collected in a systematic way, such as with questionnaires, forms, or online recordings, the legal basis for the data collection and its intended purpose must be provided.\r\n<br>\r\n<br>\r\n2. When special personal data is being obtained, the public institution is not only required to permit and facilitate transparency, but also to *actively* inform the affected individual of the purpose for the data processing. This applies as long as it does not seriously jeopardize the fulfillment of the legal tasks. \r\n\r\n<br>\r\nThis information obligation will be expanded in the future owing to international legal requirements. The German Federal Data Protection Act, for example, extends this requirement to the obtaining of so-called regular personal data, and legislators for the Canton of Basel-Stadt will have to do the same in the next revision of the IDG. Then, in the near future, not only when obtaining special personal data, but also when obtaining ordinary personal data, the public institutions will be obliged to actively inform affected individuals about the processed data or the categories of processed data, the legal basis and purpose for the data processing, the recipients of the data, and the rights that the affected persons are entitled to. This can either be included as part of the relevant form or, if you are collecting the data during a conversation, by handing out an information sheet. Despite the new regulation, the effort involved is relatively limited.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '3 minutes', 4, 'published', False, None, None, None, None, 172), (1022, datetime.datetime(2021, 11, 16, 14, 48, 5, 190873, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 31, 36, 725543, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 31, 36, 676725, tzinfo=datetime.timezone.utc), False, 'Principle 5: Integrity', 'Grundsatz 5: Integrität', 'Principle 5: Integrity', None, '', None, None, None, 'In this podcast, Danielle Kaufmann introduces you to the fifth principle of data processing: integrity.', 'In diesem Podcast stellt Danielle Kaufmann Ihnen den fünften Grundsatz der Datenbearbeitung vor: die Integrität.', 'In this podcast, Danielle Kaufmann introduces you to the fifth principle of data processing: integrity.', None, '', 'principle-5-integrity', 'The fifth principle of data protection law is about integrity: in other words, the accuracy of the data.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013666%3Fsecret_token%3Ds-AdNSYdOk9cD&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'Beim fünften Grundsatz des Datenschutzrechts geht es um die Integrität, also um die Richtigkeit der Daten.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013666%3Fsecret_token%3Ds-AdNSYdOk9cD&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', 'The fifth principle of data protection law is about integrity: in other words, the accuracy of the data.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1158013666%3Fsecret_token%3Ds-AdNSYdOk9cD&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TA', '4 minutes', 5, 'published', False, None, None, None, None, 172), (1023, datetime.datetime(2021, 11, 16, 14, 51, 58, 594647, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 20, 26, 851202, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 20, 26, 777291, tzinfo=datetime.timezone.utc), False, 'Summary', 'Zusammenfassung', 'Summary', None, '', None, None, None, 'This quiz of the open course "Data Protection" summarizes the principles of data processing.', 'Dieses Quiz des offenen Kurses «Datenschutz» dient der Zusammenfassung der Grundsätze der Datenbearbeitung.', 'This quiz of the open course "Data Protection" summarizes the principles of data processing.', None, '', 'summary-6', 'So far, you have learned what the principles of data processing are. The following quiz will help you sum up your newfound knowledge.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=318" width="904" height="272" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.7_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Bis hierhin haben Sie gelernt, was die Grundsätze der Datenbearbeitung sind. Im folgenden Quiz können Sie sich nun eine Zusammenfassung zusammenstellen.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=291" width="785" height="268" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.7"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'So far, you have learned what the principles of data processing are. The following quiz will help you sum up your newfound knowledge.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=318" width="904" height="272" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.7_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TQ', '4 minutes', 6, 'published', False, None, None, None, None, 172), (1024, datetime.datetime(2021, 11, 16, 15, 4, 19, 381382, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 20, 44, 854773, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 20, 44, 800771, tzinfo=datetime.timezone.utc), False, 'Consent', 'Einwilligung', 'Consent', None, '', None, None, None, 'In this article, you will learn what role consent plays in data processing.', 'In diesem Artikel lernen Sie, welche Rolle die Einwilligung beim Datenbearbeiten spielt.', 'In this article, you will learn what role consent plays in data processing.', None, '', 'consent', 'Although consent does not suffice as a justification for a public institution to process data, it nonetheless plays a role in some cases.\r\n{.lead}\r\n\r\nWhenever we, as a public institution, plan to process personal data, we need a legal basis for doing so. Consent from the affected individual does not suffice, nor does it replace the legal basis. However, in certain circumstances, consent is still significant.\r\n\r\n<br>\r\n\r\n* First, a release of data can be justified with consent. This is stipulated in § 21 IDG. If a public institution possesses certain personal data legally, it can disclose this data as long as there is either a further legal basis for doing so or the affected individual has given explicit consent to the individual instance of data sharing. \r\n* Second, consent can play a role when weighing private interests. \r\n* Third, consent can be part of the required legal basis, namely as a prerequisite. This is the case primarily in two fields: medical treatment and research. For medical treatment, the Health Act does specify the fundamental task of treating patients, but simultaneously ties this treatment to their consent. A person may only receive medical treatment without consent in exceptional cases. We will examine the second area, research, more closely below. \r\n\r\n\r\n<br>\r\n##Consent in research\r\n\r\nSimilar to medical treatment, it is also the case for research that the laws permit universities, universities of applied sciences and other institutions to conduct research. Whether my data can be used for research is something I get to decide for myself. In other words, my consent is required. This is set forth in the Human Research Act. The Human Research Act permits the further use of health data for research purposes *without the consent of the affected individual* only under very limited circumstances: namely, when they are anonymized or, in some cases, pseudonymized. Only then can the consent be revoked via an opt-out option. This means that, if the affected person has not expressly opted out, their (non-genetic) health data may be used in anonymized or pseudonymized form to conduct research.\r\n\r\nEven when it comes to questionnaires and surveys, the data can only be collected and processed with the consent of the person being surveyed. Consent in this context means *informed consent*. This means voluntary consent (to a particular instance of data processing) after receiving sufficient prior information. For such *informed consent,* the person must be informed about the purpose and risks of the research. They must be informed of what will be done with their data, in what form the data will be processed, and whether it will be anonymized or pseudonymized.\r\n\r\nThus, without consent it is only permissible to conduct research with personal data if there is a legal basis for the use of the data. This is permitted under two conditions, which are outlined in § 10 and 22 IDG. We will now examine them in closer detail. The first such condition is *further processing,* and the other is the *publication* of personal data.\r\n\r\n\r\n<br>\r\n##§ 10 IDG\r\n\r\nThe further processing of personal data held by a public institution for the fulfillment of its legal task for a different purpose is regulated in § 10 IDG. Examples of this include statistics, planning and research. But this requires us to take some additional requirements into consideration:\r\n\r\n<br>\r\n\r\n* First, this data may no longer be used or shared for an *individual-related purpose*. \r\n* Second, this data must be *anonymized or pseudonymized* as soon as the processing purpose permits. \r\n* Third, the results of this data processing may only be published in a form that makes it *impossible to trace the data back to the affected individual*.\r\n\r\n\r\nThe Change of purpose is especially important here, as the data was initially collected and processed for an individual-related purpose in order to fulfill the legal task. For a secondary use as laid out in § 10 IDG, however, it can only be used for a *non-individual-related purpose*. Conversely, however, permission to change the purpose means that the use of data for non-individual-related purposes is included in the use for individual-related purposes. This means that if a public institution is permitted to process personal data for an individual-related purpose, then it may also further process the same data for non-individual-related purposes such as statistics, research or planning without further consent.\r\n\r\nThe social welfare office, for example, may process someone’s data in order to find out whether that person is in need and to provide them with any necessary social welfare assistance. This is clearly an individual-related purpose: it has to do with the individual and decisions that affect the individual. If this data is then re-used for research purposes, the purpose is no longer individual-related. Instead, it may be a matter of determining, for example, what factors influence people’s needs in general.\r\n\r\n\r\n<br>\r\n##§ 22 IDG\r\n\r\nThe § 22 IDG relates to the publication of personal data, as above, for a *non-individual-related* purpose. This relates to data that a public institution passes on to third parties for further use. For example, the social welfare office is allowed to share data with researchers who are working on a sociological research project. Here too, certain conditions must be met that are similar to those required for further use of the data by the public institution itself:\r\n\r\n<br>\r\n\r\n* First, there must be no *special confidentiality provisions* preventing the disclosure of the data. This means that we first have to check where the data is subject to any special governmental or professional secrecy that prohibits its disclosure. We can only release the data to researchers if this is not the case. \r\n* Second, this data must be *anonymized or pseudonymized* as soon as permitted by the purpose for data processing. \r\n* Third, the data/analysis may only be published in a form that makes it *impossible to trace the data back to the affected individual*.\r\n\r\n\r\nThese requirements apply to the disclosure of personal data for a non-individual-related purpose to other public institutions in the Canton, in other cantons, or to federal institutions. Additional requirements apply to the release of data to private parties. In such cases, we must oblige these private recipients to:\r\n\r\n<br>\r\n\r\n* first, not process the personal data for other purposes, \r\n* second, not share the personal data with third parties, \r\n* and, third, ensure information security. \r\n\r\nThese requirements are only needed for release of data to private parties and not to public institutions because the public institutions are already obliged to these requirements.\r\n\r\n\r\n<br>\r\n\r\n##Anonymization and pseudonymization\r\n\r\nAnonymization occurs when the personal reference has been irreversibly removed so that re-identification is no longer possible without disproportionate effort. Simply removing clearly identifying information such as names, birth dates and addresses is generally not sufficient to achieve anonymization. Pseudonymized data, on the other hand, involves retaining the individual reference but replacing it with a key (e.g. a code or ID). Pseudonymized data continues to be considered personal data as long as it remains possible to reverse the anonymization at a later time. If the re-identification key still exists, the pseudonymized data is considered personal data for everyone who has access to the key.\r\n\r\nAs we have seen, it is important in both cases to anonymize or pseudonymize data as soon as the processing purpose allows. But what does that mean in concrete terms? When does a purpose allow for anonymization or pseudonymization of data? Most of the time, it can be done quite early on. In some circumstances, it can even be the case that a public institution already has to anonymize or pseudonymize data if it doesn’t need the data for an individual-related purpose. It is trickier when the data comes from different sources and one has to be able to match them to each other. Then anonymization is impossible, and pseudonymization is only possible if it is kept the same for every instance of data sharing. In such cases, we have to carefully consider when the purpose allows for the data to be anonymized or pseudonymized (see also the principle of *proportionality)*.\r\n\r\n\r\n<br>\r\n##Summary\r\n\r\nLet’s finish by summing up the key points on consent:\r\n\r\n<br>\r\n\r\n* Consent alone does not provide sufficient justification for a public institution to collect and process data. It can justify the disclosure of data, however, as provided for in § 21 IDG. \r\n* In some cases, special laws require consent in addition to a legal basis. This applies, for example, to health professionals, who have the legal task of treating patients, but who nonetheless require the individual and explicit consent of the relevant individual for each specific instance of treatment. \r\n* The IDG permits further use or release of personal data without consent under certain circumstances, as long as there are no confidentiality provisions. The new purpose must be non-individual-related, the data must be anonymized or pseudonymized as soon as the purpose allows it, and analyses can only be published in a form that makes it impossible to identify the individuals involved.', 'Die Einwilligung genügt für ein öffentliches Organ zwar nicht als Rechtfertigung zur Datenbearbeitung, spielt aber in einigen Fällen trotzdem eine Rolle.\r\n{.lead}\r\n\r\nWenn wir als öffentliches Organ Personendaten bearbeiten wollen, dann brauchen wir dafür immer eine gesetzliche Grundlage. Eine Einwilligung der betroffenen Personen genügt nicht und kann die Rechtsgrundlage nicht ersetzen. Trotzdem ist die Einwilligung unter bestimmten Umständen durchaus von Bedeutung.\r\n\r\n<br>\r\n\r\n* Erstens kann mit einer Einwilligung eine Datenbekanntgabe gerechtfertigt werden. Das ist im § 21 des IDG vorgesehen. Wenn ein öffentliches Organ also rechtmässig über bestimmte Personendaten verfügt, dann darf es diese Daten weitergeben, sofern dafür entweder eine weitere gesetzliche Grundlage besteht oder sofern die betroffene Person im Einzelfall ausdrücklich eingewilligt hat.\r\n* Zweitens kann die Einwilligung bei einer Abwägung der privaten Interessen von Bedeutung sein.\r\n* Drittens kann die Einwilligung Bestandteil der erforderlichen gesetzlichen Grundlage sein, und zwar als eine Voraussetzung. Das ist vor allem in zwei Bereichen der Fall: bei der medizinischen Behandlung und bei der Forschung. Bei der medizinischen Behandlung gibt das Gesundheitsgesetz zwar grundsätzlich die Aufgabe vor, Patient:innen zu behandeln, knüpft diese Behandlung aber zugleich an deren Einwilligung. Nur in Ausnahmefällen darf jemand ohne Einwilligung medizinisch behandelt werden. Die Forschung als zweiten Bereich werden wir uns im Folgenden ausführlicher anschauen.\r\n\r\n<br>\r\n##Die Einwilligung in der Forschung\r\n\r\nÄhnlich wie bei medizinischen Behandlungen ist es auch bei der Forschung so, dass Gesetze es Universitäten, Fachhochschulen und Institutionen erlauben zu forschen. Ob aber konkret mit meinen Daten geforscht werden darf, das habe ich zu entscheiden. Es braucht also meine Einwilligung dafür. Im Bereich der Forschung mit Menschen ist das im Humanforschungsgesetz festgelegt. Das Humanforschungsgesetz erlaubt die Weiterverwendung von Gesundheitsdaten zu Forschungszwecken *ohne die Einwilligung der betroffenen Person* nur unter sehr eingeschränkten Voraussetzungen: nämlich dann, wenn sie anonymisiert oder unter Umständen pseudonymisiert sind. Nur dann kann die Einwilligung abgelöst werden durch eine Widerspruchsmöglichkeit. Das heisst, wenn die betroffene Person nicht ausdrücklich widersprochen hat, darf mit ihren (nicht genetischen) Gesundheitsdaten in anonymisierter bzw. pseudonymisierter Form geforscht werden.\r\n\r\nAuch bei Befragungen oder Erhebungen dürfen die Daten nur mit Einwilligung der befragten Person erhoben und bearbeitet werden. In diesem Kontext meint Einwilligung *informed consent*, das heisst die freiwillige Zustimmung (zu einer bestimmten Datenbearbeitung) nach hinreichender vorgängiger Information. Für einen solchen *informed consent* muss die befragte Person also über den Zweck und über die Risiken aufgeklärt werden. Sie muss darüber informiert werden, was mit ihren Daten gemacht werden soll, in welcher Form die Daten bearbeitet werden und ob sie anonymisiert oder pseudonymisiert werden.\r\n\r\nOhne eine Einwilligung darf also nur dann mit Personendaten geforscht werden, wenn für die Verwendung der Daten eine gesetzliche Grundlage besteht. Das ist unter zwei Voraussetzungen zulässig, die im IDG unter § 10 und § 22 vorgesehen sind und die wir uns nun genauer ansehen werden. Dabei geht es einerseits um die *Weiterbearbeitung* und andererseits um die *Bekanntgabe* von Personendaten.\r\n\r\n<br>\r\n##§ 10 IDG\r\n\r\nDer § 10 IDG betrifft die Weiterbearbeitung von Personendaten, die ein öffentliches Organ zur Erfüllung seiner gesetzlichen Ausgabe besitzt, zu einem anderen Zweck. Dazu zählen beispielsweise Statistik, Planung oder Forschung. Dafür müssen wir allerdings bestimmte Auflagen berücksichtigen:\r\n\r\n<br>\r\n\r\n* Erstens dürfen diese Daten *nicht mehr zu einem personenbezogenen Zweck* verwendet oder weitergegeben werden.\r\n* Zweitens müssen die Daten *anonymisiert oder pseudonymisiert* werden, sobald es der Bearbeitungszweck erlaubt.\r\n* Drittens dürfen die Ergebnisse dieser weiteren Bearbeitung nur in so einer Form bekannt gegeben werden, dass *keinerlei Rückschlüsse auf die betroffenen Personen* mehr möglich sind.\r\n\r\nBesonders wichtig ist hier die Zweckänderung. Denn die Daten wurden ja zunächst zur Erfüllung der gesetzlichen Aufgabe zu einem personenbezogenen Zweck erhoben und bearbeitet. Für eine Zweitverwendung, wie sie im § 10 IDG vorgesehen ist, dürfen sie aber nur noch zu einem *nicht-personenbezogenen Zweck* verwendet werden. Umgekehrt bedeutet die Erlaubnis der Zweckänderung allerdings, dass die Verwendung von Daten zu nicht-personenbezogenen Zwecken in der Verwendung zu personenbezogenen Zwecken inbegriffen ist. Das heisst: Wenn ein öffentliches Organ Personendaten personenbezogen bearbeiten darf, dann darf es diese Daten auch ohne weitere Einwilligung zu einem nicht-personenbezogenen Zweck wie Statistik, Forschung oder Planung weiterverwenden.\r\n\r\nSo bearbeitet beispielsweise die Sozialhilfe Daten von einer Person, um herauszufinden, ob diese Person bedürftig ist und um ihr allenfalls Sozialhilfe zukommen zu lassen. Das ist eindeutig ein personenbezogener Zweck: Es geht um die Person und um Entscheide, die diese Person betreffen. Wenn diese Daten nun zu Forschungszwecken weiterverwendet werden sollen, so ist der Zweck nicht mehr personenbezogen, sondern es geht beispielsweise darum festzustellen, welche Faktoren einen Einfluss auf die Bedürftigkeit von Menschen allgemein haben.\r\n\r\n<br>\r\n##§ 22 IDG\r\n\r\nDer § 22 IDG betrifft die Bekanntgabe von Personendaten, wie schon im vorigen Abschnitt, zu einem *nicht-personenbezogenen* Zweck. Das betrifft Daten, die ein öffentliches Organ an Dritte weitergibt, damit diese sie weiterverwenden können. So darf beispielsweise die Sozialhilfe Daten an Forschende weitergeben, die an einem soziologischen Projekt arbeiten. Auch hier müssen aber bestimmte Voraussetzungen erfüllt sein, die ähnlich sind wie bei der Weiterverwendung der Daten durch das öffentliche Organ selbst:\r\n\r\n<br>\r\n\r\n* Erstens dürfen der Weitergabe der Daten *keine besonderen Geheimhaltungsbestimmungen* entgegenstehen. Das heisst, wir müssen zunächst prüfen, ob die Daten einem besonderen Amts- oder Berufsgeheimnis unterstehen, die eine Weitergabe verbieten. Nur wenn das nicht der Fall ist, dürfen wir die Daten an Forschende weitergeben.\r\n* Zweitens müssen die Daten *anonymisiert oder pseudonymisiert* werden, sobald es der Bearbeitungszweck erlaubt.\r\n* Drittens dürfen die Auswertungen nur in so einer Form bekannt gegeben werden, dass *keinerlei Rückschlüsse auf die betroffenen Personen* mehr möglich sind.\r\n\r\nDiese Voraussetzungen gelten für die Bekanntgabe von Personendaten zu einem nicht-personenbezogenen Zweck an andere öffentliche Organe im Kanton, in anderen Kantonen oder im Bund. Wenn wir die Daten aber an Private weitergeben wollen, gelten zusätzliche Voraussetzungen. Dann müssen wir diese privaten Empfänger*innen dazu verpflichten, dass sie:\r\n\r\n<br>\r\n\r\n* erstens die Personendaten nicht für andere Zwecke bearbeiten,\r\n* zweitens die Personendaten nicht an Dritte weitergeben\r\n* und drittens für die Informationssicherheit sorgen.\r\n\r\nDiese Auflage braucht es nur bei der Weitergabe von Daten an Private und nicht an öffentliche Organe, weil die öffentlichen Organe bereits zu diesen Punkten verpflichtet sind.\r\n\r\n<br>\r\n\r\n##Anonymisierung und Pseudonymisierung\r\n\r\nEine Anonymisierung liegt vor, wenn der Personenbezug irreversibel aufgehoben wurde, sodass die Re-Identifikation nicht mehr ohne unverhältnismässigen Aufwand möglich ist. Auch wenn klar identifizierende Merkmale wie Name, Geburtsdatum oder Adresse entfernt werden, reicht dies in der Regel noch nicht zwingend aus, um eine Re-Identifikation auszuschliessen. Bei pseudonymisierten Daten liegt hingegen noch ein Personenbezug vor, wobei dieser mittels Schlüssel (z. B. einem Code oder einer ID) ersetzt wird. Pseudonymisierte Daten gelten solange als Personendaten, wie die Anonymisierung zu einem späteren Zeitpunkt wieder rückgängig gemacht werden kann. Ist der Schlüssel zur Re-Identifikation noch vorhanden, gelten die pseudonymisierten Daten als Personendaten für sämtliche Personen, die einen Zugang zu diesem Schlüssel haben.\r\n\r\nWie wir gesehen haben, ist es in beiden Fällen wichtig, dass wir die Daten anonymisieren oder pseudonymisieren, sobald es der Bearbeitungszweck erlaubt. Aber was bedeutet das konkret? Ab wann erlaubt es ein Zweck, dass wir Daten anonymisieren oder pseudonymisieren? In der Regel ist das recht früh möglich. Es kann sogar unter Umständen sein, dass ein öffentliches Organ Daten bereits anonymisieren oder pseudonymisieren muss, wenn es die Daten gar nicht selbst personenbezogen braucht. Schwieriger ist es, wenn die Daten aus unterschiedlichen Quellen stammen und man sie einander zuordnen können muss. Dann ist eine Anonymisierung nicht möglich und eine Pseudonymisierung nur, wenn sie bei jeder Weitergabe gleichartig ist. In so einem Fall muss abgewägt werden, wann der Zweck es zulässt, die Daten zu anonymisieren oder zu pseudonymisieren (vgl. auch den Grundsatz der *Verhältnismässigkeit*).\r\n\r\n<br>\r\n##Zusammenfassung\r\n\r\nFassen wir abschliessend die wichtigsten Punkte zur Einwilligung zusammen:\r\n\r\n<br>\r\n\r\n* Eine Einwilligung allein genügt für ein öffentliches Organ nicht als Rechtfertigung, um Daten zu erheben und zu bearbeiten. Sie kann aber eine Bekanntgabe rechtfertigen, wie sie im § 21 IDG vorgesehen ist.\r\n* Unter Umständen machen Spezialgesetze es erforderlich, dass wir als Voraussetzung zusätzlich zur gesetzlichen Grundlage eine Einwilligung brauchen. Das gilt etwa für Gesundheitsfachpersonen, die zwar als gesetzliche Aufgabe die Behandlung von Patient:innen haben, aber trotzdem bei jeder konkreten Behandlung individuell die ausdrückliche Einwilligung der jeweiligen Person brauchen.\r\n* Das IDG erlaubt unter bestimmten Umständen eine Weiterverwendung oder Weitergabe von Personendaten ohne eine Einwilligung, sofern es keine Geheimhaltungsbestimmungen gibt. Der neue Zweck muss dafür nicht-personenbezogen sein, die Daten müssen anonymisiert oder pseudonymisiert werden, sobald es der Zweck zulässt, und die Auswertungen dürfen nur so bekannt gegeben werden, dass man nicht mehr feststellen kann, um welche Person(en) es sich handelt.', 'Although consent does not suffice as a justification for a public institution to process data, it nonetheless plays a role in some cases.\r\n{.lead}\r\n\r\nWhenever we, as a public institution, plan to process personal data, we need a legal basis for doing so. Consent from the affected individual does not suffice, nor does it replace the legal basis. However, in certain circumstances, consent is still significant.\r\n\r\n<br>\r\n\r\n* First, a release of data can be justified with consent. This is stipulated in § 21 IDG. If a public institution possesses certain personal data legally, it can disclose this data as long as there is either a further legal basis for doing so or the affected individual has given explicit consent to the individual instance of data sharing. \r\n* Second, consent can play a role when weighing private interests. \r\n* Third, consent can be part of the required legal basis, namely as a prerequisite. This is the case primarily in two fields: medical treatment and research. For medical treatment, the Health Act does specify the fundamental task of treating patients, but simultaneously ties this treatment to their consent. A person may only receive medical treatment without consent in exceptional cases. We will examine the second area, research, more closely below. \r\n\r\n\r\n<br>\r\n##Consent in research\r\n\r\nSimilar to medical treatment, it is also the case for research that the laws permit universities, universities of applied sciences and other institutions to conduct research. Whether my data can be used for research is something I get to decide for myself. In other words, my consent is required. This is set forth in the Human Research Act. The Human Research Act permits the further use of health data for research purposes *without the consent of the affected individual* only under very limited circumstances: namely, when they are anonymized or, in some cases, pseudonymized. Only then can the consent be revoked via an opt-out option. This means that, if the affected person has not expressly opted out, their (non-genetic) health data may be used in anonymized or pseudonymized form to conduct research.\r\n\r\nEven when it comes to questionnaires and surveys, the data can only be collected and processed with the consent of the person being surveyed. Consent in this context means *informed consent*. This means voluntary consent (to a particular instance of data processing) after receiving sufficient prior information. For such *informed consent,* the person must be informed about the purpose and risks of the research. They must be informed of what will be done with their data, in what form the data will be processed, and whether it will be anonymized or pseudonymized.\r\n\r\nThus, without consent it is only permissible to conduct research with personal data if there is a legal basis for the use of the data. This is permitted under two conditions, which are outlined in § 10 and 22 IDG. We will now examine them in closer detail. The first such condition is *further processing,* and the other is the *publication* of personal data.\r\n\r\n\r\n<br>\r\n##§ 10 IDG\r\n\r\nThe further processing of personal data held by a public institution for the fulfillment of its legal task for a different purpose is regulated in § 10 IDG. Examples of this include statistics, planning and research. But this requires us to take some additional requirements into consideration:\r\n\r\n<br>\r\n\r\n* First, this data may no longer be used or shared for an *individual-related purpose*. \r\n* Second, this data must be *anonymized or pseudonymized* as soon as the processing purpose permits. \r\n* Third, the results of this data processing may only be published in a form that makes it *impossible to trace the data back to the affected individual*.\r\n\r\n\r\nThe Change of purpose is especially important here, as the data was initially collected and processed for an individual-related purpose in order to fulfill the legal task. For a secondary use as laid out in § 10 IDG, however, it can only be used for a *non-individual-related purpose*. Conversely, however, permission to change the purpose means that the use of data for non-individual-related purposes is included in the use for individual-related purposes. This means that if a public institution is permitted to process personal data for an individual-related purpose, then it may also further process the same data for non-individual-related purposes such as statistics, research or planning without further consent.\r\n\r\nThe social welfare office, for example, may process someone’s data in order to find out whether that person is in need and to provide them with any necessary social welfare assistance. This is clearly an individual-related purpose: it has to do with the individual and decisions that affect the individual. If this data is then re-used for research purposes, the purpose is no longer individual-related. Instead, it may be a matter of determining, for example, what factors influence people’s needs in general.\r\n\r\n\r\n<br>\r\n##§ 22 IDG\r\n\r\nThe § 22 IDG relates to the publication of personal data, as above, for a *non-individual-related* purpose. This relates to data that a public institution passes on to third parties for further use. For example, the social welfare office is allowed to share data with researchers who are working on a sociological research project. Here too, certain conditions must be met that are similar to those required for further use of the data by the public institution itself:\r\n\r\n<br>\r\n\r\n* First, there must be no *special confidentiality provisions* preventing the disclosure of the data. This means that we first have to check where the data is subject to any special governmental or professional secrecy that prohibits its disclosure. We can only release the data to researchers if this is not the case. \r\n* Second, this data must be *anonymized or pseudonymized* as soon as permitted by the purpose for data processing. \r\n* Third, the data/analysis may only be published in a form that makes it *impossible to trace the data back to the affected individual*.\r\n\r\n\r\nThese requirements apply to the disclosure of personal data for a non-individual-related purpose to other public institutions in the Canton, in other cantons, or to federal institutions. Additional requirements apply to the release of data to private parties. In such cases, we must oblige these private recipients to:\r\n\r\n<br>\r\n\r\n* first, not process the personal data for other purposes, \r\n* second, not share the personal data with third parties, \r\n* and, third, ensure information security. \r\n\r\nThese requirements are only needed for release of data to private parties and not to public institutions because the public institutions are already obliged to these requirements.\r\n\r\n\r\n<br>\r\n\r\n##Anonymization and pseudonymization\r\n\r\nAnonymization occurs when the personal reference has been irreversibly removed so that re-identification is no longer possible without disproportionate effort. Simply removing clearly identifying information such as names, birth dates and addresses is generally not sufficient to achieve anonymization. Pseudonymized data, on the other hand, involves retaining the individual reference but replacing it with a key (e.g. a code or ID). Pseudonymized data continues to be considered personal data as long as it remains possible to reverse the anonymization at a later time. If the re-identification key still exists, the pseudonymized data is considered personal data for everyone who has access to the key.\r\n\r\nAs we have seen, it is important in both cases to anonymize or pseudonymize data as soon as the processing purpose allows. But what does that mean in concrete terms? When does a purpose allow for anonymization or pseudonymization of data? Most of the time, it can be done quite early on. In some circumstances, it can even be the case that a public institution already has to anonymize or pseudonymize data if it doesn’t need the data for an individual-related purpose. It is trickier when the data comes from different sources and one has to be able to match them to each other. Then anonymization is impossible, and pseudonymization is only possible if it is kept the same for every instance of data sharing. In such cases, we have to carefully consider when the purpose allows for the data to be anonymized or pseudonymized (see also the principle of *proportionality)*.\r\n\r\n\r\n<br>\r\n##Summary\r\n\r\nLet’s finish by summing up the key points on consent:\r\n\r\n<br>\r\n\r\n* Consent alone does not provide sufficient justification for a public institution to collect and process data. It can justify the disclosure of data, however, as provided for in § 21 IDG. \r\n* In some cases, special laws require consent in addition to a legal basis. This applies, for example, to health professionals, who have the legal task of treating patients, but who nonetheless require the individual and explicit consent of the relevant individual for each specific instance of treatment. \r\n* The IDG permits further use or release of personal data without consent under certain circumstances, as long as there are no confidentiality provisions. The new purpose must be non-individual-related, the data must be anonymized or pseudonymized as soon as the purpose allows it, and analyses can only be published in a form that makes it impossible to identify the individuals involved.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '15 minutes', 7, 'published', False, None, None, None, None, 172), (1025, datetime.datetime(2021, 11, 16, 15, 39, 22, 38720, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 21, 818445, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 21, 760766, tzinfo=datetime.timezone.utc), False, 'Contract data processing', 'Auftragsdatenbearbeitung', 'Contract data processing', None, '', None, None, None, 'In this video, Danielle Kaufmann explains what you need to pay attention to when outsourcing data processing.', 'In diesem Video erklärt Danielle Kaufmann, worauf Sie bei der Auftragsdatenbearbeitung achten müssen.', 'In this video, Danielle Kaufmann explains what you need to pay attention to when outsourcing data processing.', None, '', 'contract-data-processing', 'When personal data is processed by third parties, the responsibility still remains with the public institution. This requires us to pay attention to a few points.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638590966?h=6b750229bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-9_auftragsdatenbearbeitung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>\r\n\r\n[Contract Data Processing Guide](https://www.dsb.bs.ch/handreichungen/leitfaden-auftragsdatenbearbeitung.html){:target=“_blank”}', 'Wenn Personendaten von Dritten bearbeitet werden, bleibt die Verantwortung trotzdem beim öffentlichen Organ – deshalb müssen wir einige Punkte beachten.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638590966?h=6b750229bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-9_auftragsdatenbearbeitung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>\r\n\r\n[Leitfaden Auftragsdatenbearbeitung](https://www.dsb.bs.ch/handreichungen/leitfaden-auftragsdatenbearbeitung.html){:target=“_blank”}', 'When personal data is processed by third parties, the responsibility still remains with the public institution. This requires us to pay attention to a few points.\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/638590966?h=6b750229bd&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-9_auftragsdatenbearbeitung.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>\r\n\r\n[Contract Data Processing Guide](https://www.dsb.bs.ch/handreichungen/leitfaden-auftragsdatenbearbeitung.html){:target=“_blank”}', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TV', '5 minutes', 8, 'published', False, None, None, None, None, 172), (1026, datetime.datetime(2021, 11, 16, 16, 4, 40, 935129, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 41, 572350, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 41, 513142, tzinfo=datetime.timezone.utc), False, 'Data processing in the cloud', 'Datenbearbeitungen in der Cloud', 'Data processing in the cloud', None, '', None, None, None, 'In this article, you will learn about the special challenges involved in processing data in the cloud.', 'In diesem Artikel erfahren Sie, welche besonderen Herausforderungen es bei Datenbearbeitungen in der Cloud gibt.', 'In this article, you will learn about the special challenges involved in processing data in the cloud.', None, '', 'data-processing-in-the-cloud', 'Cloud solutions are a special case of outsourcing data processing. They come with some particular challenges.\r\n{.lead}\r\n\r\nWhen we use cloud solutions, it is a form of outsourced data processing by a public institution. It involves transferring the data processing to an external system, which causes us to lose some of the control over the data, because we don’t know exactly what server it is located on, who is responsible for it, and what happens to it. These are the challenges and risks of outsourcing in general, but they are somewhat amplified when outsourcing to the cloud.\r\n\r\n<br>\r\n##Risks\r\n\r\nThere are also additional cloud-specific risks that we must respond to with cloud-specific measures. Because even with this form of outsourcing the public institution remains responsible for the personal data, even if it is no longer under full control. But let’s take it one step at a time. First, we must use the usual rules for contract data processing to check whether it is even permissible for the data processing to be outsourced. If it is permissible and we want to use cloud technologies, we must then check what specific data protection risks will be involved as a result. There are risks in a variety of areas when it comes to third-party cloud solutions.\r\n\r\n<br>\r\n\r\n1. We often don’t know where the data processing will occur, and it’s difficult to find out. \r\n<br>\r\n<br>\r\n2. There are fewer opportunities for monitoring, because it can be difficult to clearly delineate data processing operations in cloud infrastructure.\r\n<br>\r\n<br>\r\n3. The leeway is often very limited in the standard offerings, and it can hardly be negotiated. \r\n<br>\r\n<br>\r\n4.\tIt is more difficult to enforce claims under data protection law. This applies to the rights to erasure and correction, for example, and depends on the relevant applicable law and where the servers with the data are located.\r\n<br>\r\n<br> \r\n5. The confidentiality of the data can be compromised if third parties have access to the data from within cloud applications. \r\n<br>\r\n<br>\r\n6. Access by foreign authorities can sometimes be a problem. If the data is located in a foreign country, it can be accessed by the authorities there more easily than if it were located in Switzerland. This risk applies especially to US cloud service providers because they are required by the *US CLOUD Act* to allow US authorities access to the data regardless of whether the servers are located in the US or in a different country.\r\n\r\n\r\n<br>\r\n##Solutions\r\n\r\nHow can we deal with these risks? The public institution remains responsible for the data, so it must first examine these risks and consider comprehensively whether they are acceptable. When considering this, the **applicable laws and jurisdiction,** the **location of data processing** and **protection of secrecy** are especially important. \r\n\r\nWith regard to the **applicable laws and place of jurisdiction,** we must sometimes make a fundamental decision. Let’s assume that we sign a contract under foreign law. We are still responsible for the personal data and must therefore account for any breaches of contract. This could mean, for example, that we might have to file a suit in accordance with Irish or US law, and thus might not be able to fulfill our responsibility well or at all. So there are some very compelling reasons, when we weigh the risks, for deciding against signing a contract.\r\n\r\nIn the case of cloud solutions, the **location of data processing** is the location of the servers on which the data is stored. We must ask ourselves: where are the servers, and thus our data, located? Are they located in a country with appropriate data protection or with data protection law that is equivalent to ours here in Switzerland, or not? When weighing decisions about cloud services, providers from countries with equivalent laws would be preferable to providers in countries without any equivalent level of data protection.\r\n\r\n**Protection of secrecy** has to do with protection of confidentiality. In principle, third parties should not be able to access the data of our citizens or our patients. We protect data from this by encrypting it. Secure encryption is only assured when the public institution encrypts the data itself and also only possesses the key for decrypting the data and making it readable again. Data that is on its way to the cloud (data in transit) or data that is saved somewhere (data addressed) is relatively easy to encrypt. Most cloud services don’t just offer storage solutions, but also allow data to be processed within the cloud. That is only possible if the cloud provider has the key.\r\n\r\n\r\n<br>\r\n##Risk analysis\r\n\r\nA comprehensive risk assessment requires us to take all these points into consideration for each specific case and to decide on this basis whether or not we can outsource data processing to the cloud. We must conduct a comprehensive risk analysis for this purpose in advance. This risk analysis must include the cloud-specific risks for the individual instances of data processing and demonstrate corresponding protective measures for eliminating these risks or reducing them to an acceptable level. If that is not possible, we should avoid the cloud solution. Otherwise, the public institution will bear the residual risk, which could have financial and other implications.\r\n\r\nThe Data Protection Officer for the Canton of Basel-Stadt provides a [Cloud Fact Sheet](https://www.dsb.bs.ch/handreichungen/privatim-merkblatt-cloud.html){:target=“_blank”} created by the Conference of Swiss Data Protection Officers on their website. There you can find further information on this topic.', 'Ein Spezialfall der Auslagerung von Datenbearbeitungen sind Cloud-Lösungen. Hier erwarten uns besondere Herausforderungen.\r\n{.lead}\r\n\r\nWenn wir Cloud-Lösungen benutzen, handelt es sich um einen Fall der Auftragsdatenbearbeitung durch ein öffentliches Organ. Dabei werden die Datenbearbeitungen ausgelagert auf ein externes System, wobei wir einen Teil der Kontrollhoheit über die Daten verlieren, denn wir wissen nicht genau, auf welchem Server und in wessen Verantwortung sie dann liegen und was mit ihnen passiert. Das sind schon ganz allgemein Herausforderungen und Risiken des Outsourcings, erst recht aber bei Auslagerungen in die Cloud.\r\n\r\n<br>\r\n##Risiken\r\n\r\nDarüber hinaus gibt es nämlich auch cloudspezifische Risiken, denen wir wiederum mit cloudspezifischen Massnahmen begegnen müssen. Denn auch bei dieser Form der Auslagerung bleibt das öffentliche Organ vollumfänglich verantwortlich für die Personendaten, selbst wenn wir nicht mehr die volle Kontrolle darüber haben. Gehen wir also schrittweise vor. Zuerst müssen wir nach den üblichen Regeln für die Auftragsdatenbearbeitung prüfen, ob die Bearbeitung der Daten überhaupt ausgelagert werden darf. Wenn das zulässig ist und wir Cloudtechnologien nutzen wollen, müssen wir als nächstes prüfen, was die spezifischen datenschutzrechtlichen Risiken sind, die dadurch entstehen. Bei Cloudlösungen von Drittanbietern begegnen uns Risiken in verschiedenen Bereichen.\r\n\r\n<br>\r\n\r\n1. Wir wissen oft nicht genau, wo die Datenbearbeitung erfolgt, und es ist schwieriger, es herauszufinden.\r\n<br>\r\n<br>\r\n2. Die Kontrollmöglichkeiten werden kleiner, denn es kann schwierig sein, die Datenbearbeitung auf Cloudinfrastrukturen fest abzugrenzen.\r\n<br>\r\n<br>\r\n3. Der Gestaltungsspielraum ist bei Standardangeboten in der Regel recht klein und es kann kaum verhandelt werden.\r\n<br>\r\n<br>\r\n4. Es ist schwieriger, datenschutzrechtliche Ansprüche durchzusetzen. Das betrifft etwa Löschungs- und Berechtigungsansprüche und ist abhängig davon, welches Recht anwendbar ist und wo die Server mit den Daten stehen.\r\n<br>\r\n<br>\r\n5. Die Vertraulichkeit der Daten kann gefährdet sein, wenn innerhalb von Cloudanwendungen Dritte Zugang zu den Daten haben.\r\n<br>\r\n<br>\r\n6. Unter Umständen sind Zugriffe von ausländischen Behörden ein Problem. Wenn Daten im Ausland liegen, können sie einfacher von den dortigen Behörden behändigt werden, als wenn sie in der Schweiz gelagert wären. Dieses Risiko droht vor allem bei US-amerikanischen Anbietern, weil sie durch den *US CLOUD Act* dazu verpflichtet sind, den US-Behörden Zugriff auf die Daten zu gewähren, und zwar unabhängig davon, ob sie auf Servern in den USA liegen oder in einem anderen Land.\r\n\r\n<br>\r\n##Lösungen\r\n\r\nWie können wir mit diesen Risiken umgehen? Das öffentliche Organ bleibt verantwortlich für die Daten, deshalb muss es sich diese Risiken zunächst ansehen und umfassend abwägen, ob sie tragbar sind. Besonders wichtig sind dabei das **anwendbare Recht und der Gerichtsstand**, der **Ort der Datenbearbeitung** und der **Geheimnisschutz**. \r\n\r\nIn Bezug auf das **anwendbare Recht und den Gerichtsstand** müssen wir mitunter eine grundsätzliche Entscheidung treffen. Nehmen wir an, wir schliessen einen Vertrag nach ausländischem Recht ab. Wir sind dann noch immer für die Personendaten verantwortlich und müssen deshalb auch noch immer Vertragsverletzungen durchsetzen. Das könnte bedeuten, dass wir dafür beispielsweise nach irischem oder nach US-amerikanischem Recht klagen müssten und unsere Verantwortung schlecht oder gar nicht durchsetzen könnten. Es gibt also mitunter gute Gründe, sich bei der Risikoabwägung grundsätzlich gegen einen Vertragsabschluss nach ausländischem Recht zu entscheiden.\r\n\r\nDer **Ort der Datenbearbeitung** ist im Falle von Cloudlösungen der Ort der Server, auf denen die Daten liegen. Wir müssen uns fragen: Wo befinden sich diese Server und damit unsere Daten? Stehen sie in einem Land mit angemessenem Datenschutz bzw. mit einem gleichwertigen Datenschutzrecht wie bei uns in der Schweiz oder nicht? Anbieter aus Staaten mit einer solchen Gleichwertigkeit wären in einer Abwägung Anbietern vorzuziehen, in deren Staaten kein gleichwertiges Datenschutzniveau garantiert ist.\r\n\r\nDer **Geheimnisschutz** wiederum betrifft den Schutz der Vertraulichkeit. Grundsätzlich sollen Dritte nicht auf die Daten etwa unserer Bürgerinnen und Bürger oder unserer Patientinnen und Patienten zugreifen können. Davor schützen wir die Daten, indem wir sie verschlüsseln. Eine sichere Verschlüsselung ist nur dann gegeben, wenn das öffentliche Organ die Daten selbst verschlüsselt und auch nur selbst den Schlüssel besitzt, mit dem man die Daten wieder entschlüsseln und lesbar machen kann. Daten, die auf dem Weg in die Cloud sind (*data in transit*), oder Daten, die irgendwo gespeichert sind (*data addressed*), kann man relativ leicht verschlüsseln. Meistens bieten Cloudangebote aber nicht nur eine Speicherlösung an, sondern die Daten können innerhalb der Cloud auch bearbeitet werden. Das wiederum ist nur möglich, wenn auch die Cloudanbieterin über den Schlüssel verfügt.\r\n\r\n<br>\r\n##Risikoanalyse\r\n\r\nBei einer umfassenden Risikoabwägung müssen wir in jedem konkreten Fall alle diese Punkte in Betracht ziehen und auf dieser Basis entscheiden, ob wir eine Datenbearbeitung in die Cloud auslagern können oder nicht. Zu diesem Zweck erstellen wir vorab eine umfassende Risikoanalyse. In dieser Risikoanalyse führen wir an, welche cloudspezifischen Risiken für die einzelnen Datenbearbeitungen bestehen, und zeigen entsprechende Schutzmassnahmen auf, mit denen wir diese Risiken ausschliessen oder auf ein tragbares Mass reduzieren können. Wenn das nicht möglich ist, sollten wir auf die Cloudlösung verzichten. Ansonsten trägt das öffentliche Organ ausdrücklich das Restrisiko, was nicht zuletzt finanzielle Auswirkungen haben kann.\r\n\r\nDer Datenschutzbeauftragte des Kantons Basel-Stadt hat auf seiner Website ein [Cloud-Merkblatt](https://www.dsb.bs.ch/handreichungen/privatim-merkblatt-cloud.html){:target=“_blank”} zur Verfügung gestellt, das von der Konferenz der Schweizerischen Datenschutzbeauftragten PRIVATIM erlassen worden ist. Dort finden Sie weitere Informationen zu diesem Thema.', 'Cloud solutions are a special case of outsourcing data processing. They come with some particular challenges.\r\n{.lead}\r\n\r\nWhen we use cloud solutions, it is a form of outsourced data processing by a public institution. It involves transferring the data processing to an external system, which causes us to lose some of the control over the data, because we don’t know exactly what server it is located on, who is responsible for it, and what happens to it. These are the challenges and risks of outsourcing in general, but they are somewhat amplified when outsourcing to the cloud.\r\n\r\n<br>\r\n##Risks\r\n\r\nThere are also additional cloud-specific risks that we must respond to with cloud-specific measures. Because even with this form of outsourcing the public institution remains responsible for the personal data, even if it is no longer under full control. But let’s take it one step at a time. First, we must use the usual rules for contract data processing to check whether it is even permissible for the data processing to be outsourced. If it is permissible and we want to use cloud technologies, we must then check what specific data protection risks will be involved as a result. There are risks in a variety of areas when it comes to third-party cloud solutions.\r\n\r\n<br>\r\n\r\n1. We often don’t know where the data processing will occur, and it’s difficult to find out. \r\n<br>\r\n<br>\r\n2. There are fewer opportunities for monitoring, because it can be difficult to clearly delineate data processing operations in cloud infrastructure.\r\n<br>\r\n<br>\r\n3. The leeway is often very limited in the standard offerings, and it can hardly be negotiated. \r\n<br>\r\n<br>\r\n4.\tIt is more difficult to enforce claims under data protection law. This applies to the rights to erasure and correction, for example, and depends on the relevant applicable law and where the servers with the data are located.\r\n<br>\r\n<br> \r\n5. The confidentiality of the data can be compromised if third parties have access to the data from within cloud applications. \r\n<br>\r\n<br>\r\n6. Access by foreign authorities can sometimes be a problem. If the data is located in a foreign country, it can be accessed by the authorities there more easily than if it were located in Switzerland. This risk applies especially to US cloud service providers because they are required by the *US CLOUD Act* to allow US authorities access to the data regardless of whether the servers are located in the US or in a different country.\r\n\r\n\r\n<br>\r\n##Solutions\r\n\r\nHow can we deal with these risks? The public institution remains responsible for the data, so it must first examine these risks and consider comprehensively whether they are acceptable. When considering this, the **applicable laws and jurisdiction,** the **location of data processing** and **protection of secrecy** are especially important. \r\n\r\nWith regard to the **applicable laws and place of jurisdiction,** we must sometimes make a fundamental decision. Let’s assume that we sign a contract under foreign law. We are still responsible for the personal data and must therefore account for any breaches of contract. This could mean, for example, that we might have to file a suit in accordance with Irish or US law, and thus might not be able to fulfill our responsibility well or at all. So there are some very compelling reasons, when we weigh the risks, for deciding against signing a contract.\r\n\r\nIn the case of cloud solutions, the **location of data processing** is the location of the servers on which the data is stored. We must ask ourselves: where are the servers, and thus our data, located? Are they located in a country with appropriate data protection or with data protection law that is equivalent to ours here in Switzerland, or not? When weighing decisions about cloud services, providers from countries with equivalent laws would be preferable to providers in countries without any equivalent level of data protection.\r\n\r\n**Protection of secrecy** has to do with protection of confidentiality. In principle, third parties should not be able to access the data of our citizens or our patients. We protect data from this by encrypting it. Secure encryption is only assured when the public institution encrypts the data itself and also only possesses the key for decrypting the data and making it readable again. Data that is on its way to the cloud (data in transit) or data that is saved somewhere (data addressed) is relatively easy to encrypt. Most cloud services don’t just offer storage solutions, but also allow data to be processed within the cloud. That is only possible if the cloud provider has the key.\r\n\r\n\r\n<br>\r\n##Risk analysis\r\n\r\nA comprehensive risk assessment requires us to take all these points into consideration for each specific case and to decide on this basis whether or not we can outsource data processing to the cloud. We must conduct a comprehensive risk analysis for this purpose in advance. This risk analysis must include the cloud-specific risks for the individual instances of data processing and demonstrate corresponding protective measures for eliminating these risks or reducing them to an acceptable level. If that is not possible, we should avoid the cloud solution. Otherwise, the public institution will bear the residual risk, which could have financial and other implications.\r\n\r\nThe Data Protection Officer for the Canton of Basel-Stadt provides a [Cloud Fact Sheet](https://www.dsb.bs.ch/handreichungen/privatim-merkblatt-cloud.html){:target=“_blank”} created by the Conference of Swiss Data Protection Officers on their website. There you can find further information on this topic.', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TT', '6 minutes', 9, 'published', False, None, None, None, None, 172), (1027, datetime.datetime(2021, 11, 17, 9, 18, 31, 936332, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 58, 829156, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 32, 58, 768756, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the second chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das zweite Kapitel des offenen Kurses «Datenschutz» ab.', 'This quiz concludes the second chapter of the open course "Data Protection".', None, '', 'quiz-3', 'To finish up, you can use this quiz to review what you have learned about processing personal data in this chapter. \r\n{.lead}\r\n\r\n\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=319" width="842" height="343" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.11_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Zum Abschluss können Sie in diesem Quiz überprüfen, was Sie in diesem Kapitel über das Bearbeiten von Personendaten gelernt haben. \r\n{.lead}\r\n\r\n\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=292" width="866" height="357" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.11"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'To finish up, you can use this quiz to review what you have learned about processing personal data in this chapter. \r\n{.lead}\r\n\r\n\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=319" width="842" height="343" frameborder="0" allowfullscreen="allowfullscreen" title="Datenschutz 2.11_EN"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', 'Universität Basel', 'University of Basel', '', 'TQ', '5 minutes', 10, 'published', False, None, None, None, None, 172), (1028, datetime.datetime(2021, 11, 17, 9, 40, 31, 430902, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 9, 19, 11, 20, 59, 199139, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 9, 19, 11, 20, 59, 142293, tzinfo=datetime.timezone.utc), False, 'Thank you', 'Danke', 'Thank you', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the second chapter of the open course "Data protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin das zweite Kapitel des offenen Kurses «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the second chapter of the open course "Data protection".', None, '', 'thank-you', 'Congratulations! You have completed the second chapter on data protection!\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532456?h=e9cd6d2311&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-12_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Herzlichen Glückwunsch, Sie haben das zweite Kapitel über Datenschutz abgeschlossen!\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532456?h=e9cd6d2311&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-12_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations! You have completed the second chapter on data protection!\r\n{.lead}\r\n\r\n<br>\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/625532456?h=e9cd6d2311&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="2-12_kapitelende.mov"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, 'University of Basel', '', 'University of Basel', '', 'TV', '1 minute', 11, 'published', False, None, None, None, None, 172)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,5056 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', '01514a95486ac589e79eb99a0c713cef51c019c6'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

1,1570 set_many ({'01514a95486ac589e79eb99a0c713cef51c019c6': (1736881648.3826122, [[(1519, datetime.datetime(2023, 8, 2, 7, 19, 51, 168262, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 33, 48, 223280, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 33, 48, 108944, tzinfo=datetime.timezone.utc), False, 'Introduction', 'Einleitung', 'Introduction', None, '', None, None, None, 'In this video, Danielle Kaufmann introduces the third chapter of the open course "Data Protection".', 'In diesem Video führt Danielle Kaufmann in das dritte Kapitel des offenen Kurses «Datenschutz» ein.', 'In this video, Danielle Kaufmann introduces the third chapter of the open course "Data Protection".', None, '', 'introduction-7', 'For a public body to be allowed to process personal data, it needs to comply with certain principles. The same applies to disclosing these data; this cannot happen automatically.\r\n{.lead}\r\n\r\nWhen is a public body allowed to disclose personal data? What constitutes a disclosure and when is it justified?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Damit ein öffentliches Organ Personendaten bearbeiten darf, muss es bestimmte Grundsätze beachten. Gleiches gilt für deren Bekanntgabe, die nicht ohne Weiteres erfolgen darf.\r\n{.lead}\r\n\r\nWann darf ein öffentliches Organ Personendaten bekanntgeben? Was ist eine Bekanntgabe und wann ist sie gerechtfertigt? \r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'For a public body to be allowed to process personal data, it needs to comply with certain principles. The same applies to disclosing these data; this cannot happen automatically.\r\n{.lead}\r\n\r\nWhen is a public body allowed to disclose personal data? What constitutes a disclosure and when is it justified?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 1, 'published', False, None, None, None, None, 173), (1520, datetime.datetime(2023, 8, 2, 7, 24, 54, 446902, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 21, 48, 266323, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 21, 48, 209078, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose', 'Bekanntgabe zu einem personenbezogenen Zweck', 'Disclosure for an individual-specific purpose', None, '', None, None, None, 'In this article, you will learn what characterizes the disclosure of personal data for an individual-specific purpose.', 'In diesem Artikel erfahren Sie, was die Bekanntgabe von Personendaten zu einem personenbezogenen Zweck auszeichnet.', 'In this article, you will learn what characterizes the disclosure of personal data for an individual-specific purpose.', None, '', 'disclosure-for-an-individual-specific-purpose', 'Personal data can be not only processed, but also disclosed.\r\n{.lead}\r\n\r\n##Preconditions\r\nA disclosure of personal data exists when the data of a third party (a natural or legal person) are made accessible or disclosed to a different public body than the one which had hitherto been processing the information in order to fulfill its statutory task. This disclosure may be made for a purpose that either relates to the specific person (individual-specific disclosure) or does not (non-individual-specific disclosure).\r\n \r\nFor disclosure of personal data for an individual-specific purpose, § 21 of the applicable Basel-Stadt Information and Data Protection Act (IDG) requires a legal basis to be present. As with processing of personal data, this legal basis can take different forms: it may be either a so-called direct or an indirect legal basis.\r\n \r\nIn the case of a direct legal basis, a statutory provision allows even personal data to be disclosed, or even requires that it be disclosed (§ 21 para. 1 (a) and 2 (a) IDG). For example, § 139 of the Basel-Stadt Tax Act explicitly allows the tax authority to provide administrative assistance to other tax authorities.\r\n \r\nIn the case of an indirect legal basis, legislation or a regulation specifies a duty that can only be fulfilled by the responsible public body if it discloses the personal data to another public body or to third parties, or receives them from another public body or private individual (§ 21, para. 1 (b) and 2 (b) IDG). This kind of duty can look, for example, like this: \r\n§ 140 paragraph 4 (f) of the Basel-Stadt Schools Act tasks the Child and Youth Health Services Office with helping to combat infectious diseases in children. The Act itself does not say which personal data may be disclosed to teachers for this purpose; it only specifies the task. The Office itself has to decide which data are necessary for combating disease in each specific case – for example, this could also be data on the siblings of sick children, or even on the children who are in the same class as the sick children or have been playing with them.\r\n \r\nAs with processing of “general” personal data, disclosure of “general”, simple personal data only requires a (direct or indirect) legal basis in the form of legislation in the material sense (§ 21 para. 1 IDG). \r\nBy contrast, for disclosure of “specific” personal data, again as with processing of “specific personal data”, the IDG requires a basis in legislation in the formal sense (§ 21 para. 2 IDG). This basis can likewise allow data to be disclosed directly or indirectly. Legislation in the formal sense must thus authorize or require the data disclosure. In the case of an indirect legal basis, the legislation must clearly describe the duty for which the fulfillment of processing of specific personal data is deemed essential. As shown by the example mentioned of the Child and Youth Health Services Office: the only personal details on the sick children and their siblings which may be disclosed are those which are essential to achieving the purpose – that of combating infectious diseases.\r\nThe same rules as for disclosure of specific personal data also apply to disclosure of results of “profiling.” This means any automated evaluation of information aimed at analyzing key personal characteristics of an individual or predicting developments, for example with regard to work performance or health.\r\n \r\nAs an alternative to a legal basis, disclosure can also be justified if the data subject has given their express consent to this (§ 21 paras. 1 (c) and 2 (b) IDG). However, this does not mean that a public body can always use consent as an alternative just because a legal basis may be lacking: the legislation actually allows disclosure with consent only on a case-by-case basis and only where the data subject has explicitly agreed to this. Presumed consent may also be allowed, namely in cases where the data subject is not capable of giving their consent. For example, this would be the case if a patient is in a coma and therefore cannot give their consent for the hospital treating them to request their X-rays from a hospital where they have been treated before. However, the disclosure of their patient data must be in their interests and the hospital must believe in good faith that consent would have been given. It must not simply be assumed prematurely.\r\n \r\n<br>\r\n\r\n**Where can we find the required legal basis?** \r\nAs in the case of processing of personal data, for disclosures generally speaking this legal basis will be found in the corresponding sectoral legislation of the disclosing or recipient public body. When, for example, there is a need for the tax authorities to disclose personal data to the social welfare office, the authorization or obligation to do so will be set out in the Tax Act or Social Welfare Act. Thus, for example, § 141 of the Tax Act regulates the approach for providing administrative assistance to other authorities. On the other hand, based on § 28 para. 3 of the Social Welfare Act, the social welfare office is entitled to obtain personal data which it needs to fulfill its legal mandate from other public bodies, for example the tax authority, or private individuals.\r\n{.footnote}', 'Personendaten können nicht nur bearbeitet, sondern auch bekanntgegeben werden.\r\n{.lead}\r\n\r\n## Voraussetzungen\r\nEine Bekanntgabe von Personendaten liegt dann vor, wenn die Daten einer Drittperson (einer natürlichen oder juristischen Person) oder einem anderen öffentlichen Organ als dem, das die Informationen bisher zur Erfüllung seiner gesetzlichen Aufgabe bearbeitet hat, zugänglich gemacht werden. Diese Bekanntgabe kann zu einem Zweck erfolgen, der sich entweder auf die betroffene Person bezieht (personenbezogene Bekanntgabe) oder nicht (nicht personenbezogene Bekanntgabe).\r\n \r\nFür die Bekanntgabe von Personendaten zu einem personenbezogenen Zweck verlangt § 21 des anwendbaren baselstädtischen Informations- und Datenschutzgesetzes (IDG) eine gesetzliche Grundlage. Diese gesetzliche Grundlage kann, wie beim Bearbeiten von Personendaten, unterschiedlich vorliegen: einerseits als sogenannte unmittelbare oder andererseits als mittelbare gesetzliche Grundlage.\r\n \r\nBei einer unmittelbaren gesetzlichen Grundlage erlaubt eine gesetzliche Bestimmung selbst das Bekanntgeben von Personendaten, oder sie verpflichtet sogar dazu (§ 21 Abs. 1 Buchstabe a und Abs. 2 Buchstabe a IDG). Zum Beispiel erlaubt das baselstädtische Steuergesetz in § 139 ausdrücklich die Amtshilfe der Steuerbehörde gegenüber anderen Steuerbehörden.\r\n \r\nBei einer mittelbaren gesetzlichen Grundlage legt ein Gesetz oder eine Verordnung eine Aufgabe fest, die vom verantwortlichen öffentlichen Organ nur dann erfüllt werden kann, wenn es die Personendaten an ein anderes öffentliches Organ oder an Drittpersonen bekanntgibt oder diese von einem anderen öffentlichen Organ oder Privaten erhält (§ 21 Abs. 1 Buchstabe b und Abs. 2 Buchstabe b IDG). Eine solche Aufgabe kann zum Beispiel so aussehen: \r\nDas baselstädtische Schulgesetz gibt in § 140 Absatz 4 Buchstabe f dem Kinder- und Jugendgesundheitsdienst die Aufgabe, bei der Bekämpfung von ansteckenden Krankheiten unter den Kindern mitzuwirken. Das Gesetz sagt dabei nicht selbst, welche Personendaten dafür an die Lehrpersonen bekanntgegeben werden dürfen, sondern es nennt nur die Aufgabe. Der Dienst muss selbst entscheiden, welche Daten im konkreten Fall für die Krankheitsbekämpfung erforderlich sind – zum Beispiel können dies auch Daten über die Geschwister von erkrankten Kindern sein – und sogar über die Kinder, die mit diesen zusammen in der Klasse sind oder mit ihnen gespielt haben.\r\n \r\nDas Bekanntgeben von «gewöhnlichen», einfachen Personendaten erfordert, wie das Bearbeiten von «gewöhnlichen» Personendaten, nur eine (mittelbare oder unmittelbare) gesetzliche Grundlage in Form eines Gesetzes im materiellen Sinn (§ 21 Abs. 1 IDG). \r\nDagegen verlangt das IDG für die Bekanntgabe von «besonderen» Personendaten, wiederum wie beim Bearbeiten von «besonderen» Personendaten, eine Grundlage in einem Gesetz im formellen Sinn (§ 21 Abs. 2 IDG). Diese Grundlage kann ein Bekanntgeben ebenfalls unmittelbar oder mittelbar erlauben. Ein Gesetz im formellen Sinn muss also zur Datenbekanntgabe ermächtigen oder verpflichten. Im Falle einer mittelbaren gesetzlichen Grundlage muss das Gesetz die Aufgabe klar umschreiben, zu deren Erfüllung das Bearbeiten von besonderen Personendaten zwingend notwendig sein soll. Am erwähnten Beispiel des Kinder- und Jugendgesundheitsdienstes aufgezeigt: Es dürfen nur jene Personendaten über die erkrankten Kinder und ihre Geschwister bekanntgegeben werden, die zur Erreichung des Zwecks – also zur Bekämpfung von ansteckenden Krankheiten – unerlässlich sind.\r\nDasselbe wie für das Bekanntgeben von besonderen Personendaten gilt auch für das Bekanntgeben von Ergebnissen des «Profiling». Damit ist jede automatisierte Auswertung von Informationen gemeint, um wesentliche persönliche Merkmale einer Person zu analysieren oder Entwicklungen vorherzusagen, z. B. bezüglich Arbeitsleistung oder Gesundheit.\r\n \r\nAlternativ zu einer gesetzlichen Grundlage kann die Bekanntgabe auch durch eine ausdrückliche Einwilligung der betroffenen Person gerechtfertigt werden (§ 21 Abs. 1 Buchstabe c und Abs. 2 Buchstabe c IDG). Damit ist aber nicht gemeint, dass sich ein öffentliches Organ alternativ immer auf eine Einwilligung abstützen kann, nur weil allenfalls eine gesetzliche Grundlage fehlt: Das Gesetz erlaubt die Bekanntgabe mit einer Einwilligung nämlich nur im Einzelfall und nur dann, wenn die betroffene Person ausdrücklich zugestimmt hat. Berücksichtigt werden kann auch eine mutmassliche Einwilligung, nämlich dann, wenn die betroffene Person nicht in der Lage ist, einzuwilligen. Das ist beispielsweise dann der Fall, wenn eine Patientin im Koma liegt und sie deshalb nicht einwilligen kann, dass das behandelnde Spital ihre Röntgenbilder von einem Spital anfordert, in dem sie zuvor behandelt wurde. Die Bekanntgabe ihrer Patientinnendaten muss aber in ihrem Interesse liegen und die Einwilligung muss in guten Treuen vorausgesetzt werden dürfen. Sie darf also nicht vorschnell einfach angenommen werden.\r\n \r\n <br>\r\n**Wo finden wir die verlangte gesetzliche Grundlage?** \r\nWie schon beim Bearbeiten von Personendaten findet sich diese gesetzliche Grundlage auch im Falle der Bekanntgabe in aller Regel im entsprechenden Fachrecht des bekanntgebenden oder des empfangenden öffentlichen Organs. Wenn beispielsweise Personendaten von der Steuerverwaltung an die Sozialhilfe bekannt gegeben werden sollen, dann kann die Ermächtigung oder die Verpflichtung dazu im Steuergesetz oder im Sozialhilfegesetz gegeben sein. So regelt beispielsweise § 141 des Steuergesetzes die Möglichkeit der Amtshilfe an andere Behörden. Andererseits hat die Sozialhilfe, gestützt auf § 28 Abs. 3 des Sozialhilfegesetzes, den Anspruch, von anderen öffentlichen Organen, beispielsweise eben von der Steuerverwaltung, oder Privaten Personendaten zu erhalten, die sie, die Sozialhilfe, zur Erfüllung ihres gesetzlichen Auftrags benötigt.\r\n{.footnote}', 'Personal data can be not only processed, but also disclosed.\r\n{.lead}\r\n\r\n##Preconditions\r\nA disclosure of personal data exists when the data of a third party (a natural or legal person) are made accessible or disclosed to a different public body than the one which had hitherto been processing the information in order to fulfill its statutory task. This disclosure may be made for a purpose that either relates to the specific person (individual-specific disclosure) or does not (non-individual-specific disclosure).\r\n \r\nFor disclosure of personal data for an individual-specific purpose, § 21 of the applicable Basel-Stadt Information and Data Protection Act (IDG) requires a legal basis to be present. As with processing of personal data, this legal basis can take different forms: it may be either a so-called direct or an indirect legal basis.\r\n \r\nIn the case of a direct legal basis, a statutory provision allows even personal data to be disclosed, or even requires that it be disclosed (§ 21 para. 1 (a) and 2 (a) IDG). For example, § 139 of the Basel-Stadt Tax Act explicitly allows the tax authority to provide administrative assistance to other tax authorities.\r\n \r\nIn the case of an indirect legal basis, legislation or a regulation specifies a duty that can only be fulfilled by the responsible public body if it discloses the personal data to another public body or to third parties, or receives them from another public body or private individual (§ 21, para. 1 (b) and 2 (b) IDG). This kind of duty can look, for example, like this: \r\n§ 140 paragraph 4 (f) of the Basel-Stadt Schools Act tasks the Child and Youth Health Services Office with helping to combat infectious diseases in children. The Act itself does not say which personal data may be disclosed to teachers for this purpose; it only specifies the task. The Office itself has to decide which data are necessary for combating disease in each specific case – for example, this could also be data on the siblings of sick children, or even on the children who are in the same class as the sick children or have been playing with them.\r\n \r\nAs with processing of “general” personal data, disclosure of “general”, simple personal data only requires a (direct or indirect) legal basis in the form of legislation in the material sense (§ 21 para. 1 IDG). \r\nBy contrast, for disclosure of “specific” personal data, again as with processing of “specific personal data”, the IDG requires a basis in legislation in the formal sense (§ 21 para. 2 IDG). This basis can likewise allow data to be disclosed directly or indirectly. Legislation in the formal sense must thus authorize or require the data disclosure. In the case of an indirect legal basis, the legislation must clearly describe the duty for which the fulfillment of processing of specific personal data is deemed essential. As shown by the example mentioned of the Child and Youth Health Services Office: the only personal details on the sick children and their siblings which may be disclosed are those which are essential to achieving the purpose – that of combating infectious diseases.\r\nThe same rules as for disclosure of specific personal data also apply to disclosure of results of “profiling.” This means any automated evaluation of information aimed at analyzing key personal characteristics of an individual or predicting developments, for example with regard to work performance or health.\r\n \r\nAs an alternative to a legal basis, disclosure can also be justified if the data subject has given their express consent to this (§ 21 paras. 1 (c) and 2 (b) IDG). However, this does not mean that a public body can always use consent as an alternative just because a legal basis may be lacking: the legislation actually allows disclosure with consent only on a case-by-case basis and only where the data subject has explicitly agreed to this. Presumed consent may also be allowed, namely in cases where the data subject is not capable of giving their consent. For example, this would be the case if a patient is in a coma and therefore cannot give their consent for the hospital treating them to request their X-rays from a hospital where they have been treated before. However, the disclosure of their patient data must be in their interests and the hospital must believe in good faith that consent would have been given. It must not simply be assumed prematurely.\r\n \r\n<br>\r\n\r\n**Where can we find the required legal basis?** \r\nAs in the case of processing of personal data, for disclosures generally speaking this legal basis will be found in the corresponding sectoral legislation of the disclosing or recipient public body. When, for example, there is a need for the tax authorities to disclose personal data to the social welfare office, the authorization or obligation to do so will be set out in the Tax Act or Social Welfare Act. Thus, for example, § 141 of the Tax Act regulates the approach for providing administrative assistance to other authorities. On the other hand, based on § 28 para. 3 of the Social Welfare Act, the social welfare office is entitled to obtain personal data which it needs to fulfill its legal mandate from other public bodies, for example the tax authority, or private individuals.\r\n{.footnote}', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 2, 'published', False, None, None, None, None, 173), (1521, datetime.datetime(2023, 8, 2, 7, 27, 47, 339617, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 3, 792732, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 3, 743822, tzinfo=datetime.timezone.utc), False, 'Other rules for disclosure', 'Weitere Grundsätze der Bekanntgabe', 'Other rules for disclosure', None, '', None, None, None, 'In this article, you will learn about the principles of the disclosure of personal data.', 'In diesem Artikel lernen Sie die Grundsätze der Bekanntgabe von Personendaten kennen.', 'In this article, you will learn about the principles of the disclosure of personal data.', None, '', 'other-rules-for-disclosure', 'A legal basis alone is not enough to justify a disclosure. There are other rules which apply here as they do to processing.\r\n{.lead}\r\n\r\nFirst, there is the *principle of proportionality*, as per § 9 para. 3 IDG: a disclosure of personal data must always be proportionate. This means that a public body may only disclose those personal data which are appropriate and necessary to the purpose for which they are being disclosed, and the disclosure of which can be deemed acceptable to the data subject. Thus, only the personal data that the recipient needs to complete their task may be disclosed, and no more.\r\n \r\nSecond, there is the *purpose limitation principle* (§ 12 IDG): in principle, personal data may only be processed for the purpose for which they were collected. Disclosing personal data to another public body or third party may, however, be associated with a change of purpose. The original purpose for which a public body had processed the data prior to the disclosure does not necessarily have to be the same purpose for which the other public body or third party will be processing the data once received. If, for example, the social welfare office is permitted to disclose to the tax authority how much in welfare benefits a taxable person has received, then the purpose changes: from combating poverty to assessment of income tax. However, this change of purpose is usually justified by the legal basis for the disclosure or by the consent of the data subject in individual cases.\r\n \r\nThird, there is the principle of *transparency* (§ 15 IDG): if a public body collects data about a person from another public body or from private individuals, it must actively inform the data subject of this. In addition, the disclosed data must be accurate; in other words, the principle of *integrity* also applies (§ 11 IDG).\r\n \r\nAnd finally, *information security* must also be ensured (§ 8 IDG): the public body must protect information being disclosed to others by employing appropriate organizational and technical measures.', 'Mit einer gesetzlichen Grundlage allein ist es für die Bekanntgabe nicht getan. Auch hier gelten, wie beim Bearbeiten, weitere Grundsätze.\r\n{.lead}\r\n\r\nErstens gilt das *Verhältnismässigkeitsprinzip* nach § 9 Abs. 3 IDG: Eine Bekanntgabe von Personendaten muss immer verhältnismässig sein. Das heisst, ein öffentliches Organ darf nur diejenigen Personendaten bekannt geben, die für den Zweck, zu dem sie bekannt gegeben werden sollen, geeignet und erforderlich sind und deren Bekanntgabe der betroffenen Person zumutbar ist. Es dürfen also nicht mehr Personendaten bekannt gegeben werden, als die Empfängerin zu ihrer Aufgabenerfüllung benötigt.\r\n \r\nZweitens gilt das *Zweckbindungsprinzip* (§ 12 IDG): Grundsätzlich dürfen Personendaten nur zu dem Zweck bearbeitet werden, zu dem sie erhoben worden sind. Mit der Bekanntgabe der Personendaten an ein anderes öffentliches Organ oder an einen Dritten kann allerdings eine Zweckänderung verbunden sein. Der ursprüngliche Zweck, zu dem das eine öffentliche Organ die Personendaten vor der Bekanntgabe bearbeitet hat, muss nicht zwingend der gleiche Zweck sein, zu dem das andere öffentliche Organ oder die Drittperson die Daten nach Erhalt bearbeiten wird. Wenn beispielsweise die Sozialhilfe der Steuerverwaltung bekannt geben darf, wie viel Sozialhilfe eine steuerpflichtige Person bezogen hat, dann wechselt der Zweck: von der Bekämpfung der Bedürftigkeit zur Veranlagung der Einkommenssteuer. Diese Zweckänderung wird aber in der Regel durch die gesetzliche Grundlage für die Bekanntgabe oder durch die Einwilligung der betroffenen Person im Einzelfall gerechtfertigt.\r\n \r\nDrittens gilt das Prinzip der *Transparenz* (§ 15 IDG): Erhebt ein öffentliches Organ Daten über eine Person bei einem anderen öffentlichen Organ oder auch bei Privaten, dann muss es die betroffene Person über diese Datenerhebung aktiv informieren. Die bekanntgegebenen Daten müssen zudem richtig sein, das heisst, es gilt ebenfalls das Prinzip der *Integrität* (§ 11 IDG).\r\n \r\nUnd schliesslich muss auch die *Informationssicherheit* gewährleistet sein (§ 8 IDG): Das öffentliche Organ muss Informationen bei deren Bekanntgabe an andere durch angemessene organisatorische und technische Massnahmen schützen.', 'A legal basis alone is not enough to justify a disclosure. There are other rules which apply here as they do to processing.\r\n{.lead}\r\n\r\nFirst, there is the *principle of proportionality*, as per § 9 para. 3 IDG: a disclosure of personal data must always be proportionate. This means that a public body may only disclose those personal data which are appropriate and necessary to the purpose for which they are being disclosed, and the disclosure of which can be deemed acceptable to the data subject. Thus, only the personal data that the recipient needs to complete their task may be disclosed, and no more.\r\n \r\nSecond, there is the *purpose limitation principle* (§ 12 IDG): in principle, personal data may only be processed for the purpose for which they were collected. Disclosing personal data to another public body or third party may, however, be associated with a change of purpose. The original purpose for which a public body had processed the data prior to the disclosure does not necessarily have to be the same purpose for which the other public body or third party will be processing the data once received. If, for example, the social welfare office is permitted to disclose to the tax authority how much in welfare benefits a taxable person has received, then the purpose changes: from combating poverty to assessment of income tax. However, this change of purpose is usually justified by the legal basis for the disclosure or by the consent of the data subject in individual cases.\r\n \r\nThird, there is the principle of *transparency* (§ 15 IDG): if a public body collects data about a person from another public body or from private individuals, it must actively inform the data subject of this. In addition, the disclosed data must be accurate; in other words, the principle of *integrity* also applies (§ 11 IDG).\r\n \r\nAnd finally, *information security* must also be ensured (§ 8 IDG): the public body must protect information being disclosed to others by employing appropriate organizational and technical measures.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 3, 'published', False, None, None, None, None, 173), (1522, datetime.datetime(2023, 8, 2, 7, 29, 11, 546208, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 34, 40, 117126, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 34, 40, 68312, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose: restrictions', 'Bekanntgabe zu einem personenbezogenen Zweck: Einschränkungen', 'Disclosure for an individual-specific purpose: restrictions', None, '', None, None, None, 'In this podcast, Beat Rudin explains what restrictions there may be on disclosure for an individual-specific purpose.', 'In diesem Podcast erklärt Beat Rudin, welche Einschränkungen es bei der Bekanntgabe zu einem personenbezogenen Zweck geben kann.', 'In this podcast, Beat Rudin explains what restrictions there may be on disclosure for an individual-specific purpose.', None, '', 'disclosure-for-an-individual-specific-purpose-restrictions', 'Sometimes, information disclosures need to be restricted. One reason for this could be confidentiality interests and obligations. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### References for the secrets mentioned\r\n \r\n- [Medical confidentiality (Art. 321 of the Swiss Criminal Code)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/en#art_321)\r\n- [Tax secrecy (§ 138 para. 1 of the Basel-Stadt Tax Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Social welfare secrecy (§ 28 para. 1 of the Basel-Stadt Social Welfare Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Social security secrecy (Art. 33 of the Federal Act on General Aspects of Social Security Law)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Duty of confidentiality for victim support and counseling services (Art. 11 of the Federal Act on the Provision of Support to Victims of Crime)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', 'Manchmal muss die Bekanntgabe von Informationen eingeschränkt werden. Ein Grund dafür können Geheimhaltungsinteressen und -pflichten sein. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### Referenzen für die erwähnten Geheimnisse\r\n \r\n- [Ärztliches Berufsgeheimnis (Art. 321 des Schweizerischen Strafgesetzbuches)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/de#art_321steu)\r\n- [Steuergeheimnis (§ 138 Abs. 1 Steuergesetz Basel-Stadt)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Sozialhilfegeheimnis (§ 28 Abs. 1 Sozialhilfegesetz Basel-Stadt)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Sozialversicherungsgeheimnis (Art. 33 des Bundesgesetzes über den allgemeinen Teil der Sozialversicherung)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Schweigepflicht der Opferhilfeberatung (Art. 11 des Bundesgesetzes über die Hilfe an Opfer von Straftaten)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', 'Sometimes, information disclosures need to be restricted. One reason for this could be confidentiality interests and obligations. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### References for the secrets mentioned\r\n \r\n- [Medical confidentiality (Art. 321 of the Swiss Criminal Code)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/en#art_321)\r\n- [Tax secrecy (§ 138 para. 1 of the Basel-Stadt Tax Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Social welfare secrecy (§ 28 para. 1 of the Basel-Stadt Social Welfare Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Social security secrecy (Art. 33 of the Federal Act on General Aspects of Social Security Law)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Duty of confidentiality for victim support and counseling services (Art. 11 of the Federal Act on the Provision of Support to Victims of Crime)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TA', '', 4, 'published', False, None, None, None, None, 173), (1523, datetime.datetime(2023, 8, 2, 7, 42, 45, 368008, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 1, 493649, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 1, 416071, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose: process', 'Bekanntgabe zu einem personenbezogenen Zweck: Vorgehen', 'Disclosure for an individual-specific purpose: process', None, '', None, None, None, 'In this podcast, Danielle Kaufmann and Beat Rudin explain how to proceed with disclosures for individual-specific purposes.', 'In diesem Podcast erklären Danielle Kaufmann und Beat Rudin, wie Sie bei der Bekanntgabe zu personenbezogenem Zweck vorgehen.', 'In this podcast, Danielle Kaufmann and Beat Rudin explain how to proceed with disclosures for individual-specific purposes.', None, '', 'disclosure-for-an-individual-specific-purpose-process', 'What is the process for disclosing data for an individual-specific purpose?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Summary of the four questions which should be asked when considering a disclosure:\r\n \r\n- First: Is the public body wishing to obtain the personal data even permitted to process these data?\r\n- Second: Is it permitted to ask the other public body from which it wishes to obtain the data the question about the data, as by doing so it is already disclosing information which could possibly be subject to a specific legal secrecy rule?\r\n- Third: Is the public body being asked to disclose the data even permitted to process these data itself? If it is not even permitted to process the data, it is certainly not permitted to disclose them.\r\n- And fourth: Is there a legal basis for the disclosure, is it proportionate and are there any restrictions under § 29 IDG which would prevent it – in particular a legal confidentiality obligation or an overriding confidentiality interest?', 'Wie geht man bei der Bekanntgabe von Daten zu einem personenbezogenen Zweck vor?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Zusammenfassung der vier Frageschritte zur Prüfung einer Bekanntgabe\r\n \r\n- Erstens: Darf das öffentliche Organ, das Personendaten erhalten will, diese Daten überhaupt bearbeiten?\r\n- Zweitens: Darf es dem anderen öffentlichen Organ, von dem es Daten erhalten will, die Frage nach den Daten stellen, weil es damit bereits Informationen bekannt gibt und diese Informationen möglicherweise einem besonderen gesetzlichen Geheimnis unterstehen?\r\n- Drittens: Darf das öffentliche Organ, das die Daten bekannt geben soll, diese Daten selber überhaupt bearbeiten? Wenn es die Daten gar nicht bearbeiten dürfte, darf es sie erst recht nicht bekanntgeben.\r\n- Und viertens: Gibt es für die Bekanntgabe eine gesetzliche Grundlage, ist sie verhältnismässig und stehen ihr keine Einschränkungen nach § 29 IDG entgegen – also insbesondere eine gesetzliche Geheimhaltungspflicht oder ein überwiegendes Geheimhaltungsinteresse?', 'What is the process for disclosing data for an individual-specific purpose?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Summary of the four questions which should be asked when considering a disclosure:\r\n \r\n- First: Is the public body wishing to obtain the personal data even permitted to process these data?\r\n- Second: Is it permitted to ask the other public body from which it wishes to obtain the data the question about the data, as by doing so it is already disclosing information which could possibly be subject to a specific legal secrecy rule?\r\n- Third: Is the public body being asked to disclose the data even permitted to process these data itself? If it is not even permitted to process the data, it is certainly not permitted to disclose them.\r\n- And fourth: Is there a legal basis for the disclosure, is it proportionate and are there any restrictions under § 29 IDG which would prevent it – in particular a legal confidentiality obligation or an overriding confidentiality interest?', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TA', '', 5, 'published', False, None, None, None, None, 173), (1766, datetime.datetime(2024, 1, 23, 12, 52, 21, 884131, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 31, 291172, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 31, 212853, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz of the open course "Data Protection" tests your knowledge about the disclosure of personal data.', 'Dieses Quiz des offenen Kurses «Datenschutz» prüft Ihr Wissen über die Bekanntgabe von Personendaten.', 'This quiz of the open course "Data Protection" tests your knowledge about the disclosure of personal data.', None, '', 'quiz-5', 'What conditions apply to the disclosure of personal data?\r\n{.lead}\r\n\r\nNow that you have learned about the procedure for disclosing personal data for a purpose relating to a specific individual, you can now test the knowledge you have acquired so far.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=386" width="822" height="329" frameborder="0" allowfullscreen="allowfullscreen" title="3_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Unter welchen Voraussetzungen dürfen Personendaten bekannt gegeben werden?\r\n{.lead}\r\n\r\nSie haben nun das Vorgehen bei der Bekanntgabe von Personendaten zu einem personenbezogenen Zweck kennengelernt und haben hier die Möglichkeit, das bisher angeeignete Wissen zu testen.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=383" width="958" height="447" frameborder="0" allowfullscreen="allowfullscreen" title="3_4_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'What conditions apply to the disclosure of personal data?\r\n{.lead}\r\n\r\nNow that you have learned about the procedure for disclosing personal data for a purpose relating to a specific individual, you can now test the knowledge you have acquired so far.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=386" width="822" height="329" frameborder="0" allowfullscreen="allowfullscreen" title="3_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 6, 'published', False, None, None, None, None, 173), (1524, datetime.datetime(2023, 8, 2, 7, 46, 3, 205318, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 31, 880821, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 31, 794651, tzinfo=datetime.timezone.utc), False, 'Disclosure for a non-individual-specific purpose', 'Bekanntgabe zu einem nicht personenbezogenen Zweck', 'Disclosure for a non-individual-specific purpose', None, '', None, None, None, 'In this article, you will learn how disclosure for a non-individual-specific purpose works.', 'In diesem Artikel lernen Sie, wie die Bekanntgabe zu einem nicht personenbezogenen Zweck funktioniert.', 'In this article, you will learn how disclosure for a non-individual-specific purpose works.', None, '', 'disclosure-for-a-non-individual-specific-purpose', 'Disclosures for a non-individual-specific purpose have certain similarities and differences to disclosures for an individual-specific purpose.\r\n{.lead}\r\n\r\nUntil now, we have been looking at disclosure of personal data for an individual-specific purpose as per § 21 IDG: this means that the data are being disclosed for processing in relation to a specific person, for example a patient, a specific taxpayer or a specific welfare benefit recipient.\r\n \r\nNow we turn to disclosures of personal data for a *non*-individual-specific purpose as per § 22 IDG. Here, the disclosure no longer serves the purpose of gaining an insight into the specific person concerned; rather, the purpose is to gain a general insight. The aim here is therefore to gain new general insights by processing the personal data of *many* data subjects, insights which are of interest not only to the individual, specific person, but to all or many people.\r\n \r\nSo what we are talking about is the case where a public body passes on personal data which it is permitted to process for an individual-specific purpose to a different public body or private individual for a non-individual-specific purpose. Application cases include, for example, disclosure of personal data for research, statistical or planning purposes.\r\n \r\n§ 22 IDG is the general legal basis for data disclosures for a non-individual-specific purpose. If a public body is allowed to process personal data for an individual-specific purpose, then it is also allowed to pass on these data for a non-individual-specific purpose. Before making such a data disclosure, however, the discloser should check whether it is precluded due to a specific confidentiality provision, for example a professional confidentiality stipulation or a special official secrecy provision. Furthermore, there may also be special statutory provisions governing the disclosure of personal data for a non-individual-specific purpose.\r\nThe best-known example of application is the Federal Act on Research involving Human Beings, or Human Research Act.\r\n\r\n The principle of proportionality as per § 9 para. 3 IDG applies here as it does to all data processing: the only personal data that may be passed on are those that are appropriate and necessary for achieving the purpose and the disclosure of which can be deemed acceptable to the data subject. This means, for example: if no identifying personal data are necessary for the non-individual-specific purpose, then the personal data may not be disclosed in a form which allows individuals to be identified, but rather only in anonymized or, at the outside, pseudonymized form. The public body may thus only release personal data if the data still have to be in an identifying form in order to achieve the purpose. If, for example, these data need to be combined with other data from other sources, then of course anonymized data will not work; however, pseudonymized data could be used if need be.\r\n \r\nThe legislation also prescribes that when public bodies disclose personal data, the recipients are required to anonymize or at least pseudonymize the data as soon as the processing purpose allows. They are only permitted to publish analyses of the data in such a form that it is no longer possible to draw any conclusions as to the people involved.\r\nIf the data are passed on to private recipients, then a purpose limitation must also be imposed in addition to the previously mentioned restrictions. Personal data may only be passed on to private individuals for research purposes; that is, not for planning and statistical purposes. In addition, the private recipients must undertake not to process the personal data for other purposes, not to pass the data on to third parties and to guarantee the security of the information.\r\n \r\nIf public bodies are receiving personal data for a non-individual-specific purpose, these restrictions do not need to be mentioned separately, as they already apply by law.', 'Bei der Bekanntgabe zu einem nicht personenbezogenen Zweck gibt es bestimmte Gemeinsamkeiten und Unterschiede zur Bekanntgabe zum personenbezogenen Zweck.\r\n{.lead}\r\n\r\nBisher haben wir das Bekanntgeben von Personendaten zu einem personenbezogenen Zweck gemäss § 21 IDG angeschaut: Das heisst, die Bekanntgabe der Daten dient der Bearbeitung in Bezug auf eine konkrete Person, zum Beispiel eine Patientin, ein bestimmter Steuerzahler oder eine konkrete Sozialhilfebezügerin.\r\n \r\nNun wenden wir uns der Bekanntgabe von Personendaten für einen *nicht* personenbezogenen Zweck nach § 22 IDG zu. Hier dient die Bekanntgabe nicht mehr dem Zweck, eine Erkenntnis über die konkret betroffene Person zu gewinnen, sondern dem Zweck, eine generelle Erkenntnis zu gewinnen. Es geht also darum, durch die Bearbeitung von Personendaten *vieler* betroffener Personen neue generelle Erkenntnisse zu gewinnen, die nicht nur für die einzelne, konkrete Person von Interesse sind, sondern für alle oder viele Menschen.\r\n \r\nWir sprechen also von dem Fall, dass ein öffentliches Organ Personendaten, die es selbst zu einem personenbezogenen Zweck bearbeiten darf, einem anderen öffentlichen Organ oder Privaten zu einem nicht personenbezogenen Zweck weitergibt. Anwendungsfälle sind beispielsweise die Weitergabe von Personendaten zu Forschungs-, Statistik- oder Planungszwecken.\r\n \r\n§ 22 IDG ist die allgemeine gesetzliche Grundlage zur Datenbekanntgabe zu einem nicht personenbezogenen Zweck. Wenn ein öffentliches Organ Personendaten zu einem personenbezogenen Zweck bearbeiten darf, dann darf es diese Personendaten auch weitergeben für einen nicht personenbezogenen Zweck. Vor einer entsprechenden Bekanntgabe der Daten ist allerdings zu prüfen, ob sie aufgrund einer besonderen Geheimhaltungsbestimmung ausgeschlossen ist, beispielsweise durch ein Berufsgeheimnis oder ein besonderes Amtsgeheimnis. Im Weiteren können auch spezialgesetzliche Bestimmungen die Bekanntgabe von Personendaten zu einem nicht personenbezogenen Zweck regeln.\r\nDas bekannteste Anwendungsbeispiel ist das Bundesgesetz über die Forschung am Menschen, das Humanforschungsgesetz.\r\n\r\n Das Verhältnismässigkeitsprinzip nach § 9 Abs. 3 IDG gilt wie bei jeder Datenbearbeitung auch hier: Es dürfen nur solche Personendaten weitergegeben werden, die zur Zweckerreichung geeignet und erforderlich sind und deren Bekanntgabe den betroffenen Personen zumutbar ist. Das bedeutet zum Beispiel: Wenn für den nicht personenbezogenen Zweck keine identifizierenden Personendaten erforderlich sind, dann dürfen die Personendaten nicht in identifizierender Form, sondern nur in anonymisierter oder allenfalls in pseudonymisierter Form weitergegeben werden. Das öffentliche Organ darf Personendaten somit nur dann herausgeben, wenn es zur Zweckerreichung erforderlich ist, dass die Daten noch identifizierend sind. Wenn diese Daten beispielsweise mit anderen Daten aus anderen Quellen kombiniert werden müssen, dann geht das mit anonymisierten Daten natürlich nicht, aber allenfalls mit pseudonymisierten.\r\n \r\nDas Gesetz schreibt ausserdem vor, dass bei der Herausgabe von Personendaten durch öffentliche Organe die Empfängerinnen und Empfänger verpflichtet sind, die Daten zu anonymisieren oder zumindest zu pseudonymisieren, sobald der Bearbeitungszweck es zulässt. Die Auswertungen der Daten dürfen sie nur so bekanntgeben, dass keine Rückschlüsse auf die betroffenen Personen mehr möglich sind.\r\nSollen die Daten an private Empfängerinnen oder Empfänger weitergegeben werden, dann ist zusätzlich zu den bereits erwähnten Auflagen eine Zweckeinschränkung vorzunehmen. An private Personen dürfen Personendaten nur zu Forschungszwecken, also nicht für Planung und Statistik weitergeben werden. Zudem müssen sich die privaten Empfängerinnen und Empfänger verpflichten, die Personendaten nicht für andere Zwecke zu bearbeiten, die Personendaten nicht an Dritte weiterzugeben und für die Informationssicherheit zu sorgen.\r\n \r\nSind öffentliche Organe Empfängerinnen von Personendaten zu einem nicht personenbezogenen Zweck, müssen diese Auflagen nicht separat erwähnt werden, weil sie ohnehin von Gesetzes wegen gelten.', 'Disclosures for a non-individual-specific purpose have certain similarities and differences to disclosures for an individual-specific purpose.\r\n{.lead}\r\n\r\nUntil now, we have been looking at disclosure of personal data for an individual-specific purpose as per § 21 IDG: this means that the data are being disclosed for processing in relation to a specific person, for example a patient, a specific taxpayer or a specific welfare benefit recipient.\r\n \r\nNow we turn to disclosures of personal data for a *non*-individual-specific purpose as per § 22 IDG. Here, the disclosure no longer serves the purpose of gaining an insight into the specific person concerned; rather, the purpose is to gain a general insight. The aim here is therefore to gain new general insights by processing the personal data of *many* data subjects, insights which are of interest not only to the individual, specific person, but to all or many people.\r\n \r\nSo what we are talking about is the case where a public body passes on personal data which it is permitted to process for an individual-specific purpose to a different public body or private individual for a non-individual-specific purpose. Application cases include, for example, disclosure of personal data for research, statistical or planning purposes.\r\n \r\n§ 22 IDG is the general legal basis for data disclosures for a non-individual-specific purpose. If a public body is allowed to process personal data for an individual-specific purpose, then it is also allowed to pass on these data for a non-individual-specific purpose. Before making such a data disclosure, however, the discloser should check whether it is precluded due to a specific confidentiality provision, for example a professional confidentiality stipulation or a special official secrecy provision. Furthermore, there may also be special statutory provisions governing the disclosure of personal data for a non-individual-specific purpose.\r\nThe best-known example of application is the Federal Act on Research involving Human Beings, or Human Research Act.\r\n\r\n The principle of proportionality as per § 9 para. 3 IDG applies here as it does to all data processing: the only personal data that may be passed on are those that are appropriate and necessary for achieving the purpose and the disclosure of which can be deemed acceptable to the data subject. This means, for example: if no identifying personal data are necessary for the non-individual-specific purpose, then the personal data may not be disclosed in a form which allows individuals to be identified, but rather only in anonymized or, at the outside, pseudonymized form. The public body may thus only release personal data if the data still have to be in an identifying form in order to achieve the purpose. If, for example, these data need to be combined with other data from other sources, then of course anonymized data will not work; however, pseudonymized data could be used if need be.\r\n \r\nThe legislation also prescribes that when public bodies disclose personal data, the recipients are required to anonymize or at least pseudonymize the data as soon as the processing purpose allows. They are only permitted to publish analyses of the data in such a form that it is no longer possible to draw any conclusions as to the people involved.\r\nIf the data are passed on to private recipients, then a purpose limitation must also be imposed in addition to the previously mentioned restrictions. Personal data may only be passed on to private individuals for research purposes; that is, not for planning and statistical purposes. In addition, the private recipients must undertake not to process the personal data for other purposes, not to pass the data on to third parties and to guarantee the security of the information.\r\n \r\nIf public bodies are receiving personal data for a non-individual-specific purpose, these restrictions do not need to be mentioned separately, as they already apply by law.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 7, 'published', False, None, None, None, None, 173), (1525, datetime.datetime(2023, 8, 2, 7, 52, 8, 145425, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 52, 205675, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 52, 156744, tzinfo=datetime.timezone.utc), False, 'Disclosures in the field of human research', 'Bekanntgabe im Humanforschungsbereich', 'Disclosures in the field of human research', None, '', None, None, None, 'In this article, you will find out what characterizes disclosures in the field of human research.', 'In diesem Artikel erfahren Sie, was die Bekanntgabe im Humanforschungsbereich auszeichnet.', 'In this article, you will find out what characterizes disclosures in the field of human research.', None, '', 'disclosures-in-the-field-of-human-research', 'The Federal Act on Research involving Human Beings – the Human Research Act – governs an important application case for the disclosure of health-related personal data.\r\n{.lead}\r\n\r\nAs a basic principle, under the Human Research Act (HRA), research on humans may only be carried out with the informed consent of the involved individuals. Further use and dissemination of health-related personal data from the treatment context to the research context is governed separately by Articles 32 ff. HRA. These articles make distinctions according to the sensitivity of the health data and the form in which these data are to be subsequently used: identifying (in the HRA “uncoded”), pseudonymized (in the HRA “encoded”), or anonymized.\r\n\r\n<br>\r\n## Genetic data and biological material\r\nAs the most sensitive of personal data, genetic data and biological material may only be disclosed in an identifying/uncoded form with the explicit consent of the individual involved and only for specific research projects (Art. 32 para. 1 HRA).\r\n\r\nIf the data have been *pseudonymized* (encoded) previously, then they may be disclosed *generally for research purposes*, but likewise only with explicit consent (Art. 32 para. 2 HRA). In this case the key for re-identifying the pseudonymized data will not be disclosed, meaning that the data are thus anonymous for the recipient.\r\n\r\n*Anonymized genetic data and biological material* may be disclosed *generally for research purposes* provided that the data subjects have *not objected to anonymization* after being adequately informed (Art. 32 para. 3 HRA). The reason for this right to object is that anonymization means the data subjects will lose the right and even the possibility to be informed of findings from this research, including, for example, incidental findings of importance to them, because with anonymized data there is no longer a way to identify them as individuals concerned.\r\n\r\n<br>\r\n## Non-genetic health-related personal data\r\nUnder Art. 33 para. 1 HRA, non-genetic health-related personal data may be disclosed generally for research purposes (and not only for a specific research project) in identifying form with the explicit consent of the data subjects, as these data are deemed not quite as sensitive as genetic data.\r\n\r\nIn *pseudonymized form* non-genetic health-related personal data may be used for *general research purposes* if the data subject has been informed in advance and has not entered any objection to the further use.\r\n\r\nFinally, non-genetic health-related personal data in *anonymized form* may be used *without any additional conditions*.\r\n\r\n<br>\r\nThe differentiation between genetic health-related data and biological material on the one hand and non-genetic health-related personal data on the other is made by the Human Research Act because it assumes that genetic data and biological material have the potential to cause more extensive infringements of fundamental rights than non-genetic health-related personal data.\r\n{.footnote}', 'Das Bundesgesetz über die Forschung am Menschen, das Humanforschungsgesetz, regelt einen wichtigen Anwendungsfall der Bekanntgabe von gesundheitsbezogenen Personendaten.\r\n{.lead}\r\n\r\nGrundsätzlich ist nach dem Humanforschungsgesetz (HFG) Forschung am Menschen nur mit informierter Einwilligung (informed consent) der betroffenen Personen zulässig. Die Weiterverwendung und Weitergabe von gesundheitsbezogenen Personendaten aus dem Behandlungskontext in den Forschungskontext ist in den Artikeln 32 ff. HFG separat geregelt. Dabei wird unterschieden nach der Sensitivität der Gesundheitsdaten und in welcher Form diese Daten weiterverwendet werden sollen: identifizierend (nach HFG «unverschlüsselt»), pseudonymisiert (nach HFG «verschlüsselt») oder anonymisiert.\r\n\r\n<br>\r\n## Genetische Daten und biologisches Material\r\nGenetische Daten und biologisches Material als sensitivste Personendaten dürfen in identifizierender/ unverschlüsselter Form nur mit ausdrücklicher Einwilligung der betroffenen Person und nur für bestimmte Forschungsvorhaben weitergegeben werden (Art. 32 Abs. 1 HFG).\r\n\r\nWerden die Daten vorher *pseudonymisiert* (verschlüsselt), dann dürfen sie, aber ebenfalls nur mit ausdrücklicher Einwilligung, *allgemein für Forschungszwecke* weitergegeben werden (Art. 32 Abs. 2 HFG). Dabei wird der Schlüssel zur Re-Identifizierung der pseudonymisierten Daten nicht mit bekannt gegeben, was bedeutet, dass die Daten für die Empfängerin damit anonym sind.\r\n\r\n*Anonymisierte genetische Daten und biologisches Material* dürfen, sofern die betroffenen Personen nach hinreichender Information der *Anonymisierung nicht widersprochen* haben, *allgemein für Forschungszwecke* weitergegeben werden (Art. 32 Abs. 3 HFG). Der Grund für dieses Widerspruchsrecht liegt darin, dass die betroffenen Personen mit der Anonymisierung das Recht und überhaupt die Möglichkeit verlieren, über Erkenntnisse aus dieser Forschung informiert zu werden, beispielsweise auch nicht über für sie wichtige Zufallsbefunde. Denn von anonymisierten Daten kann man nicht mehr auf sie als betroffene Person zurückschliessen.\r\n\r\n<br>\r\n## Nicht genetische gesundheitsbezogene Personendaten\r\nNicht genetische gesundheitsbezogene Personendaten dürfen nach Art. 33 Abs. 1 HFG in identifizierender Form mit ausdrücklicher Einwilligung der betroffenen Personen allgemein für Forschungszwecke (und nicht nur für ein bestimmtes Forschungsprojekt) weitergegeben werden, da sie nicht als ganz so sensitiv gelten wie genetische Daten.\r\n\r\nIn *pseudonymisierter Form* dürfen nicht genetische gesundheitsbezogene Personendaten für *Forschungszwecke allgemein* verwendet werden, wenn die betroffene Person vorgängig informiert wird und keinen Widerspruch gegen die Weiterverwendung einlegt.\r\n\r\nIn *anonymisierter Form* schliesslich dürfen nicht genetische gesundheitsbezogene Personendaten *ohne weitere Voraussetzungen* verwendet werden.\r\n\r\n<br>\r\nDie Unterscheidung in genetische gesundheitsbezogene Daten und biologisches Material auf der einen Seite und nicht genetische gesundheitsbezogene Personendaten auf der anderen Seite macht das Humanforschungsgesetz, weil es davon ausgeht, dass genetische Daten und biologisches Material tiefgreifendere Grundrechtseingriffe ermöglichen als nicht genetische gesundheitsbezogene Personendaten.\r\n{.footnote}', 'The Federal Act on Research involving Human Beings – the Human Research Act – governs an important application case for the disclosure of health-related personal data.\r\n{.lead}\r\n\r\nAs a basic principle, under the Human Research Act (HRA), research on humans may only be carried out with the informed consent of the involved individuals. Further use and dissemination of health-related personal data from the treatment context to the research context is governed separately by Articles 32 ff. HRA. These articles make distinctions according to the sensitivity of the health data and the form in which these data are to be subsequently used: identifying (in the HRA “uncoded”), pseudonymized (in the HRA “encoded”), or anonymized.\r\n\r\n<br>\r\n## Genetic data and biological material\r\nAs the most sensitive of personal data, genetic data and biological material may only be disclosed in an identifying/uncoded form with the explicit consent of the individual involved and only for specific research projects (Art. 32 para. 1 HRA).\r\n\r\nIf the data have been *pseudonymized* (encoded) previously, then they may be disclosed *generally for research purposes*, but likewise only with explicit consent (Art. 32 para. 2 HRA). In this case the key for re-identifying the pseudonymized data will not be disclosed, meaning that the data are thus anonymous for the recipient.\r\n\r\n*Anonymized genetic data and biological material* may be disclosed *generally for research purposes* provided that the data subjects have *not objected to anonymization* after being adequately informed (Art. 32 para. 3 HRA). The reason for this right to object is that anonymization means the data subjects will lose the right and even the possibility to be informed of findings from this research, including, for example, incidental findings of importance to them, because with anonymized data there is no longer a way to identify them as individuals concerned.\r\n\r\n<br>\r\n## Non-genetic health-related personal data\r\nUnder Art. 33 para. 1 HRA, non-genetic health-related personal data may be disclosed generally for research purposes (and not only for a specific research project) in identifying form with the explicit consent of the data subjects, as these data are deemed not quite as sensitive as genetic data.\r\n\r\nIn *pseudonymized form* non-genetic health-related personal data may be used for *general research purposes* if the data subject has been informed in advance and has not entered any objection to the further use.\r\n\r\nFinally, non-genetic health-related personal data in *anonymized form* may be used *without any additional conditions*.\r\n\r\n<br>\r\nThe differentiation between genetic health-related data and biological material on the one hand and non-genetic health-related personal data on the other is made by the Human Research Act because it assumes that genetic data and biological material have the potential to cause more extensive infringements of fundamental rights than non-genetic health-related personal data.\r\n{.footnote}', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 8, 'published', False, None, None, None, None, 173), (1767, datetime.datetime(2024, 1, 23, 12, 53, 32, 275673, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 182234, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 107451, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the third chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das dritte Kapitel des offenen Kurses «Datenschutz» ab.', 'This quiz concludes the third chapter of the open course "Data Protection".', None, '', 'quiz-6', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=384" width="958" height="345" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 9, 'published', False, None, None, None, None, 173), (1526, datetime.datetime(2023, 8, 2, 8, 0, 32, 389319, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 672959, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 625005, tzinfo=datetime.timezone.utc), False, 'Cross-border disclosure of personal data', 'Grenzüberschreitende Bekanntgabe von Personendaten', 'Cross-border disclosure of personal data', None, '', None, None, None, 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', 'In diesem Artikel lernen Sie die Bestimmungen für die grenzüberschreitende Bekanntgabe von Personendaten kennen.', 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', None, '', 'cross-border-disclosure-of-personal-data', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', 'Wenn Daten aus der Schweiz in andere Länder bekannt gegeben werden, gibt es einige besondere Bestimmungen zu beachten.\r\n{.lead}\r\n\r\nDatenbearbeitungen in der Schweiz und in den meisten europäischen Staaten unterstehen klaren, im weltweiten Vergleich strengen datenschutzrechtlichen Bestimmungen. Werden Personendaten aus der Schweiz in Länder weitergegeben, in denen kein entsprechendes Datenschutzniveau gilt, dann besteht die Gefahr, dass diese Daten in einer Weise genutzt werden, die nach dem schweizerischen oder europäischen Datenschutzrecht nicht zulässig ist. Damit besteht für die betroffenen Personen die Gefahr von Grundrechtsverletzungen.\r\n \r\nAus diesem Grund legt § 23 des Informations- und Datenschutzgesetzes (IDG) fest, dass Personendaten nur in jene Staaten bekanntgegeben werden dürfen, die der Europaratskonvention 108, künftig 108+, beigetreten sind, also in Staaten, die damit einen zum schweizerischen Datenschutzrecht vergleichbaren Schutz für die Grundrechte der betroffenen Personen gewährleisten. In andere Staaten dürfen Personendaten nur dann bekannt gegeben werden, wenn deren Gesetzgebung ebenfalls einen angemessenen Schutz sicherstellt oder wenn durch vertragliche Vereinbarungen zwischen dem datenliefernden öffentlichen Organ und den Empfängerinnen oder Empfängern ein angemessener Schutz garantiert wird. Welche Staaten durch Gesetzgebung einen angemessenen Schutz gewährleisten, hält eine [Liste](https://www.fedlex.admin.ch/eli/cc/2022/568/de#annex_1) des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (oder künftig des Bundesrates) fest.\r\n \r\nBeim Datentransfer ins Ausland muss unterschieden werden zwischen der Übergabe von Personendaten vom verantwortlichen Organ an eine Auftragsdatenbearbeiterin (§ 7 IDG) einerseits und der Datenbekanntgabe in die eigene Verantwortung der Empfängerin andererseits. § 23 IDG gilt für den zweiten Fall, also bei der Bekanntgabe von Personendaten an eine Empfängerin, die sie dann zu einem eigenen Zweck und in eigener Verantwortung bearbeiten darf. \r\nDer erste Fall, die Auftragsbearbeitung, stellt keine Bekanntgabe im Sinne des IDG dar und damit gilt grundsätzlich auch § 23 IDG nicht. Denn die Auftragsdatenbearbeiterin darf die Daten zu dem Zweck bearbeiten, der vom auftraggebenden öffentlichen Organ vorgegeben ist – und dieses öffentliche Organ bleibt gegenüber den betroffenen Personen verantwortlich, auch für das, was die Auftragsdatenbearbeiterin tut und tun sollte, aber nicht tut. Damit werden die betroffenen Personen nicht schlechter gestellt, als wenn die Auftragsdatenbearbeitung in der Schweiz stattfinden würde. Bei der Übergabe der Daten an eine Auftragsdatenbearbeiterin im Ausland werden die Daten also zwar in einem anderen Land mit allenfalls weniger strenger Gesetzgebung bearbeitet, aber grundsätzlich dennoch nur nach dem Datenschutzniveau, welches auch für die Datenbearbeitung durch das bekanntgebende öffentliche Organ gilt. Auch wenn § 23 IDG auf die Übermittlung an eine Auftragsdatenbearbeiterin im Ausland nicht direkt anwendbar ist, müssen die Risiken der Datenübermittlung ins Ausland. beurteilt werden. Dazu sind die Risikoabwägungen analog zu den Kriterien von § 23 IDG hilfreich und können mit entsprechenden Schutzmassnahmen, zum Beispiel mit einer Verschlüsselung der Daten, vermieden oder auf ein tragbares Mass verringert werden.\r\n\r\n<br>\r\n##Bekanntgabe von Personendaten in die USA\r\nFür die Bekanntgabe von Personendaten in die USA bestanden in der Vergangenheit zwei Abkommen zwischen der EU-Kommission und den USA bzw. der Schweiz und den USA: das sogenannte «Safe Harbor»-Abkommen und das «Privacy Shield»-Framework. Der Europäische Gerichtshof (EuGH) hat allerdings bezüglich beider Abkommen festgestellt, dass sie trotz aller Bemühungen kein angemessenes Datenschutzniveau aus Sicht der EU schaffen. Die EuGH-Urteile binden die Schweiz zwar nicht, aber die Schweiz hat übereinstimmende Abkommen mit den USA abgeschlossen und muss wiederum auch gegenüber der EU auch ein angemessenes Datenschutzniveau aufweisen. Deshalb haben diese Urteile («Schrems-I und II») faktisch durchaus Auswirkungen auf die Zulässigkeit des Datentransfers von der Schweiz in die USA. Hier wird zu beobachten sein, wie sich Rechtssetzung und Rechtsprechung in Zukunft weiterentwickeln.', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 10, 'published', False, None, None, None, None, 173), (1527, datetime.datetime(2023, 8, 2, 8, 1, 18, 302146, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 760722, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 708457, tzinfo=datetime.timezone.utc), False, 'Thank you', 'Danke', 'Thank you', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin das dritte Kapitel des offenen Kurses «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', None, '', 'thank-you-2', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Glückwunsch, Sie haben das dritte Kapitel über Datenschutz abgeschlossen! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 11, 'published', False, None, None, None, None, 173)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,5063 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', '0b933d578b17b7c974d5dd1beab4360e7e9c596d'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,7594 set_many ({'0b933d578b17b7c974d5dd1beab4360e7e9c596d': (1736881648.3955097, [[(1528, datetime.datetime(2023, 8, 2, 8, 2, 43, 774096, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 38, 288300, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 38, 211234, tzinfo=datetime.timezone.utc), False, 'Introduction', 'Einleitung', 'Introduction', None, '', None, None, None, 'In this video, Beat Rudin introduces the fourth chapter of the open course "Data protection".', 'In diesem Video führt Beat Rudin in das vierte Kapitel des offenen Kurses «Datenschutz» ein.', 'In this video, Beat Rudin introduces the fourth chapter of the open course "Data protection".', None, '', 'introduction-8', 'Data protection means protection of the person whose data are being processed. But how can the data subject even know whether and which data about them are being processed? And what resources can they use to defend themselves against having their data processed if the need arises?\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281219?h=2ab98bd548&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Datenschutz heisst Schutz der Person, über die Daten bearbeitet werden. Aber wie kann die betroffene Person überhaupt wissen, ob und welche Daten über sie bearbeitet werden? Und mit welchen Mitteln kann sie sich allenfalls gegen eine Bearbeitung wehren?\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281219?h=2ab98bd548&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Data protection means protection of the person whose data are being processed. But how can the data subject even know whether and which data about them are being processed? And what resources can they use to defend themselves against having their data processed if the need arises?\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281219?h=2ab98bd548&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 21798, 'published', False, None, None, None, None, 174), (1529, datetime.datetime(2023, 8, 2, 8, 7, 16, 234615, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 43, 54842, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 43, 12484, tzinfo=datetime.timezone.utc), False, 'Individuals’ right to information about and access to their own data', 'Auskunfts- und Zugangsrecht zu den eigenen Daten', 'Individuals’ right to information about and access to their own data', None, '', None, None, None, 'In this article, you will learn how the right to information and access to your own data is legally organised.', 'In diesem Artikel erfahren Sie, wie das Auskunfts- und Zugangsrecht zu den eigenen Daten rechtlich organisiert ist.', 'In this article, you will learn how the right to information and access to your own data is legally organised.', None, '', 'individuals-right-to-information-about-and-access-to-their-own-data', 'Individuals about whom data are being processed must not only be actively informed of this by the public body; they can also request information on and access to the data themselves.\r\n{.lead}\r\n\r\nWhen a public body collects data about an individual, it has an obligation to inform this person. Conversely, however, the data subjects also have a right to information about and access to their own personal data. The rules in this regard are set out in § 26 of the Information and Data Protection Act (IDG). According to this, data subjects have the option to find out whether and what data about them a public body is processing.\r\n\r\nThe right to information and access of the data subject must be differentiated from the general right of access to information (§ 25 IDG) under the principle of public access to official records. The aim of this principle is to bring transparency to administrative procedures/the actions of public bodies. Essentially, it is about making the actions of the public bodies transparent and verifiable. The general right of access to information is for everyone; it is also spoken of as a universal right (“Jedermanns-Anspruch”).\r\n\r\nConversely, a person’s right to information about and access to their own personal data under § 26 IDG only applies to that person. As a product of the basic right to informational self-determination, the individual has the right to know what data about them are being processed, and the right to access these data. \r\nThe law does not attach other conditions to the right of the individual to access their own personal data. In particular, the person requesting the information does not have to give a reason why they are asking for it. Neither is the request for information tied to a specific form; information can be requested in writing or verbally. In addition, the public body may not charge a fee for providing the information, even if a complex process is required for this.\r\n\r\nTo ensure that the public body even knows where to look for data on the person making the request, the person should specify as precisely as possible which data they are seeking or suspect the public body of holding. The law states that the requested information “should be identified with sufficient precision” (§ 31 IDG).\r\n\r\nFor example: if a cantonal agency with six subdivisions which each have different statutory tasks to perform has filed paper forms from the last ten years chronologically in file folders, the search for data concerning a requesting party will be a difficult one. The search will proceed more quickly and reliably if the requester shares the information that they had contacted a specific department about a specific matter four years previously. The search will be easier still if there are electronic systems which can be searched by name.\r\n\r\nAs an individual’s right to access their own personal data is only open to the data subject themselves, the public body will first need to confirm the requester’s identity. To do this it is permitted to request identification (passport, ID card, driver’s license) if the person’s identity is not established beyond doubt. In this event, the public body is permitted to keep the copy of the identity document on file as well, to allow it to defend itself should it be subsequently accused of releasing the data to an unauthorized third party.\r\n\r\nAfter the successful identity check, the public body will give the requester the information on whether it holds data concerning them or not. If yes, the data subject is entitled to access these data. However, before granting access the public body must check whether the access needs to be restricted, refused or deferred under § 29 IDG.\r\n\r\nIn what cases can access to an individual’s own personal data be refused?\r\n\r\nFirst, a legal confidentiality obligation could prohibit disclosure (§ 29 para. 1 IDG), although there is currently no known legal secrecy obligation that would from the outset prohibit a body from disclosing to the data subject what data concerning them are being processed.\r\n\r\nSecond, it is conceivable that disclosure might need to be refused or deferred for overriding public interest reasons (§ 29 para. 2 IDG). Under some circumstances a regulatory body may need to withhold information temporarily to ensure that its investigation is not obstructed.\r\n\r\nThird, the requester is only entitled to access data about themselves. In the case of documents containing information on more than one person, the data of the other individuals must be excluded before disclosure takes place, for example by redaction. \r\nData on a specific person may, however, also have a connection to other people. For example, if Helen Müller says something about Peter Huber, then the data refer to both Peter Huber and Helen Müller. What did she say? In what form? For what reason? If Peter Huber now wants to access his personal data, we need to weigh up whether the source of the information (Helen Müller) can also be named or whether private (confidentiality) interests of Helen Müller override Peter Huber’s access interests (§ 29 para. 3 IDG), for example because he is known to go after and threaten informants at a later time.\r\n\r\nIf at least one of these three reasons for restriction is present, the public body must refuse, restrict or defer access to all or part of the information.\r\n\r\nIf there is no argument against releasing the information to the person requesting it, the public body will grant access without further ado. If it does not do this, it must give reasons for its partial or full refusal to grant access and make the requester aware that they can request a ruling on the refusal, which can then be appealed in court.\r\n\r\nAccess may be granted in two ways: by the public body handing over the information to the data subject in writing in the form of copies or on a data medium, or – but only with their consent – communicating the information to the data subject verbally or allowing them to view it in situ.', 'Personen, über die Daten bearbeitet werden, müssen nicht nur aktiv vom öffentlichen Organ informiert werden. Sie können auch selbst Auskunft und Zugang zu den Daten verlangen.\r\n{.lead}\r\n\r\nWenn ein öffentliches Organ Daten über eine Person sammelt, dann hat es eine Informationspflicht gegenüber dieser Person. Umgekehrt haben aber auch die betroffenen Personen ein Auskunfts- und Zugangsrecht zu den eigenen Personendaten. Das regelt § 26 des Informations- und Datenschutzgesetzes (IDG). Demnach ist es den betroffenen Personen möglich zu erfahren, ob und welche Daten ein öffentliches Organ über sie bearbeitet.\r\n\r\nDas Auskunfts- und Zugangsrecht der betroffenen Person muss vom allgemeinen Informationszugangsrecht (§ 25 IDG) nach dem Öffentlichkeitsprinzip abgegrenzt werden. Beim Öffentlichkeitsprinzip geht es darum, Transparenz in das Verwaltungshandeln bzw. in das Handeln der öffentlichen Organe zu bringen. Im Wesentlichen geht es dabei darum, dass das Handeln der öffentlichen Organe nachvollziehbar und kontrollierbar wird. Das allgemeine Informationszugangsrecht steht allen Personen zu, man spricht dabei auch von einem Jedermanns-Anspruch.\r\n\r\nDas Auskunfts- und Zugangsrecht zu den eigenen Personendaten nach § 26 IDG steht dagegen nur der betroffenen Person zu. Sie hat – als Ausfluss des Grundrechts auf informationelle Selbstbestimmung – das Recht zu wissen, welche Daten über sie bearbeitet werden, und das Recht auf Zugang zu diesen sie betreffenden Daten. \r\nWeitere Voraussetzungen knüpft das Gesetz nicht an das Recht auf Zugang zu den eigenen Personendaten. Insbesondere muss die auskunftersuchende Person keinen Grund angeben, weshalb sie Auskunft erfragt. Das Auskunftsgesuch ist auch nicht an eine Form gebunden, man kann schriftlich oder mündlich um Auskunft bitten. Zudem darf das öffentliche Organ keine Gebühr für die Auskunft erheben, auch nicht bei einem aufwändigen Verfahren.\r\n\r\nDamit das öffentliche Organ überhaupt weiss, wo es Daten über die gesuchstellende Person suchen soll, sollte die Person möglichst genau angeben, welche Daten sie beim öffentlichen Organ sucht oder vermutet. Das Gesetz spricht davon, dass die gewünschte Information «hinreichend genau zu bezeichnen ist» (§ 31 IDG).\r\n\r\nEin Beispiel: Wenn eine kantonale Dienststelle mit sechs Unterabteilungen, die je unterschiedliche gesetzliche Aufgaben zu erfüllen haben, Papierformulare der letzten zehn Jahre chronologisch in Ordnern abgelegt hat, gestaltet sich die Suche nach Daten einer gesuchstellenden Person schwierig. Die Suche erfolgt schneller und zuverlässiger, wenn die gesuchstellende Person angibt, dass sie sich vor vier Jahren mit einem Anliegen an eine bestimmte Abteilung gewandt hat. Noch einfacher wird es, wenn elektronische Systeme eine Suche nach Namen ermöglichen.\r\n{.footnote}\r\n\r\nDa das Recht auf Zugang zu den eigenen Personendaten nur der betroffenen Person zusteht, muss sich das öffentliche Organ zunächst über die Identität der gesuchstellenden Person vergewissern. Dazu darf es einen Ausweis (Pass, Identitätskarte, Führerschein) verlangen, wenn die Identität nicht zweifelsfrei feststeht. In diesem Fall darf das öffentliche Organ die Ausweiskopie auch zu den Akten nehmen, damit es sich bei einem allfälligen späteren Vorwurf, es hätte die Daten an eine unberechtigte Drittperson herausgegeben, wehren kann.\r\n\r\nNach der erfolgten Identitätskontrolle erteilt das öffentliche Organ der gesuchstellenden Person die Auskunft, ob Daten über sie in seinem Informationsbestand vorhanden sind oder nicht. Wenn ja, dann hat die betroffene Person Anspruch auf Zugang zu diesen Daten. Allerdings ist vor der Zugangsgewährung zu prüfen, ob der Zugang nach § 29 IDG eingeschränkt, verweigert oder aufgeschoben werden muss.\r\n\r\nIn welchen Fällen kann der Zugang zu den eigenen Personendaten verwehrt werden?\r\n\r\nErstens könnte grundsätzlich eine gesetzliche Geheimhaltungspflicht die Herausgabe verbieten (§ 29 Abs. 1 IDG), wobei aktuell keine gesetzliche Schweigepflicht bekannt ist, die es von vornherein verbietet, der betroffenen Person offenzulegen, welche Daten über sie bearbeitet werden.\r\n\r\nDenkbar ist zweitens, dass aus überwiegenden öffentlichen Interessen die Offenlegung verweigert oder aufgeschoben werden muss (§ 29 Abs. 2 IDG). Eine Aufsichtsbehörde muss unter Umständen Informationen vorläufig noch zurückhalten, damit ihre Untersuchung nicht vereitelt wird.\r\n\r\nDrittens hat die gesuchstellende Person nur Anspruch auf Daten über sich selbst. Bei Dokumenten, in denen mehrere Personen erfasst sind, müssen die Daten der anderen Personen von der Bekanntgabe z. B. durch Schwärzung ausgeschlossen werden. \r\nDaten zu einer Person können aber auch einen Bezug zu anderen Personen aufweisen. Wenn beispielsweise Helen Müller etwas über Peter Huber erzählt, dann beziehen sich die Daten sowohl auf Peter Huber als auch auf Helen Müller: Was hat sie erzählt? In welcher Form? Mit welchem Grund? Wenn Peter Huber jetzt Zugang zu seinen Personendaten will, ist abzuwägen, ob die Quelle der Information (Helen Müller) auch genannt werden darf oder ob private (Geheimhaltungs-)Interessen von Helen Müller gegenüber dem Zugangsinteresse von Peter Huber überwiegen (§ 29 Abs. 3 IDG), etwa weil er bekannt dafür ist, dass er Informanten nachher verfolgt und bedroht .\r\n\r\nLiegt mindestens einer dieser drei Einschränkungsgründe vor, muss das öffentliche Organ die Auskunft ganz oder teilweise verweigern, einschränken oder aufschieben.\r\n\r\nWenn nichts gegen die Auskunft an die gesuchstellende Person spricht, gewährt das öffentliche Organ den Zugang ohne Weiteres. Tut es dies nicht, muss es die vollständige oder teilweise Ablehnung des Zugangs begründen und die gesuchstellende Person darauf hinweisen, dass sie eine Verfügung über die Ablehnung verlangen kann. Diese Verfügung kann dann wiederum auf dem Rechtsweg angefochten werden.\r\n\r\nDie Zugangsgewährung kann auf zwei Weisen erfolgen. Das öffentliche Organ händigt der betroffenen Person die Informationen schriftlich in Form von Kopien oder auf einem Datenträger aus oder es teilt die Informationen der betroffenen Person – aber nur mit ihrem Einverständnis – mündlich mit bzw. gewährt ihr vor Ort Einsicht.', 'Individuals about whom data are being processed must not only be actively informed of this by the public body; they can also request information on and access to the data themselves.\r\n{.lead}\r\n\r\nWhen a public body collects data about an individual, it has an obligation to inform this person. Conversely, however, the data subjects also have a right to information about and access to their own personal data. The rules in this regard are set out in § 26 of the Information and Data Protection Act (IDG). According to this, data subjects have the option to find out whether and what data about them a public body is processing.\r\n\r\nThe right to information and access of the data subject must be differentiated from the general right of access to information (§ 25 IDG) under the principle of public access to official records. The aim of this principle is to bring transparency to administrative procedures/the actions of public bodies. Essentially, it is about making the actions of the public bodies transparent and verifiable. The general right of access to information is for everyone; it is also spoken of as a universal right (“Jedermanns-Anspruch”).\r\n\r\nConversely, a person’s right to information about and access to their own personal data under § 26 IDG only applies to that person. As a product of the basic right to informational self-determination, the individual has the right to know what data about them are being processed, and the right to access these data. \r\nThe law does not attach other conditions to the right of the individual to access their own personal data. In particular, the person requesting the information does not have to give a reason why they are asking for it. Neither is the request for information tied to a specific form; information can be requested in writing or verbally. In addition, the public body may not charge a fee for providing the information, even if a complex process is required for this.\r\n\r\nTo ensure that the public body even knows where to look for data on the person making the request, the person should specify as precisely as possible which data they are seeking or suspect the public body of holding. The law states that the requested information “should be identified with sufficient precision” (§ 31 IDG).\r\n\r\nFor example: if a cantonal agency with six subdivisions which each have different statutory tasks to perform has filed paper forms from the last ten years chronologically in file folders, the search for data concerning a requesting party will be a difficult one. The search will proceed more quickly and reliably if the requester shares the information that they had contacted a specific department about a specific matter four years previously. The search will be easier still if there are electronic systems which can be searched by name.\r\n\r\nAs an individual’s right to access their own personal data is only open to the data subject themselves, the public body will first need to confirm the requester’s identity. To do this it is permitted to request identification (passport, ID card, driver’s license) if the person’s identity is not established beyond doubt. In this event, the public body is permitted to keep the copy of the identity document on file as well, to allow it to defend itself should it be subsequently accused of releasing the data to an unauthorized third party.\r\n\r\nAfter the successful identity check, the public body will give the requester the information on whether it holds data concerning them or not. If yes, the data subject is entitled to access these data. However, before granting access the public body must check whether the access needs to be restricted, refused or deferred under § 29 IDG.\r\n\r\nIn what cases can access to an individual’s own personal data be refused?\r\n\r\nFirst, a legal confidentiality obligation could prohibit disclosure (§ 29 para. 1 IDG), although there is currently no known legal secrecy obligation that would from the outset prohibit a body from disclosing to the data subject what data concerning them are being processed.\r\n\r\nSecond, it is conceivable that disclosure might need to be refused or deferred for overriding public interest reasons (§ 29 para. 2 IDG). Under some circumstances a regulatory body may need to withhold information temporarily to ensure that its investigation is not obstructed.\r\n\r\nThird, the requester is only entitled to access data about themselves. In the case of documents containing information on more than one person, the data of the other individuals must be excluded before disclosure takes place, for example by redaction. \r\nData on a specific person may, however, also have a connection to other people. For example, if Helen Müller says something about Peter Huber, then the data refer to both Peter Huber and Helen Müller. What did she say? In what form? For what reason? If Peter Huber now wants to access his personal data, we need to weigh up whether the source of the information (Helen Müller) can also be named or whether private (confidentiality) interests of Helen Müller override Peter Huber’s access interests (§ 29 para. 3 IDG), for example because he is known to go after and threaten informants at a later time.\r\n\r\nIf at least one of these three reasons for restriction is present, the public body must refuse, restrict or defer access to all or part of the information.\r\n\r\nIf there is no argument against releasing the information to the person requesting it, the public body will grant access without further ado. If it does not do this, it must give reasons for its partial or full refusal to grant access and make the requester aware that they can request a ruling on the refusal, which can then be appealed in court.\r\n\r\nAccess may be granted in two ways: by the public body handing over the information to the data subject in writing in the form of copies or on a data medium, or – but only with their consent – communicating the information to the data subject verbally or allowing them to view it in situ.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 21799, 'published', False, None, None, None, None, 174), (1530, datetime.datetime(2023, 8, 2, 8, 8, 47, 861749, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 38, 40, 92134, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 38, 39, 988676, tzinfo=datetime.timezone.utc), False, 'Accuracy, rejoinder and destruction', 'Richtigkeit, Gegendarstellung und Vernichtung', 'Accuracy, rejoinder and destruction', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin explain the entitlement to accuracy, rejoinder and destruction of personal data.', 'In diesem Video erklären Danielle Kaufmann und Beat Rudin die Ansprüche auf Richtigkeit, Gegendarstellung und Vernichtung von Personendaten.', 'In this video, Danielle Kaufmann and Beat Rudin explain the entitlement to accuracy, rejoinder and destruction of personal data.', None, '', 'accuracy-rejoinder-and-destruction', 'What happens when inaccurate data about a person are processed?\r\n{.lead}\r\n\r\nThe public body processing personal data has an obligation to make certain it is accurate. In the event that there is inaccuracy in the data, the data subject is always entitled to have their data corrected. But how is the decision made on what is accurate and what is not? And when is it possible to determine the accuracy of data, and when not?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281707?h=8ea0b9bc8e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-3_richtigkeit"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Was geschieht, wenn über eine Person unrichtige Daten bearbeitet werden?\r\n{.lead}\r\n\r\nDas öffentliche Organ, das Personendaten bearbeitet, ist dazu verpflichtet, sich ihrer Richtigkeit zu vergewissern. Im Falle einer Unrichtigkeit der Daten hat die betroffene Person immer den Anspruch darauf, dass ihre Daten berichtigt werden. Doch wie wird entschieden, was richtig und was nicht richtig ist? Und wann lässt sich die Richtigkeit von Daten beurteilen, wann nicht?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281707?h=8ea0b9bc8e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-3_richtigkeit"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'What happens when inaccurate data about a person are processed?\r\n{.lead}\r\n\r\nThe public body processing personal data has an obligation to make certain it is accurate. In the event that there is inaccuracy in the data, the data subject is always entitled to have their data corrected. But how is the decision made on what is accurate and what is not? And when is it possible to determine the accuracy of data, and when not?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281707?h=8ea0b9bc8e&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-3_richtigkeit"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 21800, 'published', False, None, None, None, None, 174), (1531, datetime.datetime(2023, 8, 2, 8, 10, 17, 972062, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 4, 222254, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 4, 176109, tzinfo=datetime.timezone.utc), False, 'Injunction, remediation of consequences and blocking', 'Unterlassung, Beseitigung der Folgen und Sperrung', 'Injunction, remediation of consequences and blocking', None, '', None, None, None, 'In this podcast, Danielle Kaufmann explains the entitlement to injunction, remediation of consequences and blocking of personal data.', 'In diesem Podcast erklärt Danielle Kaufmann die Ansprüche auf Unterlassung, Beseitigung der Folgen und Sperrung bei Personendaten.', 'In this podcast, Danielle Kaufmann explains the entitlement to injunction, remediation of consequences and blocking of personal data.', None, '', 'injunction-remediation-of-consequences-and-blocking', 'If data are processed unlawfully, data subjects have legal rights to injunction, remediation of consequences and blocking.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302047%3Fsecret_token%3Ds-Zt2FmgHecM0&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/4-4-unterlassung-beseitigung/s-Zt2FmgHecM0" title="4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung" target="_blank" style="color: #cccccc; text-decoration: none;">4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung</a></div>', 'Wenn Daten widerrechtlich bearbeitet werden, haben betroffene Personen Rechtsansprüche auf Unterlassung, Beseitigung der Folgen und Sperrung. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302047%3Fsecret_token%3Ds-Zt2FmgHecM0&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/4-4-unterlassung-beseitigung/s-Zt2FmgHecM0" title="4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung" target="_blank" style="color: #cccccc; text-decoration: none;">4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung</a></div>', 'If data are processed unlawfully, data subjects have legal rights to injunction, remediation of consequences and blocking.\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302047%3Fsecret_token%3Ds-Zt2FmgHecM0&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/4-4-unterlassung-beseitigung/s-Zt2FmgHecM0" title="4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung" target="_blank" style="color: #cccccc; text-decoration: none;">4 - 4 Unterlassung, Beseitigung der Folgen und Sperrung</a></div>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TA', '', 21801, 'published', False, None, None, None, None, 174), (1532, datetime.datetime(2023, 8, 2, 8, 12, 40, 626335, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 27, 887618, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 27, 842478, tzinfo=datetime.timezone.utc), False, 'Regulatory complaint', 'Aufsichtsrechtliche Anzeige', 'Regulatory complaint', None, '', None, None, None, 'In this article, you will learn what you can do if your data is not processed in compliance with data protection regulations.', 'In diesem Artikel erfahren Sie, was Sie tun können, wenn Ihre Daten nicht datenschutzkonform bearbeitet werden.', 'In this article, you will learn what you can do if your data is not processed in compliance with data protection regulations.', None, '', 'regulatory-complaint', 'What can you do if you as a data subject feel that your data have not been processed in line with data protection laws?\r\n{.lead}\r\n\r\nIf you feel that a public body has processed your data in a way which is not in line with data protection laws, there are a number of options available to you.\r\n \r\nYou can, of course, go directly to the public body that you feel has not processed your data correctly. In doing so, you can assert your legal rights:\r\n\r\n- the right to access your own personal data to find out whether and which data concerning you are being processed;\r\n- the right to rectification if you believe data concerning you are inaccurate;\r\n- your other rights to injunction/remediation of the consequences of unlawful data processing.\r\n \r\nIf the public body does not recognize your rights, you can always demand that it issue its decision in the form of a ruling and justify it. You can appeal this ruling; in other words, take legal action. If you appeal the ruling, your case will first go to the next highest authority, potentially to the responsible cantonal department, and thereafter if need be to a judicial authority. At the university this would be the University Appeals Committee; for cantonal and municipal public bodies, the cantonal administrative court.\r\n \r\nIn the event that you do not want to lodge an appeal, there is also another path you can take. If, for example, the public body infringes your rights and the in-house data protection advisor at the relevant public body is unable to help you, under the revised Information and Data Protection Act of the Canton of Basel-Stadt, you can also contact the cantonal data protection officer: § 28a of the revised IDG gives every individual the right to go to the cantonal data protection officer with a regulatory complaint if they feel that a public body or a contracted data processor is violating the data protection rules when processing personal data concerning them.\r\n\r\nIn European law this option is called a complaint; in the law of the Canton of Basel-Stadt it is a so-called “regulatory complaint” (“aufsichtsrechtliche Anzeige”). This is not appealing a ruling; rather, you are asserting that an authority which is subject to the supervision of the data protection officer is not performing its task correctly. As the person filing the complaint, you are not involved in this procedure as a party, but the data protection officer must investigate the matter and notify you within three months of the status/outcome of the investigation and how it has been settled.\r\n\r\nThe investigation could, for example, reveal that the data processing was performed lawfully; you will then be informed of this. Or it may turn out that the public body has processed the data unlawfully, in which case the data protection officer will arrange for this to be rectified and inform you of the result of the investigation at the end of the process.\r\nHowever, if the public body has already issued a ruling, the data protection officer will not take action – partly because the ongoing appeal periods will not be suspended through their actions. At this point, the appeals process described above will be followed.', 'Was können Sie unternehmen, wenn Sie als betroffene Person das Gefühl haben, Ihre Daten würden nicht datenschutzkonform bearbeitet?\r\n{.lead}\r\n\r\nWenn Sie das Gefühl haben, ein öffentliches Organ hat Ihre Daten nicht datenschutzkonform bearbeitet, dann stehen Ihnen mehrere Möglichkeiten offen.\r\n \r\nSie können sich natürlich direkt an das öffentliche Organ wenden, das Ihres Erachtens Ihre Daten nicht korrekt bearbeitet. Sie können dabei Ihre Rechtsansprüche geltend machen:\r\n\r\n- das Recht auf Zugang zu den eigenen Personendaten, damit Sie wissen, ob und welche Daten über Sie bearbeitet werden;\r\n- das Recht auf Berichtigung, falls Sie der Überzeugung sind, Daten über Sie seien unrichtig;\r\n- die weiteren Ansprüche auf Unterlassung beziehungsweise auf Beseitigung der Folgen einer widerrechtlichen Datenbearbeitung.\r\n \r\nWenn das öffentliche Organ Ihre Ansprüche nicht anerkennt, können Sie immer verlangen, dass es seinen Entscheid in Form einer Verfügung erlässt und ihn begründet. Diese Verfügung können Sie anfechten, also den Rechtsweg beschreiten. Fechten Sie die Verfügung an, so gelangen Sie zunächst an die vorgesetzte Behörde, eventuell zum zuständigen kantonalen Departement, und danach allenfalls an eine gerichtliche Behörde. Bei der Universität wäre dies die Universitäre Rekurskommission, bei den kantonalen und kommunalen öffentlichen Organen das Verwaltungsgericht des Kantons.\r\n \r\nFalls Sie nicht den Rechtsmittelweg beschreiten wollen, können Sie auch einen anderen Weg gehen. Wenn das öffentliche Organ beispielsweise Ihre Ansprüche verletzt und auch die interne Datenschutzberaterin des betreffenden öffentlichen Organs Ihnen nicht weiterhelfen kann, dann können Sie sich nach dem revidierten Informations- und Datenschutzgesetz des Kantons Basel-Stadt auch an die oder den Datenschutzbeauftragten des Kantons wenden: § 28a des revidierten IDG gibt jeder Person das Recht, sich mit einer aufsichtsrechtlichen Anzeige an die oder den Datenschutzbeauftragten des Kantons zu wenden, wenn sie der Ansicht ist, dass ein öffentliches Organ oder ein:e Auftragsdatenbearbeiter:in bei der Bearbeitung von sie betreffenden Personendaten gegen die datenschutzrechtlichen Vorschriften verstösst.\r\n\r\nDiese Möglichkeit wird im europäischen Recht eine Beschwerde genannt, im Recht des Kantons Basel-Stadt ist sie aber eine sogenannte aufsichtsrechtliche Anzeige. Hierbei wird keine Verfügung angefochten, sondern Sie machen geltend, dass eine Behörde, die der Aufsicht des oder der Datenschutzbeauftragten untersteht, ihre Aufgabe nicht korrekt erfüllt. Ihnen als anzeigende Person kommt in diesem Verfahren keine Parteistellung zu, aber die oder der Datenschutzbeauftragte muss Abklärungen treffen und Sie innerhalb von drei Monaten über den Stand beziehungsweise das Ergebnis der Abklärungen und die Erledigung informieren. \r\n\r\nDie Abklärungen können zum Beispiel ergeben, dass die Datenbearbeitung gesetzeskonform erfolgt ist, dann wird Ihnen das mitgeteilt. Oder es stellt sich heraus, dass das öffentliche Organ die Daten widerrechtlich bearbeitet hat, dann wird die oder der Datenschutzbeauftragte veranlassen, dass dies korrigiert wird, und Sie am Schluss darüber informieren, was das Resultat der Abklärungen ist.\r\nWurde hingegen vom öffentlichen Organ bereits eine Verfügung erlassen, dann wird die oder der Datenschutzbeauftragte nicht aktiv werden – auch weil die laufenden Rekursfristen durch ihr oder sein Handeln nicht angehalten werden. Dann geht es weiter auf dem oben beschriebenen Rechtsmittelweg.', 'What can you do if you as a data subject feel that your data have not been processed in line with data protection laws?\r\n{.lead}\r\n\r\nIf you feel that a public body has processed your data in a way which is not in line with data protection laws, there are a number of options available to you.\r\n \r\nYou can, of course, go directly to the public body that you feel has not processed your data correctly. In doing so, you can assert your legal rights:\r\n\r\n- the right to access your own personal data to find out whether and which data concerning you are being processed;\r\n- the right to rectification if you believe data concerning you are inaccurate;\r\n- your other rights to injunction/remediation of the consequences of unlawful data processing.\r\n \r\nIf the public body does not recognize your rights, you can always demand that it issue its decision in the form of a ruling and justify it. You can appeal this ruling; in other words, take legal action. If you appeal the ruling, your case will first go to the next highest authority, potentially to the responsible cantonal department, and thereafter if need be to a judicial authority. At the university this would be the University Appeals Committee; for cantonal and municipal public bodies, the cantonal administrative court.\r\n \r\nIn the event that you do not want to lodge an appeal, there is also another path you can take. If, for example, the public body infringes your rights and the in-house data protection advisor at the relevant public body is unable to help you, under the revised Information and Data Protection Act of the Canton of Basel-Stadt, you can also contact the cantonal data protection officer: § 28a of the revised IDG gives every individual the right to go to the cantonal data protection officer with a regulatory complaint if they feel that a public body or a contracted data processor is violating the data protection rules when processing personal data concerning them.\r\n\r\nIn European law this option is called a complaint; in the law of the Canton of Basel-Stadt it is a so-called “regulatory complaint” (“aufsichtsrechtliche Anzeige”). This is not appealing a ruling; rather, you are asserting that an authority which is subject to the supervision of the data protection officer is not performing its task correctly. As the person filing the complaint, you are not involved in this procedure as a party, but the data protection officer must investigate the matter and notify you within three months of the status/outcome of the investigation and how it has been settled.\r\n\r\nThe investigation could, for example, reveal that the data processing was performed lawfully; you will then be informed of this. Or it may turn out that the public body has processed the data unlawfully, in which case the data protection officer will arrange for this to be rectified and inform you of the result of the investigation at the end of the process.\r\nHowever, if the public body has already issued a ruling, the data protection officer will not take action – partly because the ongoing appeal periods will not be suspended through their actions. At this point, the appeals process described above will be followed.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 21802, 'published', False, None, None, None, None, 174), (1768, datetime.datetime(2024, 1, 23, 12, 57, 18, 355892, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 48, 192269, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 39, 48, 119898, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the last chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das letzte Kapitel des offenen Kurses «Datenschutz» ab.', 'This quiz concludes the last chapter of the open course "Data Protection".', None, '', 'quiz-7', 'What rights do the persons affected by data processing have? When does data processing constitute unlawful processing? How can they defend themselves against data processing? Test your knowledge by answering the following questions.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=388" width="822" height="311" frameborder="0" allowfullscreen="allowfullscreen" title="4_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Welche Rechte haben die Personen, die von einer Datenbearbeitung betroffen sind? Wann liegt eine widerrechtliche Bearbeitung vor? Wie können sie sich gegen die Datenbearbeitung wehren? Testen Sie Ihr Wissen anhand der nachfolgenden Fragen.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=385" width="958" height="309" frameborder="0" allowfullscreen="allowfullscreen" title="4_6_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'What rights do the persons affected by data processing have? When does data processing constitute unlawful processing? How can they defend themselves against data processing? Test your knowledge by answering the following questions.\r\n{.lead}\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=388" width="822" height="311" frameborder="0" allowfullscreen="allowfullscreen" title="4_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 21803, 'published', False, None, None, None, None, 174), (1533, datetime.datetime(2023, 8, 2, 8, 14, 3, 298632, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 24, 48, 141222, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 24, 48, 95796, tzinfo=datetime.timezone.utc), False, 'Thanks and goodbye', 'Danke und Abschied', 'Thanks and goodbye', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the open course "Data Protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin den offenen Kurs «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the open course "Data Protection".', None, '', 'thanks-and-goodbye-1', 'Congratulations, you have reached the end of the course.\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853282406?h=b3367e2a0f&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-5_Dank_und_Abschied"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Herzlichen Glückwunsch, Sie sind am Ende des Kurses angekommen.\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853282406?h=b3367e2a0f&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-5_Dank_und_Abschied"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations, you have reached the end of the course.\r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853282406?h=b3367e2a0f&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="4-5_Dank_und_Abschied"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 21804, 'published', False, None, None, None, None, 174)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(208)
  return template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(177)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(321)
  return nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(238)
  nodelist.append(node.render_annotated(context))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(194)
  len_values = len(values)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,3759 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', 'aea5228bf52145c474d08c7dc816e270162fe849'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_next_step(128)
  return step.get_next(published_only=True)

/app/project/lms_base/models.py in get_next(249)
  return self._get_neighbour_step(is_next=True, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(71)
  return qs.first()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3061 set_many ({'aea5228bf52145c474d08c7dc816e270162fe849': (1736881648.4068651, [[(1527, datetime.datetime(2023, 8, 2, 8, 1, 18, 302146, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 760722, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 708457, tzinfo=datetime.timezone.utc), False, 'Thank you', 'Danke', 'Thank you', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin das dritte Kapitel des offenen Kurses «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', None, '', 'thank-you-2', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Glückwunsch, Sie haben das dritte Kapitel über Datenschutz abgeschlossen! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 11, 'published', False, None, None, None, None, 173)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_next_step(128)
  return step.get_next(published_only=True)

/app/project/lms_base/models.py in get_next(249)
  return self._get_neighbour_step(is_next=True, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(71)
  return qs.first()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,2789 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', '15348445580fdab71598ac19cfee7550da9df13b'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_previous_step(105)
  return step.get_previous(published_only=True)

/app/project/lms_base/models.py in get_previous(255)
  return self._get_neighbour_step(is_next=False, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(72)
  return qs.last()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,3012 set_many ({'15348445580fdab71598ac19cfee7550da9df13b': (1736881648.4136682, [[(1767, datetime.datetime(2024, 1, 23, 12, 53, 32, 275673, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 182234, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 107451, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the third chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das dritte Kapitel des offenen Kurses «Datenschutz» ab.', 'This quiz concludes the third chapter of the open course "Data Protection".', None, '', 'quiz-6', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=384" width="958" height="345" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 9, 'published', False, None, None, None, None, 173)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/app/project/lms_base/templatetags/utils.py in get_previous_step(105)
  return step.get_previous(published_only=True)

/app/project/lms_base/models.py in get_previous(255)
  return self._get_neighbour_step(is_next=False, published_only=published_only)

/app/project/lms_base/models.py in _get_neighbour_step(201)
  step = self.__class__.next_previous_manager.get_next_previous(

/app/project/lms_base/models.py in get_next_previous(72)
  return qs.last()

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,2643 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '53169bc24a037802f3e42b2df3d6e48b7ae8482f', '542c27005f4e84288827ce70a7d49bc73324a5e7', 'aa9838c7381cb71c5b2c901e1a94876e43d2f2b9'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/usr/local/lib/python3.11/site-packages/rules/templatetags/rules.py in has_perm(18)
  return user.has_perm(perm, obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in has_perm(480)
  return _user_has_perm(self, perm, obj=obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in _user_has_perm(220)
  if backend.has_perm(user, perm, obj):

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(31)
  return has_perm(perm, user, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(23)
  return permissions.test_rule(name, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/rulesets.py in test_rule(6)
  return name in self and self[name].test(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in test(172)
  return bool(self._apply(*args))

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in OR(184)
  return self._combine(other, operator.or_, args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _combine(206)
  self_result = self._apply(*args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/app/project/lms_tales/rules.py in is_in_group(47)
  for owner in course.owner.all():

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2456 set_many ({'aa9838c7381cb71c5b2c901e1a94876e43d2f2b9': (1736881648.4195912, [[(3, 'nmc_staff')]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/usr/local/lib/python3.11/site-packages/rules/templatetags/rules.py in has_perm(18)
  return user.has_perm(perm, obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in has_perm(480)
  return _user_has_perm(self, perm, obj=obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in _user_has_perm(220)
  if backend.has_perm(user, perm, obj):

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(31)
  return has_perm(perm, user, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(23)
  return permissions.test_rule(name, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/rulesets.py in test_rule(6)
  return name in self and self[name].test(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in test(172)
  return bool(self._apply(*args))

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in OR(184)
  return self._combine(other, operator.or_, args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _combine(206)
  self_result = self._apply(*args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/app/project/lms_tales/rules.py in is_in_group(47)
  for owner in course.owner.all():

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,3133 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '53169bc24a037802f3e42b2df3d6e48b7ae8482f', '542c27005f4e84288827ce70a7d49bc73324a5e7', 'aa9838c7381cb71c5b2c901e1a94876e43d2f2b9'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/usr/local/lib/python3.11/site-packages/rules/templatetags/rules.py in has_perm(18)
  return user.has_perm(perm, obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in has_perm(480)
  return _user_has_perm(self, perm, obj=obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in _user_has_perm(220)
  if backend.has_perm(user, perm, obj):

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(31)
  return has_perm(perm, user, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(23)
  return permissions.test_rule(name, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/rulesets.py in test_rule(6)
  return name in self and self[name].test(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in test(172)
  return bool(self._apply(*args))

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in OR(184)
  return self._combine(other, operator.or_, args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _combine(206)
  self_result = self._apply(*args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/app/project/lms_tales/rules.py in is_in_group(47)
  for owner in course.owner.all():

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2682 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '53169bc24a037802f3e42b2df3d6e48b7ae8482f', '542c27005f4e84288827ce70a7d49bc73324a5e7', 'aa9838c7381cb71c5b2c901e1a94876e43d2f2b9'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/library.py in render(237)
  output = self.func(*resolved_args, **resolved_kwargs)

/usr/local/lib/python3.11/site-packages/rules/templatetags/rules.py in has_perm(18)
  return user.has_perm(perm, obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in has_perm(480)
  return _user_has_perm(self, perm, obj=obj)

/usr/local/lib/python3.11/site-packages/django/contrib/auth/models.py in _user_has_perm(220)
  if backend.has_perm(user, perm, obj):

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(31)
  return has_perm(perm, user, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/permissions.py in has_perm(23)
  return permissions.test_rule(name, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/rulesets.py in test_rule(6)
  return name in self and self[name].test(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in test(172)
  return bool(self._apply(*args))

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in OR(184)
  return self._combine(other, operator.or_, args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _combine(206)
  self_result = self._apply(*args)

/usr/local/lib/python3.11/site-packages/rules/predicates.py in _apply(235)
  result = self.fn(*callargs)

/app/project/lms_tales/rules.py in is_in_group(47)
  for owner in course.owner.all():

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2761 get ('waffle:4.1.0f1f61030d824f38a8926961f0e221887',) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/waffle/templatetags/waffle_tags.py in render(36)
  if self.condition(context.get('request', None), name):

/usr/local/lib/python3.11/site-packages/waffle/__init__.py in flag_is_active(19)
  flag = get_waffle_flag_model().get(flag_name)

/usr/local/lib/python3.11/site-packages/waffle/models.py in get(52)
  cached = cache.get(cache_key)

0,2729 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', '76e323efd8711853e13c9f7cf976845908364eb2', 'dc4617fb10bec5da42f4aa2b44e053f7091310b1'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(107)
  chapter_list = list(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2955 set_many ({'dc4617fb10bec5da42f4aa2b44e053f7091310b1': (1736881648.4319155, [[(171, datetime.datetime(2020, 12, 1, 13, 52, 5, 983642, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 21, 10, 32, 28, 149049, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 21, 10, 32, 28, 149055, tzinfo=datetime.timezone.utc), False, 'Fundamentals', 'Grundlagen', 'Fundamentals', None, 'fundamentals', 14662, 'published', 29), (172, datetime.datetime(2020, 12, 1, 13, 52, 17, 340184, tzinfo=datetime.timezone.utc), datetime.datetime(2022, 5, 5, 8, 47, 38, 75493, tzinfo=datetime.timezone.utc), datetime.datetime(2022, 5, 5, 8, 47, 38, 50364, tzinfo=datetime.timezone.utc), False, 'Controllers', 'Controller', 'Controllers', None, 'controllers', 14663, 'published', 29), (173, datetime.datetime(2020, 12, 1, 13, 52, 26, 385162, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 26, 15, 11, 51, 343314, tzinfo=datetime.timezone.utc), datetime.datetime(2023, 8, 17, 8, 19, 56, tzinfo=datetime.timezone.utc), False, 'Bekanntgabe von Personendaten', 'Bekanntgabe von Personendaten', 'Disclosure of personal data', None, 'bekanntgabe-von-personendaten', 14664, 'published', 29), (174, datetime.datetime(2020, 12, 1, 13, 52, 37, 278537, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 26, 15, 51, 32, 807993, tzinfo=datetime.timezone.utc), datetime.datetime(2020, 12, 1, 13, 52, 37, tzinfo=datetime.timezone.utc), False, 'Rechte der betroffenen Personen', 'Rechte der betroffenen Personen', 'Rights of data subjects', None, 'rechte-der-betroffenen-personen', 14665, 'published', 29)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(107)
  chapter_list = list(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,8598 get_many (['76e323efd8711853e13c9f7cf976845908364eb2', '138549f5508bbba7283d6a0625e51c589d845e8f', '09d65b55b42794731a4b4412d7361e757651051f'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(118)
  step_list = list(self.chapter.published_steps.all().order_by("order"))

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

1,1171 set_many ({'09d65b55b42794731a4b4412d7361e757651051f': (1736881648.4397779, [[(1519, datetime.datetime(2023, 8, 2, 7, 19, 51, 168262, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 33, 48, 223280, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 33, 48, 108944, tzinfo=datetime.timezone.utc), False, 'Introduction', 'Einleitung', 'Introduction', None, '', None, None, None, 'In this video, Danielle Kaufmann introduces the third chapter of the open course "Data Protection".', 'In diesem Video führt Danielle Kaufmann in das dritte Kapitel des offenen Kurses «Datenschutz» ein.', 'In this video, Danielle Kaufmann introduces the third chapter of the open course "Data Protection".', None, '', 'introduction-7', 'For a public body to be allowed to process personal data, it needs to comply with certain principles. The same applies to disclosing these data; this cannot happen automatically.\r\n{.lead}\r\n\r\nWhen is a public body allowed to disclose personal data? What constitutes a disclosure and when is it justified?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Damit ein öffentliches Organ Personendaten bearbeiten darf, muss es bestimmte Grundsätze beachten. Gleiches gilt für deren Bekanntgabe, die nicht ohne Weiteres erfolgen darf.\r\n{.lead}\r\n\r\nWann darf ein öffentliches Organ Personendaten bekanntgeben? Was ist eine Bekanntgabe und wann ist sie gerechtfertigt? \r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'For a public body to be allowed to process personal data, it needs to comply with certain principles. The same applies to disclosing these data; this cannot happen automatically.\r\n{.lead}\r\n\r\nWhen is a public body allowed to disclose personal data? What constitutes a disclosure and when is it justified?\r\n\r\n<br>\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853279623?h=3637243011&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-1_Einleitung"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 1, 'published', False, None, None, None, None, 173), (1520, datetime.datetime(2023, 8, 2, 7, 24, 54, 446902, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 21, 48, 266323, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 21, 48, 209078, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose', 'Bekanntgabe zu einem personenbezogenen Zweck', 'Disclosure for an individual-specific purpose', None, '', None, None, None, 'In this article, you will learn what characterizes the disclosure of personal data for an individual-specific purpose.', 'In diesem Artikel erfahren Sie, was die Bekanntgabe von Personendaten zu einem personenbezogenen Zweck auszeichnet.', 'In this article, you will learn what characterizes the disclosure of personal data for an individual-specific purpose.', None, '', 'disclosure-for-an-individual-specific-purpose', 'Personal data can be not only processed, but also disclosed.\r\n{.lead}\r\n\r\n##Preconditions\r\nA disclosure of personal data exists when the data of a third party (a natural or legal person) are made accessible or disclosed to a different public body than the one which had hitherto been processing the information in order to fulfill its statutory task. This disclosure may be made for a purpose that either relates to the specific person (individual-specific disclosure) or does not (non-individual-specific disclosure).\r\n \r\nFor disclosure of personal data for an individual-specific purpose, § 21 of the applicable Basel-Stadt Information and Data Protection Act (IDG) requires a legal basis to be present. As with processing of personal data, this legal basis can take different forms: it may be either a so-called direct or an indirect legal basis.\r\n \r\nIn the case of a direct legal basis, a statutory provision allows even personal data to be disclosed, or even requires that it be disclosed (§ 21 para. 1 (a) and 2 (a) IDG). For example, § 139 of the Basel-Stadt Tax Act explicitly allows the tax authority to provide administrative assistance to other tax authorities.\r\n \r\nIn the case of an indirect legal basis, legislation or a regulation specifies a duty that can only be fulfilled by the responsible public body if it discloses the personal data to another public body or to third parties, or receives them from another public body or private individual (§ 21, para. 1 (b) and 2 (b) IDG). This kind of duty can look, for example, like this: \r\n§ 140 paragraph 4 (f) of the Basel-Stadt Schools Act tasks the Child and Youth Health Services Office with helping to combat infectious diseases in children. The Act itself does not say which personal data may be disclosed to teachers for this purpose; it only specifies the task. The Office itself has to decide which data are necessary for combating disease in each specific case – for example, this could also be data on the siblings of sick children, or even on the children who are in the same class as the sick children or have been playing with them.\r\n \r\nAs with processing of “general” personal data, disclosure of “general”, simple personal data only requires a (direct or indirect) legal basis in the form of legislation in the material sense (§ 21 para. 1 IDG). \r\nBy contrast, for disclosure of “specific” personal data, again as with processing of “specific personal data”, the IDG requires a basis in legislation in the formal sense (§ 21 para. 2 IDG). This basis can likewise allow data to be disclosed directly or indirectly. Legislation in the formal sense must thus authorize or require the data disclosure. In the case of an indirect legal basis, the legislation must clearly describe the duty for which the fulfillment of processing of specific personal data is deemed essential. As shown by the example mentioned of the Child and Youth Health Services Office: the only personal details on the sick children and their siblings which may be disclosed are those which are essential to achieving the purpose – that of combating infectious diseases.\r\nThe same rules as for disclosure of specific personal data also apply to disclosure of results of “profiling.” This means any automated evaluation of information aimed at analyzing key personal characteristics of an individual or predicting developments, for example with regard to work performance or health.\r\n \r\nAs an alternative to a legal basis, disclosure can also be justified if the data subject has given their express consent to this (§ 21 paras. 1 (c) and 2 (b) IDG). However, this does not mean that a public body can always use consent as an alternative just because a legal basis may be lacking: the legislation actually allows disclosure with consent only on a case-by-case basis and only where the data subject has explicitly agreed to this. Presumed consent may also be allowed, namely in cases where the data subject is not capable of giving their consent. For example, this would be the case if a patient is in a coma and therefore cannot give their consent for the hospital treating them to request their X-rays from a hospital where they have been treated before. However, the disclosure of their patient data must be in their interests and the hospital must believe in good faith that consent would have been given. It must not simply be assumed prematurely.\r\n \r\n<br>\r\n\r\n**Where can we find the required legal basis?** \r\nAs in the case of processing of personal data, for disclosures generally speaking this legal basis will be found in the corresponding sectoral legislation of the disclosing or recipient public body. When, for example, there is a need for the tax authorities to disclose personal data to the social welfare office, the authorization or obligation to do so will be set out in the Tax Act or Social Welfare Act. Thus, for example, § 141 of the Tax Act regulates the approach for providing administrative assistance to other authorities. On the other hand, based on § 28 para. 3 of the Social Welfare Act, the social welfare office is entitled to obtain personal data which it needs to fulfill its legal mandate from other public bodies, for example the tax authority, or private individuals.\r\n{.footnote}', 'Personendaten können nicht nur bearbeitet, sondern auch bekanntgegeben werden.\r\n{.lead}\r\n\r\n## Voraussetzungen\r\nEine Bekanntgabe von Personendaten liegt dann vor, wenn die Daten einer Drittperson (einer natürlichen oder juristischen Person) oder einem anderen öffentlichen Organ als dem, das die Informationen bisher zur Erfüllung seiner gesetzlichen Aufgabe bearbeitet hat, zugänglich gemacht werden. Diese Bekanntgabe kann zu einem Zweck erfolgen, der sich entweder auf die betroffene Person bezieht (personenbezogene Bekanntgabe) oder nicht (nicht personenbezogene Bekanntgabe).\r\n \r\nFür die Bekanntgabe von Personendaten zu einem personenbezogenen Zweck verlangt § 21 des anwendbaren baselstädtischen Informations- und Datenschutzgesetzes (IDG) eine gesetzliche Grundlage. Diese gesetzliche Grundlage kann, wie beim Bearbeiten von Personendaten, unterschiedlich vorliegen: einerseits als sogenannte unmittelbare oder andererseits als mittelbare gesetzliche Grundlage.\r\n \r\nBei einer unmittelbaren gesetzlichen Grundlage erlaubt eine gesetzliche Bestimmung selbst das Bekanntgeben von Personendaten, oder sie verpflichtet sogar dazu (§ 21 Abs. 1 Buchstabe a und Abs. 2 Buchstabe a IDG). Zum Beispiel erlaubt das baselstädtische Steuergesetz in § 139 ausdrücklich die Amtshilfe der Steuerbehörde gegenüber anderen Steuerbehörden.\r\n \r\nBei einer mittelbaren gesetzlichen Grundlage legt ein Gesetz oder eine Verordnung eine Aufgabe fest, die vom verantwortlichen öffentlichen Organ nur dann erfüllt werden kann, wenn es die Personendaten an ein anderes öffentliches Organ oder an Drittpersonen bekanntgibt oder diese von einem anderen öffentlichen Organ oder Privaten erhält (§ 21 Abs. 1 Buchstabe b und Abs. 2 Buchstabe b IDG). Eine solche Aufgabe kann zum Beispiel so aussehen: \r\nDas baselstädtische Schulgesetz gibt in § 140 Absatz 4 Buchstabe f dem Kinder- und Jugendgesundheitsdienst die Aufgabe, bei der Bekämpfung von ansteckenden Krankheiten unter den Kindern mitzuwirken. Das Gesetz sagt dabei nicht selbst, welche Personendaten dafür an die Lehrpersonen bekanntgegeben werden dürfen, sondern es nennt nur die Aufgabe. Der Dienst muss selbst entscheiden, welche Daten im konkreten Fall für die Krankheitsbekämpfung erforderlich sind – zum Beispiel können dies auch Daten über die Geschwister von erkrankten Kindern sein – und sogar über die Kinder, die mit diesen zusammen in der Klasse sind oder mit ihnen gespielt haben.\r\n \r\nDas Bekanntgeben von «gewöhnlichen», einfachen Personendaten erfordert, wie das Bearbeiten von «gewöhnlichen» Personendaten, nur eine (mittelbare oder unmittelbare) gesetzliche Grundlage in Form eines Gesetzes im materiellen Sinn (§ 21 Abs. 1 IDG). \r\nDagegen verlangt das IDG für die Bekanntgabe von «besonderen» Personendaten, wiederum wie beim Bearbeiten von «besonderen» Personendaten, eine Grundlage in einem Gesetz im formellen Sinn (§ 21 Abs. 2 IDG). Diese Grundlage kann ein Bekanntgeben ebenfalls unmittelbar oder mittelbar erlauben. Ein Gesetz im formellen Sinn muss also zur Datenbekanntgabe ermächtigen oder verpflichten. Im Falle einer mittelbaren gesetzlichen Grundlage muss das Gesetz die Aufgabe klar umschreiben, zu deren Erfüllung das Bearbeiten von besonderen Personendaten zwingend notwendig sein soll. Am erwähnten Beispiel des Kinder- und Jugendgesundheitsdienstes aufgezeigt: Es dürfen nur jene Personendaten über die erkrankten Kinder und ihre Geschwister bekanntgegeben werden, die zur Erreichung des Zwecks – also zur Bekämpfung von ansteckenden Krankheiten – unerlässlich sind.\r\nDasselbe wie für das Bekanntgeben von besonderen Personendaten gilt auch für das Bekanntgeben von Ergebnissen des «Profiling». Damit ist jede automatisierte Auswertung von Informationen gemeint, um wesentliche persönliche Merkmale einer Person zu analysieren oder Entwicklungen vorherzusagen, z. B. bezüglich Arbeitsleistung oder Gesundheit.\r\n \r\nAlternativ zu einer gesetzlichen Grundlage kann die Bekanntgabe auch durch eine ausdrückliche Einwilligung der betroffenen Person gerechtfertigt werden (§ 21 Abs. 1 Buchstabe c und Abs. 2 Buchstabe c IDG). Damit ist aber nicht gemeint, dass sich ein öffentliches Organ alternativ immer auf eine Einwilligung abstützen kann, nur weil allenfalls eine gesetzliche Grundlage fehlt: Das Gesetz erlaubt die Bekanntgabe mit einer Einwilligung nämlich nur im Einzelfall und nur dann, wenn die betroffene Person ausdrücklich zugestimmt hat. Berücksichtigt werden kann auch eine mutmassliche Einwilligung, nämlich dann, wenn die betroffene Person nicht in der Lage ist, einzuwilligen. Das ist beispielsweise dann der Fall, wenn eine Patientin im Koma liegt und sie deshalb nicht einwilligen kann, dass das behandelnde Spital ihre Röntgenbilder von einem Spital anfordert, in dem sie zuvor behandelt wurde. Die Bekanntgabe ihrer Patientinnendaten muss aber in ihrem Interesse liegen und die Einwilligung muss in guten Treuen vorausgesetzt werden dürfen. Sie darf also nicht vorschnell einfach angenommen werden.\r\n \r\n <br>\r\n**Wo finden wir die verlangte gesetzliche Grundlage?** \r\nWie schon beim Bearbeiten von Personendaten findet sich diese gesetzliche Grundlage auch im Falle der Bekanntgabe in aller Regel im entsprechenden Fachrecht des bekanntgebenden oder des empfangenden öffentlichen Organs. Wenn beispielsweise Personendaten von der Steuerverwaltung an die Sozialhilfe bekannt gegeben werden sollen, dann kann die Ermächtigung oder die Verpflichtung dazu im Steuergesetz oder im Sozialhilfegesetz gegeben sein. So regelt beispielsweise § 141 des Steuergesetzes die Möglichkeit der Amtshilfe an andere Behörden. Andererseits hat die Sozialhilfe, gestützt auf § 28 Abs. 3 des Sozialhilfegesetzes, den Anspruch, von anderen öffentlichen Organen, beispielsweise eben von der Steuerverwaltung, oder Privaten Personendaten zu erhalten, die sie, die Sozialhilfe, zur Erfüllung ihres gesetzlichen Auftrags benötigt.\r\n{.footnote}', 'Personal data can be not only processed, but also disclosed.\r\n{.lead}\r\n\r\n##Preconditions\r\nA disclosure of personal data exists when the data of a third party (a natural or legal person) are made accessible or disclosed to a different public body than the one which had hitherto been processing the information in order to fulfill its statutory task. This disclosure may be made for a purpose that either relates to the specific person (individual-specific disclosure) or does not (non-individual-specific disclosure).\r\n \r\nFor disclosure of personal data for an individual-specific purpose, § 21 of the applicable Basel-Stadt Information and Data Protection Act (IDG) requires a legal basis to be present. As with processing of personal data, this legal basis can take different forms: it may be either a so-called direct or an indirect legal basis.\r\n \r\nIn the case of a direct legal basis, a statutory provision allows even personal data to be disclosed, or even requires that it be disclosed (§ 21 para. 1 (a) and 2 (a) IDG). For example, § 139 of the Basel-Stadt Tax Act explicitly allows the tax authority to provide administrative assistance to other tax authorities.\r\n \r\nIn the case of an indirect legal basis, legislation or a regulation specifies a duty that can only be fulfilled by the responsible public body if it discloses the personal data to another public body or to third parties, or receives them from another public body or private individual (§ 21, para. 1 (b) and 2 (b) IDG). This kind of duty can look, for example, like this: \r\n§ 140 paragraph 4 (f) of the Basel-Stadt Schools Act tasks the Child and Youth Health Services Office with helping to combat infectious diseases in children. The Act itself does not say which personal data may be disclosed to teachers for this purpose; it only specifies the task. The Office itself has to decide which data are necessary for combating disease in each specific case – for example, this could also be data on the siblings of sick children, or even on the children who are in the same class as the sick children or have been playing with them.\r\n \r\nAs with processing of “general” personal data, disclosure of “general”, simple personal data only requires a (direct or indirect) legal basis in the form of legislation in the material sense (§ 21 para. 1 IDG). \r\nBy contrast, for disclosure of “specific” personal data, again as with processing of “specific personal data”, the IDG requires a basis in legislation in the formal sense (§ 21 para. 2 IDG). This basis can likewise allow data to be disclosed directly or indirectly. Legislation in the formal sense must thus authorize or require the data disclosure. In the case of an indirect legal basis, the legislation must clearly describe the duty for which the fulfillment of processing of specific personal data is deemed essential. As shown by the example mentioned of the Child and Youth Health Services Office: the only personal details on the sick children and their siblings which may be disclosed are those which are essential to achieving the purpose – that of combating infectious diseases.\r\nThe same rules as for disclosure of specific personal data also apply to disclosure of results of “profiling.” This means any automated evaluation of information aimed at analyzing key personal characteristics of an individual or predicting developments, for example with regard to work performance or health.\r\n \r\nAs an alternative to a legal basis, disclosure can also be justified if the data subject has given their express consent to this (§ 21 paras. 1 (c) and 2 (b) IDG). However, this does not mean that a public body can always use consent as an alternative just because a legal basis may be lacking: the legislation actually allows disclosure with consent only on a case-by-case basis and only where the data subject has explicitly agreed to this. Presumed consent may also be allowed, namely in cases where the data subject is not capable of giving their consent. For example, this would be the case if a patient is in a coma and therefore cannot give their consent for the hospital treating them to request their X-rays from a hospital where they have been treated before. However, the disclosure of their patient data must be in their interests and the hospital must believe in good faith that consent would have been given. It must not simply be assumed prematurely.\r\n \r\n<br>\r\n\r\n**Where can we find the required legal basis?** \r\nAs in the case of processing of personal data, for disclosures generally speaking this legal basis will be found in the corresponding sectoral legislation of the disclosing or recipient public body. When, for example, there is a need for the tax authorities to disclose personal data to the social welfare office, the authorization or obligation to do so will be set out in the Tax Act or Social Welfare Act. Thus, for example, § 141 of the Tax Act regulates the approach for providing administrative assistance to other authorities. On the other hand, based on § 28 para. 3 of the Social Welfare Act, the social welfare office is entitled to obtain personal data which it needs to fulfill its legal mandate from other public bodies, for example the tax authority, or private individuals.\r\n{.footnote}', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 2, 'published', False, None, None, None, None, 173), (1521, datetime.datetime(2023, 8, 2, 7, 27, 47, 339617, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 3, 792732, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 3, 743822, tzinfo=datetime.timezone.utc), False, 'Other rules for disclosure', 'Weitere Grundsätze der Bekanntgabe', 'Other rules for disclosure', None, '', None, None, None, 'In this article, you will learn about the principles of the disclosure of personal data.', 'In diesem Artikel lernen Sie die Grundsätze der Bekanntgabe von Personendaten kennen.', 'In this article, you will learn about the principles of the disclosure of personal data.', None, '', 'other-rules-for-disclosure', 'A legal basis alone is not enough to justify a disclosure. There are other rules which apply here as they do to processing.\r\n{.lead}\r\n\r\nFirst, there is the *principle of proportionality*, as per § 9 para. 3 IDG: a disclosure of personal data must always be proportionate. This means that a public body may only disclose those personal data which are appropriate and necessary to the purpose for which they are being disclosed, and the disclosure of which can be deemed acceptable to the data subject. Thus, only the personal data that the recipient needs to complete their task may be disclosed, and no more.\r\n \r\nSecond, there is the *purpose limitation principle* (§ 12 IDG): in principle, personal data may only be processed for the purpose for which they were collected. Disclosing personal data to another public body or third party may, however, be associated with a change of purpose. The original purpose for which a public body had processed the data prior to the disclosure does not necessarily have to be the same purpose for which the other public body or third party will be processing the data once received. If, for example, the social welfare office is permitted to disclose to the tax authority how much in welfare benefits a taxable person has received, then the purpose changes: from combating poverty to assessment of income tax. However, this change of purpose is usually justified by the legal basis for the disclosure or by the consent of the data subject in individual cases.\r\n \r\nThird, there is the principle of *transparency* (§ 15 IDG): if a public body collects data about a person from another public body or from private individuals, it must actively inform the data subject of this. In addition, the disclosed data must be accurate; in other words, the principle of *integrity* also applies (§ 11 IDG).\r\n \r\nAnd finally, *information security* must also be ensured (§ 8 IDG): the public body must protect information being disclosed to others by employing appropriate organizational and technical measures.', 'Mit einer gesetzlichen Grundlage allein ist es für die Bekanntgabe nicht getan. Auch hier gelten, wie beim Bearbeiten, weitere Grundsätze.\r\n{.lead}\r\n\r\nErstens gilt das *Verhältnismässigkeitsprinzip* nach § 9 Abs. 3 IDG: Eine Bekanntgabe von Personendaten muss immer verhältnismässig sein. Das heisst, ein öffentliches Organ darf nur diejenigen Personendaten bekannt geben, die für den Zweck, zu dem sie bekannt gegeben werden sollen, geeignet und erforderlich sind und deren Bekanntgabe der betroffenen Person zumutbar ist. Es dürfen also nicht mehr Personendaten bekannt gegeben werden, als die Empfängerin zu ihrer Aufgabenerfüllung benötigt.\r\n \r\nZweitens gilt das *Zweckbindungsprinzip* (§ 12 IDG): Grundsätzlich dürfen Personendaten nur zu dem Zweck bearbeitet werden, zu dem sie erhoben worden sind. Mit der Bekanntgabe der Personendaten an ein anderes öffentliches Organ oder an einen Dritten kann allerdings eine Zweckänderung verbunden sein. Der ursprüngliche Zweck, zu dem das eine öffentliche Organ die Personendaten vor der Bekanntgabe bearbeitet hat, muss nicht zwingend der gleiche Zweck sein, zu dem das andere öffentliche Organ oder die Drittperson die Daten nach Erhalt bearbeiten wird. Wenn beispielsweise die Sozialhilfe der Steuerverwaltung bekannt geben darf, wie viel Sozialhilfe eine steuerpflichtige Person bezogen hat, dann wechselt der Zweck: von der Bekämpfung der Bedürftigkeit zur Veranlagung der Einkommenssteuer. Diese Zweckänderung wird aber in der Regel durch die gesetzliche Grundlage für die Bekanntgabe oder durch die Einwilligung der betroffenen Person im Einzelfall gerechtfertigt.\r\n \r\nDrittens gilt das Prinzip der *Transparenz* (§ 15 IDG): Erhebt ein öffentliches Organ Daten über eine Person bei einem anderen öffentlichen Organ oder auch bei Privaten, dann muss es die betroffene Person über diese Datenerhebung aktiv informieren. Die bekanntgegebenen Daten müssen zudem richtig sein, das heisst, es gilt ebenfalls das Prinzip der *Integrität* (§ 11 IDG).\r\n \r\nUnd schliesslich muss auch die *Informationssicherheit* gewährleistet sein (§ 8 IDG): Das öffentliche Organ muss Informationen bei deren Bekanntgabe an andere durch angemessene organisatorische und technische Massnahmen schützen.', 'A legal basis alone is not enough to justify a disclosure. There are other rules which apply here as they do to processing.\r\n{.lead}\r\n\r\nFirst, there is the *principle of proportionality*, as per § 9 para. 3 IDG: a disclosure of personal data must always be proportionate. This means that a public body may only disclose those personal data which are appropriate and necessary to the purpose for which they are being disclosed, and the disclosure of which can be deemed acceptable to the data subject. Thus, only the personal data that the recipient needs to complete their task may be disclosed, and no more.\r\n \r\nSecond, there is the *purpose limitation principle* (§ 12 IDG): in principle, personal data may only be processed for the purpose for which they were collected. Disclosing personal data to another public body or third party may, however, be associated with a change of purpose. The original purpose for which a public body had processed the data prior to the disclosure does not necessarily have to be the same purpose for which the other public body or third party will be processing the data once received. If, for example, the social welfare office is permitted to disclose to the tax authority how much in welfare benefits a taxable person has received, then the purpose changes: from combating poverty to assessment of income tax. However, this change of purpose is usually justified by the legal basis for the disclosure or by the consent of the data subject in individual cases.\r\n \r\nThird, there is the principle of *transparency* (§ 15 IDG): if a public body collects data about a person from another public body or from private individuals, it must actively inform the data subject of this. In addition, the disclosed data must be accurate; in other words, the principle of *integrity* also applies (§ 11 IDG).\r\n \r\nAnd finally, *information security* must also be ensured (§ 8 IDG): the public body must protect information being disclosed to others by employing appropriate organizational and technical measures.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 3, 'published', False, None, None, None, None, 173), (1522, datetime.datetime(2023, 8, 2, 7, 29, 11, 546208, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 34, 40, 117126, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 34, 40, 68312, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose: restrictions', 'Bekanntgabe zu einem personenbezogenen Zweck: Einschränkungen', 'Disclosure for an individual-specific purpose: restrictions', None, '', None, None, None, 'In this podcast, Beat Rudin explains what restrictions there may be on disclosure for an individual-specific purpose.', 'In diesem Podcast erklärt Beat Rudin, welche Einschränkungen es bei der Bekanntgabe zu einem personenbezogenen Zweck geben kann.', 'In this podcast, Beat Rudin explains what restrictions there may be on disclosure for an individual-specific purpose.', None, '', 'disclosure-for-an-individual-specific-purpose-restrictions', 'Sometimes, information disclosures need to be restricted. One reason for this could be confidentiality interests and obligations. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### References for the secrets mentioned\r\n \r\n- [Medical confidentiality (Art. 321 of the Swiss Criminal Code)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/en#art_321)\r\n- [Tax secrecy (§ 138 para. 1 of the Basel-Stadt Tax Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Social welfare secrecy (§ 28 para. 1 of the Basel-Stadt Social Welfare Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Social security secrecy (Art. 33 of the Federal Act on General Aspects of Social Security Law)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Duty of confidentiality for victim support and counseling services (Art. 11 of the Federal Act on the Provision of Support to Victims of Crime)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', 'Manchmal muss die Bekanntgabe von Informationen eingeschränkt werden. Ein Grund dafür können Geheimhaltungsinteressen und -pflichten sein. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### Referenzen für die erwähnten Geheimnisse\r\n \r\n- [Ärztliches Berufsgeheimnis (Art. 321 des Schweizerischen Strafgesetzbuches)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/de#art_321steu)\r\n- [Steuergeheimnis (§ 138 Abs. 1 Steuergesetz Basel-Stadt)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Sozialhilfegeheimnis (§ 28 Abs. 1 Sozialhilfegesetz Basel-Stadt)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Sozialversicherungsgeheimnis (Art. 33 des Bundesgesetzes über den allgemeinen Teil der Sozialversicherung)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Schweigepflicht der Opferhilfeberatung (Art. 11 des Bundesgesetzes über die Hilfe an Opfer von Straftaten)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', 'Sometimes, information disclosures need to be restricted. One reason for this could be confidentiality interests and obligations. \r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302063%3Fsecret_token%3Ds-zX9aXcKz80d&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-4-bekanntgab-zu-einem/s-zX9aXcKz80d" title="3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 4 Bekanntgabe zu einem personenbezogenen Zweck - Einschraenkungen</a></div>\r\n\r\n<br>\r\n### References for the secrets mentioned\r\n \r\n- [Medical confidentiality (Art. 321 of the Swiss Criminal Code)](https://www.fedlex.admin.ch/eli/cc/54/757_781_799/en#art_321)\r\n- [Tax secrecy (§ 138 para. 1 of the Basel-Stadt Tax Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/640.100)\r\n- [Social welfare secrecy (§ 28 para. 1 of the Basel-Stadt Social Welfare Act)](https://www.gesetzessammlung.bs.ch/app/de/texts_of_law/890.100)\r\n- [Social security secrecy (Art. 33 of the Federal Act on General Aspects of Social Security Law)](https://www.fedlex.admin.ch/eli/cc/2002/510/de#art_33)\r\n- [Duty of confidentiality for victim support and counseling services (Art. 11 of the Federal Act on the Provision of Support to Victims of Crime)](https://www.fedlex.admin.ch/eli/cc/2008/232/de#art_11)', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TA', '', 4, 'published', False, None, None, None, None, 173), (1523, datetime.datetime(2023, 8, 2, 7, 42, 45, 368008, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 1, 493649, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 1, 416071, tzinfo=datetime.timezone.utc), False, 'Disclosure for an individual-specific purpose: process', 'Bekanntgabe zu einem personenbezogenen Zweck: Vorgehen', 'Disclosure for an individual-specific purpose: process', None, '', None, None, None, 'In this podcast, Danielle Kaufmann and Beat Rudin explain how to proceed with disclosures for individual-specific purposes.', 'In diesem Podcast erklären Danielle Kaufmann und Beat Rudin, wie Sie bei der Bekanntgabe zu personenbezogenem Zweck vorgehen.', 'In this podcast, Danielle Kaufmann and Beat Rudin explain how to proceed with disclosures for individual-specific purposes.', None, '', 'disclosure-for-an-individual-specific-purpose-process', 'What is the process for disclosing data for an individual-specific purpose?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Summary of the four questions which should be asked when considering a disclosure:\r\n \r\n- First: Is the public body wishing to obtain the personal data even permitted to process these data?\r\n- Second: Is it permitted to ask the other public body from which it wishes to obtain the data the question about the data, as by doing so it is already disclosing information which could possibly be subject to a specific legal secrecy rule?\r\n- Third: Is the public body being asked to disclose the data even permitted to process these data itself? If it is not even permitted to process the data, it is certainly not permitted to disclose them.\r\n- And fourth: Is there a legal basis for the disclosure, is it proportionate and are there any restrictions under § 29 IDG which would prevent it – in particular a legal confidentiality obligation or an overriding confidentiality interest?', 'Wie geht man bei der Bekanntgabe von Daten zu einem personenbezogenen Zweck vor?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Zusammenfassung der vier Frageschritte zur Prüfung einer Bekanntgabe\r\n \r\n- Erstens: Darf das öffentliche Organ, das Personendaten erhalten will, diese Daten überhaupt bearbeiten?\r\n- Zweitens: Darf es dem anderen öffentlichen Organ, von dem es Daten erhalten will, die Frage nach den Daten stellen, weil es damit bereits Informationen bekannt gibt und diese Informationen möglicherweise einem besonderen gesetzlichen Geheimnis unterstehen?\r\n- Drittens: Darf das öffentliche Organ, das die Daten bekannt geben soll, diese Daten selber überhaupt bearbeiten? Wenn es die Daten gar nicht bearbeiten dürfte, darf es sie erst recht nicht bekanntgeben.\r\n- Und viertens: Gibt es für die Bekanntgabe eine gesetzliche Grundlage, ist sie verhältnismässig und stehen ihr keine Einschränkungen nach § 29 IDG entgegen – also insbesondere eine gesetzliche Geheimhaltungspflicht oder ein überwiegendes Geheimhaltungsinteresse?', 'What is the process for disclosing data for an individual-specific purpose?\r\n{.lead}\r\n\r\n<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1588302055%3Fsecret_token%3Ds-n2IUzrhYVdT&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/user-74348671" title="New Media Center, Universität Basel" target="_blank" style="color: #cccccc; text-decoration: none;">New Media Center, Universität Basel</a> · <a href="https://soundcloud.com/user-74348671/3-5-bekanntgab-zu-einem/s-n2IUzrhYVdT" title="3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen" target="_blank" style="color: #cccccc; text-decoration: none;">3 - 5 Bekanntgabe zu einem personenbezogenen Zweck - Vorgehen</a></div>\r\n\r\n<br>\r\n###Summary of the four questions which should be asked when considering a disclosure:\r\n \r\n- First: Is the public body wishing to obtain the personal data even permitted to process these data?\r\n- Second: Is it permitted to ask the other public body from which it wishes to obtain the data the question about the data, as by doing so it is already disclosing information which could possibly be subject to a specific legal secrecy rule?\r\n- Third: Is the public body being asked to disclose the data even permitted to process these data itself? If it is not even permitted to process the data, it is certainly not permitted to disclose them.\r\n- And fourth: Is there a legal basis for the disclosure, is it proportionate and are there any restrictions under § 29 IDG which would prevent it – in particular a legal confidentiality obligation or an overriding confidentiality interest?', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TA', '', 5, 'published', False, None, None, None, None, 173), (1766, datetime.datetime(2024, 1, 23, 12, 52, 21, 884131, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 31, 291172, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 35, 31, 212853, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz of the open course "Data Protection" tests your knowledge about the disclosure of personal data.', 'Dieses Quiz des offenen Kurses «Datenschutz» prüft Ihr Wissen über die Bekanntgabe von Personendaten.', 'This quiz of the open course "Data Protection" tests your knowledge about the disclosure of personal data.', None, '', 'quiz-5', 'What conditions apply to the disclosure of personal data?\r\n{.lead}\r\n\r\nNow that you have learned about the procedure for disclosing personal data for a purpose relating to a specific individual, you can now test the knowledge you have acquired so far.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=386" width="822" height="329" frameborder="0" allowfullscreen="allowfullscreen" title="3_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'Unter welchen Voraussetzungen dürfen Personendaten bekannt gegeben werden?\r\n{.lead}\r\n\r\nSie haben nun das Vorgehen bei der Bekanntgabe von Personendaten zu einem personenbezogenen Zweck kennengelernt und haben hier die Möglichkeit, das bisher angeeignete Wissen zu testen.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=383" width="958" height="447" frameborder="0" allowfullscreen="allowfullscreen" title="3_4_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', 'What conditions apply to the disclosure of personal data?\r\n{.lead}\r\n\r\nNow that you have learned about the procedure for disclosing personal data for a purpose relating to a specific individual, you can now test the knowledge you have acquired so far.\r\n\r\n<br>\r\n\r\n<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=386" width="822" height="329" frameborder="0" allowfullscreen="allowfullscreen" title="3_6_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 6, 'published', False, None, None, None, None, 173), (1524, datetime.datetime(2023, 8, 2, 7, 46, 3, 205318, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 31, 880821, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 31, 794651, tzinfo=datetime.timezone.utc), False, 'Disclosure for a non-individual-specific purpose', 'Bekanntgabe zu einem nicht personenbezogenen Zweck', 'Disclosure for a non-individual-specific purpose', None, '', None, None, None, 'In this article, you will learn how disclosure for a non-individual-specific purpose works.', 'In diesem Artikel lernen Sie, wie die Bekanntgabe zu einem nicht personenbezogenen Zweck funktioniert.', 'In this article, you will learn how disclosure for a non-individual-specific purpose works.', None, '', 'disclosure-for-a-non-individual-specific-purpose', 'Disclosures for a non-individual-specific purpose have certain similarities and differences to disclosures for an individual-specific purpose.\r\n{.lead}\r\n\r\nUntil now, we have been looking at disclosure of personal data for an individual-specific purpose as per § 21 IDG: this means that the data are being disclosed for processing in relation to a specific person, for example a patient, a specific taxpayer or a specific welfare benefit recipient.\r\n \r\nNow we turn to disclosures of personal data for a *non*-individual-specific purpose as per § 22 IDG. Here, the disclosure no longer serves the purpose of gaining an insight into the specific person concerned; rather, the purpose is to gain a general insight. The aim here is therefore to gain new general insights by processing the personal data of *many* data subjects, insights which are of interest not only to the individual, specific person, but to all or many people.\r\n \r\nSo what we are talking about is the case where a public body passes on personal data which it is permitted to process for an individual-specific purpose to a different public body or private individual for a non-individual-specific purpose. Application cases include, for example, disclosure of personal data for research, statistical or planning purposes.\r\n \r\n§ 22 IDG is the general legal basis for data disclosures for a non-individual-specific purpose. If a public body is allowed to process personal data for an individual-specific purpose, then it is also allowed to pass on these data for a non-individual-specific purpose. Before making such a data disclosure, however, the discloser should check whether it is precluded due to a specific confidentiality provision, for example a professional confidentiality stipulation or a special official secrecy provision. Furthermore, there may also be special statutory provisions governing the disclosure of personal data for a non-individual-specific purpose.\r\nThe best-known example of application is the Federal Act on Research involving Human Beings, or Human Research Act.\r\n\r\n The principle of proportionality as per § 9 para. 3 IDG applies here as it does to all data processing: the only personal data that may be passed on are those that are appropriate and necessary for achieving the purpose and the disclosure of which can be deemed acceptable to the data subject. This means, for example: if no identifying personal data are necessary for the non-individual-specific purpose, then the personal data may not be disclosed in a form which allows individuals to be identified, but rather only in anonymized or, at the outside, pseudonymized form. The public body may thus only release personal data if the data still have to be in an identifying form in order to achieve the purpose. If, for example, these data need to be combined with other data from other sources, then of course anonymized data will not work; however, pseudonymized data could be used if need be.\r\n \r\nThe legislation also prescribes that when public bodies disclose personal data, the recipients are required to anonymize or at least pseudonymize the data as soon as the processing purpose allows. They are only permitted to publish analyses of the data in such a form that it is no longer possible to draw any conclusions as to the people involved.\r\nIf the data are passed on to private recipients, then a purpose limitation must also be imposed in addition to the previously mentioned restrictions. Personal data may only be passed on to private individuals for research purposes; that is, not for planning and statistical purposes. In addition, the private recipients must undertake not to process the personal data for other purposes, not to pass the data on to third parties and to guarantee the security of the information.\r\n \r\nIf public bodies are receiving personal data for a non-individual-specific purpose, these restrictions do not need to be mentioned separately, as they already apply by law.', 'Bei der Bekanntgabe zu einem nicht personenbezogenen Zweck gibt es bestimmte Gemeinsamkeiten und Unterschiede zur Bekanntgabe zum personenbezogenen Zweck.\r\n{.lead}\r\n\r\nBisher haben wir das Bekanntgeben von Personendaten zu einem personenbezogenen Zweck gemäss § 21 IDG angeschaut: Das heisst, die Bekanntgabe der Daten dient der Bearbeitung in Bezug auf eine konkrete Person, zum Beispiel eine Patientin, ein bestimmter Steuerzahler oder eine konkrete Sozialhilfebezügerin.\r\n \r\nNun wenden wir uns der Bekanntgabe von Personendaten für einen *nicht* personenbezogenen Zweck nach § 22 IDG zu. Hier dient die Bekanntgabe nicht mehr dem Zweck, eine Erkenntnis über die konkret betroffene Person zu gewinnen, sondern dem Zweck, eine generelle Erkenntnis zu gewinnen. Es geht also darum, durch die Bearbeitung von Personendaten *vieler* betroffener Personen neue generelle Erkenntnisse zu gewinnen, die nicht nur für die einzelne, konkrete Person von Interesse sind, sondern für alle oder viele Menschen.\r\n \r\nWir sprechen also von dem Fall, dass ein öffentliches Organ Personendaten, die es selbst zu einem personenbezogenen Zweck bearbeiten darf, einem anderen öffentlichen Organ oder Privaten zu einem nicht personenbezogenen Zweck weitergibt. Anwendungsfälle sind beispielsweise die Weitergabe von Personendaten zu Forschungs-, Statistik- oder Planungszwecken.\r\n \r\n§ 22 IDG ist die allgemeine gesetzliche Grundlage zur Datenbekanntgabe zu einem nicht personenbezogenen Zweck. Wenn ein öffentliches Organ Personendaten zu einem personenbezogenen Zweck bearbeiten darf, dann darf es diese Personendaten auch weitergeben für einen nicht personenbezogenen Zweck. Vor einer entsprechenden Bekanntgabe der Daten ist allerdings zu prüfen, ob sie aufgrund einer besonderen Geheimhaltungsbestimmung ausgeschlossen ist, beispielsweise durch ein Berufsgeheimnis oder ein besonderes Amtsgeheimnis. Im Weiteren können auch spezialgesetzliche Bestimmungen die Bekanntgabe von Personendaten zu einem nicht personenbezogenen Zweck regeln.\r\nDas bekannteste Anwendungsbeispiel ist das Bundesgesetz über die Forschung am Menschen, das Humanforschungsgesetz.\r\n\r\n Das Verhältnismässigkeitsprinzip nach § 9 Abs. 3 IDG gilt wie bei jeder Datenbearbeitung auch hier: Es dürfen nur solche Personendaten weitergegeben werden, die zur Zweckerreichung geeignet und erforderlich sind und deren Bekanntgabe den betroffenen Personen zumutbar ist. Das bedeutet zum Beispiel: Wenn für den nicht personenbezogenen Zweck keine identifizierenden Personendaten erforderlich sind, dann dürfen die Personendaten nicht in identifizierender Form, sondern nur in anonymisierter oder allenfalls in pseudonymisierter Form weitergegeben werden. Das öffentliche Organ darf Personendaten somit nur dann herausgeben, wenn es zur Zweckerreichung erforderlich ist, dass die Daten noch identifizierend sind. Wenn diese Daten beispielsweise mit anderen Daten aus anderen Quellen kombiniert werden müssen, dann geht das mit anonymisierten Daten natürlich nicht, aber allenfalls mit pseudonymisierten.\r\n \r\nDas Gesetz schreibt ausserdem vor, dass bei der Herausgabe von Personendaten durch öffentliche Organe die Empfängerinnen und Empfänger verpflichtet sind, die Daten zu anonymisieren oder zumindest zu pseudonymisieren, sobald der Bearbeitungszweck es zulässt. Die Auswertungen der Daten dürfen sie nur so bekanntgeben, dass keine Rückschlüsse auf die betroffenen Personen mehr möglich sind.\r\nSollen die Daten an private Empfängerinnen oder Empfänger weitergegeben werden, dann ist zusätzlich zu den bereits erwähnten Auflagen eine Zweckeinschränkung vorzunehmen. An private Personen dürfen Personendaten nur zu Forschungszwecken, also nicht für Planung und Statistik weitergeben werden. Zudem müssen sich die privaten Empfängerinnen und Empfänger verpflichten, die Personendaten nicht für andere Zwecke zu bearbeiten, die Personendaten nicht an Dritte weiterzugeben und für die Informationssicherheit zu sorgen.\r\n \r\nSind öffentliche Organe Empfängerinnen von Personendaten zu einem nicht personenbezogenen Zweck, müssen diese Auflagen nicht separat erwähnt werden, weil sie ohnehin von Gesetzes wegen gelten.', 'Disclosures for a non-individual-specific purpose have certain similarities and differences to disclosures for an individual-specific purpose.\r\n{.lead}\r\n\r\nUntil now, we have been looking at disclosure of personal data for an individual-specific purpose as per § 21 IDG: this means that the data are being disclosed for processing in relation to a specific person, for example a patient, a specific taxpayer or a specific welfare benefit recipient.\r\n \r\nNow we turn to disclosures of personal data for a *non*-individual-specific purpose as per § 22 IDG. Here, the disclosure no longer serves the purpose of gaining an insight into the specific person concerned; rather, the purpose is to gain a general insight. The aim here is therefore to gain new general insights by processing the personal data of *many* data subjects, insights which are of interest not only to the individual, specific person, but to all or many people.\r\n \r\nSo what we are talking about is the case where a public body passes on personal data which it is permitted to process for an individual-specific purpose to a different public body or private individual for a non-individual-specific purpose. Application cases include, for example, disclosure of personal data for research, statistical or planning purposes.\r\n \r\n§ 22 IDG is the general legal basis for data disclosures for a non-individual-specific purpose. If a public body is allowed to process personal data for an individual-specific purpose, then it is also allowed to pass on these data for a non-individual-specific purpose. Before making such a data disclosure, however, the discloser should check whether it is precluded due to a specific confidentiality provision, for example a professional confidentiality stipulation or a special official secrecy provision. Furthermore, there may also be special statutory provisions governing the disclosure of personal data for a non-individual-specific purpose.\r\nThe best-known example of application is the Federal Act on Research involving Human Beings, or Human Research Act.\r\n\r\n The principle of proportionality as per § 9 para. 3 IDG applies here as it does to all data processing: the only personal data that may be passed on are those that are appropriate and necessary for achieving the purpose and the disclosure of which can be deemed acceptable to the data subject. This means, for example: if no identifying personal data are necessary for the non-individual-specific purpose, then the personal data may not be disclosed in a form which allows individuals to be identified, but rather only in anonymized or, at the outside, pseudonymized form. The public body may thus only release personal data if the data still have to be in an identifying form in order to achieve the purpose. If, for example, these data need to be combined with other data from other sources, then of course anonymized data will not work; however, pseudonymized data could be used if need be.\r\n \r\nThe legislation also prescribes that when public bodies disclose personal data, the recipients are required to anonymize or at least pseudonymize the data as soon as the processing purpose allows. They are only permitted to publish analyses of the data in such a form that it is no longer possible to draw any conclusions as to the people involved.\r\nIf the data are passed on to private recipients, then a purpose limitation must also be imposed in addition to the previously mentioned restrictions. Personal data may only be passed on to private individuals for research purposes; that is, not for planning and statistical purposes. In addition, the private recipients must undertake not to process the personal data for other purposes, not to pass the data on to third parties and to guarantee the security of the information.\r\n \r\nIf public bodies are receiving personal data for a non-individual-specific purpose, these restrictions do not need to be mentioned separately, as they already apply by law.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 7, 'published', False, None, None, None, None, 173), (1525, datetime.datetime(2023, 8, 2, 7, 52, 8, 145425, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 52, 205675, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 22, 52, 156744, tzinfo=datetime.timezone.utc), False, 'Disclosures in the field of human research', 'Bekanntgabe im Humanforschungsbereich', 'Disclosures in the field of human research', None, '', None, None, None, 'In this article, you will find out what characterizes disclosures in the field of human research.', 'In diesem Artikel erfahren Sie, was die Bekanntgabe im Humanforschungsbereich auszeichnet.', 'In this article, you will find out what characterizes disclosures in the field of human research.', None, '', 'disclosures-in-the-field-of-human-research', 'The Federal Act on Research involving Human Beings – the Human Research Act – governs an important application case for the disclosure of health-related personal data.\r\n{.lead}\r\n\r\nAs a basic principle, under the Human Research Act (HRA), research on humans may only be carried out with the informed consent of the involved individuals. Further use and dissemination of health-related personal data from the treatment context to the research context is governed separately by Articles 32 ff. HRA. These articles make distinctions according to the sensitivity of the health data and the form in which these data are to be subsequently used: identifying (in the HRA “uncoded”), pseudonymized (in the HRA “encoded”), or anonymized.\r\n\r\n<br>\r\n## Genetic data and biological material\r\nAs the most sensitive of personal data, genetic data and biological material may only be disclosed in an identifying/uncoded form with the explicit consent of the individual involved and only for specific research projects (Art. 32 para. 1 HRA).\r\n\r\nIf the data have been *pseudonymized* (encoded) previously, then they may be disclosed *generally for research purposes*, but likewise only with explicit consent (Art. 32 para. 2 HRA). In this case the key for re-identifying the pseudonymized data will not be disclosed, meaning that the data are thus anonymous for the recipient.\r\n\r\n*Anonymized genetic data and biological material* may be disclosed *generally for research purposes* provided that the data subjects have *not objected to anonymization* after being adequately informed (Art. 32 para. 3 HRA). The reason for this right to object is that anonymization means the data subjects will lose the right and even the possibility to be informed of findings from this research, including, for example, incidental findings of importance to them, because with anonymized data there is no longer a way to identify them as individuals concerned.\r\n\r\n<br>\r\n## Non-genetic health-related personal data\r\nUnder Art. 33 para. 1 HRA, non-genetic health-related personal data may be disclosed generally for research purposes (and not only for a specific research project) in identifying form with the explicit consent of the data subjects, as these data are deemed not quite as sensitive as genetic data.\r\n\r\nIn *pseudonymized form* non-genetic health-related personal data may be used for *general research purposes* if the data subject has been informed in advance and has not entered any objection to the further use.\r\n\r\nFinally, non-genetic health-related personal data in *anonymized form* may be used *without any additional conditions*.\r\n\r\n<br>\r\nThe differentiation between genetic health-related data and biological material on the one hand and non-genetic health-related personal data on the other is made by the Human Research Act because it assumes that genetic data and biological material have the potential to cause more extensive infringements of fundamental rights than non-genetic health-related personal data.\r\n{.footnote}', 'Das Bundesgesetz über die Forschung am Menschen, das Humanforschungsgesetz, regelt einen wichtigen Anwendungsfall der Bekanntgabe von gesundheitsbezogenen Personendaten.\r\n{.lead}\r\n\r\nGrundsätzlich ist nach dem Humanforschungsgesetz (HFG) Forschung am Menschen nur mit informierter Einwilligung (informed consent) der betroffenen Personen zulässig. Die Weiterverwendung und Weitergabe von gesundheitsbezogenen Personendaten aus dem Behandlungskontext in den Forschungskontext ist in den Artikeln 32 ff. HFG separat geregelt. Dabei wird unterschieden nach der Sensitivität der Gesundheitsdaten und in welcher Form diese Daten weiterverwendet werden sollen: identifizierend (nach HFG «unverschlüsselt»), pseudonymisiert (nach HFG «verschlüsselt») oder anonymisiert.\r\n\r\n<br>\r\n## Genetische Daten und biologisches Material\r\nGenetische Daten und biologisches Material als sensitivste Personendaten dürfen in identifizierender/ unverschlüsselter Form nur mit ausdrücklicher Einwilligung der betroffenen Person und nur für bestimmte Forschungsvorhaben weitergegeben werden (Art. 32 Abs. 1 HFG).\r\n\r\nWerden die Daten vorher *pseudonymisiert* (verschlüsselt), dann dürfen sie, aber ebenfalls nur mit ausdrücklicher Einwilligung, *allgemein für Forschungszwecke* weitergegeben werden (Art. 32 Abs. 2 HFG). Dabei wird der Schlüssel zur Re-Identifizierung der pseudonymisierten Daten nicht mit bekannt gegeben, was bedeutet, dass die Daten für die Empfängerin damit anonym sind.\r\n\r\n*Anonymisierte genetische Daten und biologisches Material* dürfen, sofern die betroffenen Personen nach hinreichender Information der *Anonymisierung nicht widersprochen* haben, *allgemein für Forschungszwecke* weitergegeben werden (Art. 32 Abs. 3 HFG). Der Grund für dieses Widerspruchsrecht liegt darin, dass die betroffenen Personen mit der Anonymisierung das Recht und überhaupt die Möglichkeit verlieren, über Erkenntnisse aus dieser Forschung informiert zu werden, beispielsweise auch nicht über für sie wichtige Zufallsbefunde. Denn von anonymisierten Daten kann man nicht mehr auf sie als betroffene Person zurückschliessen.\r\n\r\n<br>\r\n## Nicht genetische gesundheitsbezogene Personendaten\r\nNicht genetische gesundheitsbezogene Personendaten dürfen nach Art. 33 Abs. 1 HFG in identifizierender Form mit ausdrücklicher Einwilligung der betroffenen Personen allgemein für Forschungszwecke (und nicht nur für ein bestimmtes Forschungsprojekt) weitergegeben werden, da sie nicht als ganz so sensitiv gelten wie genetische Daten.\r\n\r\nIn *pseudonymisierter Form* dürfen nicht genetische gesundheitsbezogene Personendaten für *Forschungszwecke allgemein* verwendet werden, wenn die betroffene Person vorgängig informiert wird und keinen Widerspruch gegen die Weiterverwendung einlegt.\r\n\r\nIn *anonymisierter Form* schliesslich dürfen nicht genetische gesundheitsbezogene Personendaten *ohne weitere Voraussetzungen* verwendet werden.\r\n\r\n<br>\r\nDie Unterscheidung in genetische gesundheitsbezogene Daten und biologisches Material auf der einen Seite und nicht genetische gesundheitsbezogene Personendaten auf der anderen Seite macht das Humanforschungsgesetz, weil es davon ausgeht, dass genetische Daten und biologisches Material tiefgreifendere Grundrechtseingriffe ermöglichen als nicht genetische gesundheitsbezogene Personendaten.\r\n{.footnote}', 'The Federal Act on Research involving Human Beings – the Human Research Act – governs an important application case for the disclosure of health-related personal data.\r\n{.lead}\r\n\r\nAs a basic principle, under the Human Research Act (HRA), research on humans may only be carried out with the informed consent of the involved individuals. Further use and dissemination of health-related personal data from the treatment context to the research context is governed separately by Articles 32 ff. HRA. These articles make distinctions according to the sensitivity of the health data and the form in which these data are to be subsequently used: identifying (in the HRA “uncoded”), pseudonymized (in the HRA “encoded”), or anonymized.\r\n\r\n<br>\r\n## Genetic data and biological material\r\nAs the most sensitive of personal data, genetic data and biological material may only be disclosed in an identifying/uncoded form with the explicit consent of the individual involved and only for specific research projects (Art. 32 para. 1 HRA).\r\n\r\nIf the data have been *pseudonymized* (encoded) previously, then they may be disclosed *generally for research purposes*, but likewise only with explicit consent (Art. 32 para. 2 HRA). In this case the key for re-identifying the pseudonymized data will not be disclosed, meaning that the data are thus anonymous for the recipient.\r\n\r\n*Anonymized genetic data and biological material* may be disclosed *generally for research purposes* provided that the data subjects have *not objected to anonymization* after being adequately informed (Art. 32 para. 3 HRA). The reason for this right to object is that anonymization means the data subjects will lose the right and even the possibility to be informed of findings from this research, including, for example, incidental findings of importance to them, because with anonymized data there is no longer a way to identify them as individuals concerned.\r\n\r\n<br>\r\n## Non-genetic health-related personal data\r\nUnder Art. 33 para. 1 HRA, non-genetic health-related personal data may be disclosed generally for research purposes (and not only for a specific research project) in identifying form with the explicit consent of the data subjects, as these data are deemed not quite as sensitive as genetic data.\r\n\r\nIn *pseudonymized form* non-genetic health-related personal data may be used for *general research purposes* if the data subject has been informed in advance and has not entered any objection to the further use.\r\n\r\nFinally, non-genetic health-related personal data in *anonymized form* may be used *without any additional conditions*.\r\n\r\n<br>\r\nThe differentiation between genetic health-related data and biological material on the one hand and non-genetic health-related personal data on the other is made by the Human Research Act because it assumes that genetic data and biological material have the potential to cause more extensive infringements of fundamental rights than non-genetic health-related personal data.\r\n{.footnote}', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 8, 'published', False, None, None, None, None, 173), (1767, datetime.datetime(2024, 1, 23, 12, 53, 32, 275673, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 182234, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 36, 47, 107451, tzinfo=datetime.timezone.utc), False, 'Quiz', 'Quiz', 'Quiz', None, '', None, None, None, 'This quiz concludes the third chapter of the open course "Data Protection".', 'Dieses Quiz schliesst das dritte Kapitel des offenen Kurses «Datenschutz» ab.', 'This quiz concludes the third chapter of the open course "Data Protection".', None, '', 'quiz-6', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=384" width="958" height="345" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Datenschutz"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '<iframe src="https://h5p.nmc.unibas.ch/wp-admin/admin-ajax.php?action=h5p_embed&id=387" width="822" height="365" frameborder="0" allowfullscreen="allowfullscreen" title="3_9_Data Protection"></iframe><script src="https://h5p.nmc.unibas.ch/wp-content/plugins/h5p/h5p-php-library/js/h5p-resizer.js" charset="UTF-8"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TQ', '', 9, 'published', False, None, None, None, None, 173), (1526, datetime.datetime(2023, 8, 2, 8, 0, 32, 389319, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 672959, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 22, 15, 37, 5, 625005, tzinfo=datetime.timezone.utc), False, 'Cross-border disclosure of personal data', 'Grenzüberschreitende Bekanntgabe von Personendaten', 'Cross-border disclosure of personal data', None, '', None, None, None, 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', 'In diesem Artikel lernen Sie die Bestimmungen für die grenzüberschreitende Bekanntgabe von Personendaten kennen.', 'In this article, you will learn about the provisions governing the cross-border disclosure of personal data.', None, '', 'cross-border-disclosure-of-personal-data', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', 'Wenn Daten aus der Schweiz in andere Länder bekannt gegeben werden, gibt es einige besondere Bestimmungen zu beachten.\r\n{.lead}\r\n\r\nDatenbearbeitungen in der Schweiz und in den meisten europäischen Staaten unterstehen klaren, im weltweiten Vergleich strengen datenschutzrechtlichen Bestimmungen. Werden Personendaten aus der Schweiz in Länder weitergegeben, in denen kein entsprechendes Datenschutzniveau gilt, dann besteht die Gefahr, dass diese Daten in einer Weise genutzt werden, die nach dem schweizerischen oder europäischen Datenschutzrecht nicht zulässig ist. Damit besteht für die betroffenen Personen die Gefahr von Grundrechtsverletzungen.\r\n \r\nAus diesem Grund legt § 23 des Informations- und Datenschutzgesetzes (IDG) fest, dass Personendaten nur in jene Staaten bekanntgegeben werden dürfen, die der Europaratskonvention 108, künftig 108+, beigetreten sind, also in Staaten, die damit einen zum schweizerischen Datenschutzrecht vergleichbaren Schutz für die Grundrechte der betroffenen Personen gewährleisten. In andere Staaten dürfen Personendaten nur dann bekannt gegeben werden, wenn deren Gesetzgebung ebenfalls einen angemessenen Schutz sicherstellt oder wenn durch vertragliche Vereinbarungen zwischen dem datenliefernden öffentlichen Organ und den Empfängerinnen oder Empfängern ein angemessener Schutz garantiert wird. Welche Staaten durch Gesetzgebung einen angemessenen Schutz gewährleisten, hält eine [Liste](https://www.fedlex.admin.ch/eli/cc/2022/568/de#annex_1) des Eidgenössischen Datenschutz- und Öffentlichkeitsbeauftragten (oder künftig des Bundesrates) fest.\r\n \r\nBeim Datentransfer ins Ausland muss unterschieden werden zwischen der Übergabe von Personendaten vom verantwortlichen Organ an eine Auftragsdatenbearbeiterin (§ 7 IDG) einerseits und der Datenbekanntgabe in die eigene Verantwortung der Empfängerin andererseits. § 23 IDG gilt für den zweiten Fall, also bei der Bekanntgabe von Personendaten an eine Empfängerin, die sie dann zu einem eigenen Zweck und in eigener Verantwortung bearbeiten darf. \r\nDer erste Fall, die Auftragsbearbeitung, stellt keine Bekanntgabe im Sinne des IDG dar und damit gilt grundsätzlich auch § 23 IDG nicht. Denn die Auftragsdatenbearbeiterin darf die Daten zu dem Zweck bearbeiten, der vom auftraggebenden öffentlichen Organ vorgegeben ist – und dieses öffentliche Organ bleibt gegenüber den betroffenen Personen verantwortlich, auch für das, was die Auftragsdatenbearbeiterin tut und tun sollte, aber nicht tut. Damit werden die betroffenen Personen nicht schlechter gestellt, als wenn die Auftragsdatenbearbeitung in der Schweiz stattfinden würde. Bei der Übergabe der Daten an eine Auftragsdatenbearbeiterin im Ausland werden die Daten also zwar in einem anderen Land mit allenfalls weniger strenger Gesetzgebung bearbeitet, aber grundsätzlich dennoch nur nach dem Datenschutzniveau, welches auch für die Datenbearbeitung durch das bekanntgebende öffentliche Organ gilt. Auch wenn § 23 IDG auf die Übermittlung an eine Auftragsdatenbearbeiterin im Ausland nicht direkt anwendbar ist, müssen die Risiken der Datenübermittlung ins Ausland. beurteilt werden. Dazu sind die Risikoabwägungen analog zu den Kriterien von § 23 IDG hilfreich und können mit entsprechenden Schutzmassnahmen, zum Beispiel mit einer Verschlüsselung der Daten, vermieden oder auf ein tragbares Mass verringert werden.\r\n\r\n<br>\r\n##Bekanntgabe von Personendaten in die USA\r\nFür die Bekanntgabe von Personendaten in die USA bestanden in der Vergangenheit zwei Abkommen zwischen der EU-Kommission und den USA bzw. der Schweiz und den USA: das sogenannte «Safe Harbor»-Abkommen und das «Privacy Shield»-Framework. Der Europäische Gerichtshof (EuGH) hat allerdings bezüglich beider Abkommen festgestellt, dass sie trotz aller Bemühungen kein angemessenes Datenschutzniveau aus Sicht der EU schaffen. Die EuGH-Urteile binden die Schweiz zwar nicht, aber die Schweiz hat übereinstimmende Abkommen mit den USA abgeschlossen und muss wiederum auch gegenüber der EU auch ein angemessenes Datenschutzniveau aufweisen. Deshalb haben diese Urteile («Schrems-I und II») faktisch durchaus Auswirkungen auf die Zulässigkeit des Datentransfers von der Schweiz in die USA. Hier wird zu beobachten sein, wie sich Rechtssetzung und Rechtsprechung in Zukunft weiterentwickeln.', 'If data from Switzerland are being disclosed to other countries, there are a few special provisions to take into account.\r\n{.lead}\r\n\r\nData processing in Switzerland and most European countries is subject to clear, and by global standards strict, data protection regulations. If personal data from Switzerland are being disclosed to countries which do not have a corresponding level of data protection, this raises the risk that these data could be used in a manner not permitted under the Swiss or European data protection laws. There is thus a risk that the data subjects’ fundamental rights could be violated.\r\n \r\nFor this reason, § 23 of the Information and Data Protection Act (IDG) stipulates that personal data may only be disclosed to those countries which have signed up to the Council of Europe Convention 108, soon to be 108+; in other words, countries which thus guarantee a level of protection for the fundamental rights of the data subjects comparable to that of Swiss data protection legislation. Personal data may only be disclosed to other countries if their legislation likewise assures an adequate level of protection or if appropriate protection is guaranteed through contractual agreements between the public body providing the data and the recipients. The states which guarantee an adequate level of protection through legislation are named in a [list] (https://www.fedlex.admin.ch/eli/cc/2022/568/en#annex_1) compiled by the Federal Data Protection and Information Commissioner (or in future the Federal Council).\r\n \r\nWhen transferring data abroad, a distinction needs to be made between a handover of personal data from the responsible body to a contracted data processor (§ 7 IDG) on the one hand, and disclosures of data to a recipient to process on its own authority on the other. § 23 IDG applies in the second case; that is, disclosure of personal data to a recipient which they are then allowed to process for a purpose of their own and under their own responsibility.\r\nThe first case, contracted data processing, does not constitute a disclosure for the purposes of the IDG and thus, in principle, § 23 IDG does not apply. This is because the contracted data processor is permitted to process the data for the purpose specified by the contracting public body – and this body remains accountable to the data subjects, including for what the contracted data processor does, and what it should do but does not. That means the data subjects are no worse off than they would be if the data were being processed in Switzerland. In cases where data are handed over to a contracted data processor in another country, although this means that the data are processed in a country which may have less strict legislation, they are nevertheless still being processed only in accordance with the level of data protection applying to data processing by the disclosing public body. Even if § 23 IDG is not directly applicable to transfers to a contracted data processor abroad, the risks of transferring data abroad need to be assessed. Risk assessments in line with the criteria of § 23 IDG are helpful in this regard and with appropriate protective measures, for example data encryption, risks can be avoided or reduced to an acceptable level.\r\n\r\n<br>\r\n\r\n##Disclosure of personal data to the USA\r\nFor disclosure of personal data to the USA, previously there were two agreements in place between the EU Commission and the USA, and Switzerland and the USA respectively: the so-called “Safe Harbor” agreement and the “Privacy Shield” framework. However, the Court of Justice of the European Union (CJEU) has ascertained that, despite all efforts, neither of the two agreements create an appropriate level of data protection from the perspective of the EU. Although the CJEU judgements are not binding on Switzerland, it has made congruent agreements with the USA and, in turn, needs to demonstrate to the EU that it has an appropriate level of data protection. As a result, in practice these judgements (“Schrems-I and II”) absolutely do have an impact on the permissibility of data transfers from Switzerland to the USA. In this regard, future developments in regulation and case law will need to be kept under review.', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TT', '', 10, 'published', False, None, None, None, None, 173), (1527, datetime.datetime(2023, 8, 2, 8, 1, 18, 302146, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 760722, tzinfo=datetime.timezone.utc), datetime.datetime(2024, 2, 28, 14, 23, 20, 708457, tzinfo=datetime.timezone.utc), False, 'Thank you', 'Danke', 'Thank you', None, '', None, None, None, 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', 'In diesem Video fassen Danielle Kaufmann und Beat Rudin das dritte Kapitel des offenen Kurses «Datenschutz» zusammen.', 'In this video, Danielle Kaufmann and Beat Rudin summarize the third chapter of the open course "Data Protection".', None, '', 'thank-you-2', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Glückwunsch, Sie haben das dritte Kapitel über Datenschutz abgeschlossen! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', 'Congratulations, you have completed the third chapter on data protection! \r\n{.lead}\r\n\r\n<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/853281011?h=499f8283c8&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="3-9_Danke"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>', '', '', '', '', '', None, None, None, None, '', '', '', '', 'TV', '', 11, 'published', False, None, None, None, None, 173)]])}, None) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1064)
  output = self.filter_expression.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_step_number(118)
  step_list = list(self.chapter.published_steps.all().order_by("order"))

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(71)
  cache.set_many(to_be_set, cachalot_settings.CACHALOT_TIMEOUT)

0,3280 get ('waffle:4.1.0e9e267545e7f919d987e2d016e67ed7e',) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/waffle/templatetags/waffle_tags.py in render(36)
  if self.condition(context.get('request', None), name):

/usr/local/lib/python3.11/site-packages/waffle/__init__.py in flag_is_active(19)
  flag = get_waffle_flag_model().get(flag_name)

/usr/local/lib/python3.11/site-packages/waffle/models.py in get(52)
  cached = cache.get(cache_key)

0,2552 get_many (['138549f5508bbba7283d6a0625e51c589d845e8f', '4f1f0b4dfbd30463b5587753e6f3e6ca21ddbf60', '5eecd0f38fa292f31831dc42904a506fba490351'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(320)
  if match:

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2845 get_many (['76e323efd8711853e13c9f7cf976845908364eb2', '0106b0991d9f2003fccdfac98cc569a89586246b'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(314)
  match = condition.eval(context)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in eval(60)
  return func(context, self.first, self.second)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in <lambda>(103)
  "is not": infix(10, lambda context, x, y: x.eval(context) is not y.eval(context)),

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in eval(877)
  return self.value.resolve(context, ignore_failures=True)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_absolute_url(96)
  str(self.chapter.course.slug),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2885 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', 'fd55796fe444e75da9618786e4ad78ad4284dde8'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(314)
  match = condition.eval(context)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in eval(60)
  return func(context, self.first, self.second)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in <lambda>(103)
  "is not": infix(10, lambda context, x, y: x.eval(context) is not y.eval(context)),

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in eval(877)
  return self.value.resolve(context, ignore_failures=True)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_absolute_url(96)
  str(self.chapter.course.slug),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2398 get_many (['76e323efd8711853e13c9f7cf976845908364eb2', '0106b0991d9f2003fccdfac98cc569a89586246b'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(314)
  match = condition.eval(context)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in eval(60)
  return func(context, self.first, self.second)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in <lambda>(103)
  "is not": infix(10, lambda context, x, y: x.eval(context) is not y.eval(context)),

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in eval(877)
  return self.value.resolve(context, ignore_failures=True)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_absolute_url(96)
  str(self.chapter.course.slug),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2520 get_many (['e3a5db5a670ad803efb866441f33de58309be2e2', 'fd55796fe444e75da9618786e4ad78ad4284dde8'],) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(541)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in render(314)
  match = condition.eval(context)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in eval(60)
  return func(context, self.first, self.second)

/usr/local/lib/python3.11/site-packages/django/template/smartif.py in <lambda>(103)
  "is not": infix(10, lambda context, x, y: x.eval(context) is not y.eval(context)),

/usr/local/lib/python3.11/site-packages/django/template/defaulttags.py in eval(877)
  return self.value.resolve(context, ignore_failures=True)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(715)
  obj = self.var.resolve(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in resolve(847)
  value = self._resolve_lookup(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in _resolve_lookup(914)
  current = current()

/app/project/lms_tales/models.py in get_absolute_url(96)
  str(self.chapter.course.slug),

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(37)
  return original(compiler, *args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in inner(96)
  return _get_result_or_execute_query(

/usr/local/lib/python3.11/site-packages/cachalot/monkey_patch.py in _get_result_or_execute_query(46)
  data = cache.get_many(table_cache_keys + [cache_key])

0,2547 get ('waffle:4.1.0e9e267545e7f919d987e2d016e67ed7e',) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_patched_render(41)
  return old_render(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in render(114)
  self.content = self.rendered_content

/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py in runner(1788)
  return sentry_patched_function(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/templates.py in rendered_content(77)
  return real_rendered_content.fget(self)

/usr/local/lib/python3.11/site-packages/django/template/response.py in rendered_content(92)
  return template.render(context, self._request)

/usr/local/lib/python3.11/site-packages/django/template/backends/django.py in render(61)
  return self.template.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(175)
  return self._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(157)
  return compiled_parent._render(context)

/usr/local/lib/python3.11/site-packages/django/test/utils.py in instrumented_test_render(112)
  return self.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/django/template/loader_tags.py in render(63)
  result = block.nodelist.render(context)

/usr/local/lib/python3.11/site-packages/django/template/base.py in render(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in <listcomp>(1005)
  return SafeString("".join([node.render_annotated(context) for node in self]))

/usr/local/lib/python3.11/site-packages/django/template/base.py in render_annotated(966)
  return self.render(context)

/usr/local/lib/python3.11/site-packages/waffle/templatetags/waffle_tags.py in render(36)
  if self.condition(context.get('request', None), name):

/usr/local/lib/python3.11/site-packages/waffle/__init__.py in flag_is_active(19)
  flag = get_waffle_flag_model().get(flag_name)

/usr/local/lib/python3.11/site-packages/waffle/models.py in get(52)
  cached = cache.get(cache_key)

1,2716 set ('view_cache_view_/de/data-protection-29/bekanntgabe-von-personendaten-173/cross-border-disclosure-of-personal-data-1526_anonymous', <TemplateResponse status_code=200, "text/html; charset=utf-8">, 600) {} <django_redis.cache.RedisCache object at 0x7910e287a4d0>
/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in run(101)
  return _run_old_run_func()

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py in _run_old_run_func(94)
  return old_run_func(self, *a, **kw)

/usr/local/lib/python3.11/concurrent/futures/thread.py in _worker(83)
  work_item.run()

/usr/local/lib/python3.11/concurrent/futures/thread.py in run(58)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/corsheaders/middleware.py in __call__(56)
  result = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in middleware(32)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/allauth/account/middleware.py in middleware(36)
  response = get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/simple_history/middleware.py in middleware(41)
  return get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/django_htmx/middleware.py in __call__(43)
  return self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/app/project/lms_tales/middleware.py in __call__(168)
  response = self.get_response(request)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py in __call__(177)
  return f(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/cachalot/panels.py in process_request(41)
  return super(CachalotPanel, self).process_request(request)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in __call__(244)
  current_executor.run_until_future(call_result)

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run_until_future(81)
  work_item.run()

/usr/local/lib/python3.11/site-packages/asgiref/current_thread_executor.py in run(40)
  result = self.fn(*self.args, **self.kwargs)

/usr/local/lib/python3.11/site-packages/asgiref/sync.py in thread_handler(522)
  return func(*args, **kwargs)

/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/views.py in sentry_wrapped_callback(90)
  return callback(request, *args, **kwargs)

/app/project/utils/decorators.py in apply_cache(72)
  cache.set(CACHE_KEY, response.render(), ttl)

Cachalot

Database 'default'

Application Model Last invalidation
django_q Failure 8 Stunden, 36 Minuten
notifications Notification 8 Stunden, 36 Minuten
django_q Schedule 8 Stunden, 36 Minuten
reporting Report 11 Stunden
lms_tales CourseMetrics 18 Stunden, 7 Minuten
search FulltextSearchModel 20 Stunden, 6 Minuten
search TrigramSearchModel 1 Tag, 5 Stunden
lms_tales HistoricalTalesCourse 1 Tag, 5 Stunden
lms_tales TalesCourse 1 Tag, 5 Stunden
lms_tales TalesStep 1 Tag, 5 Stunden
lms_tales TalesChapter 1 Tag, 5 Stunden
lms_tales HistoricalTalesStep 1 Tag, 5 Stunden
lms_tales HistoricalTalesChapter 1 Tag, 5 Stunden
lms_roles CourseRole 1 Tag, 5 Stunden
auth Permission 1 Tag, 6 Stunden
contenttypes ContentType 1 Tag, 6 Stunden
startpage SliderItem 1 Tag, 6 Stunden
startpage CategoryCourse 1 Tag, 6 Stunden
tags Category 1 Tag, 6 Stunden
tags Tag 1 Tag, 6 Stunden
lms_static_texts StaticText 1 Tag, 6 Stunden
lms_static_texts HistoricalStaticText 1 Tag, 6 Stunden
lms_comments Comment 1 Tag, 6 Stunden
lms_comments Reply 1 Tag, 6 Stunden
lms_comments Reaction 1 Tag, 6 Stunden
lms_comments Flag 1 Tag, 6 Stunden
lms_tales TalesStepFileNew 1 Tag, 6 Stunden
lms_tales TalesStepFile 1 Tag, 6 Stunden
lms_tales TalesCourseFile 1 Tag, 6 Stunden
lms_tales TalesAuthor 1 Tag, 6 Stunden
lms_tales TalesPartner 1 Tag, 6 Stunden
lms_tales TalesGlossaryItem 1 Tag, 6 Stunden
lms_tales TalesPath 1 Tag, 6 Stunden
lms_tales TalesPathStep 1 Tag, 6 Stunden
lms_tales TalesCourseRun 1 Tag, 6 Stunden
lms_tales TalesCourseRunStep 1 Tag, 6 Stunden
lms_tales ScheduledMessage 1 Tag, 6 Stunden
lms_tales HistoricalTalesStepFile 1 Tag, 6 Stunden
lms_tales HistoricalTalesPath 1 Tag, 6 Stunden
lms_base GlossaryMixin 1 Tag, 6 Stunden
lms_base GlossaryItemMixin 1 Tag, 6 Stunden
users User 1 Tag, 6 Stunden
users UserSettings 1 Tag, 6 Stunden
auth Group 1 Tag, 6 Stunden
sessions Session 1 Tag, 6 Stunden
sites Site 1 Tag, 6 Stunden
flatpages FlatPage 1 Tag, 6 Stunden
admin LogEntry 1 Tag, 6 Stunden
redirects Redirect 1 Tag, 6 Stunden
account EmailAddress 1 Tag, 6 Stunden
account EmailConfirmation 1 Tag, 6 Stunden
socialaccount SocialApp 1 Tag, 6 Stunden
socialaccount SocialAccount 1 Tag, 6 Stunden
socialaccount SocialToken 1 Tag, 6 Stunden
waffle Flag 1 Tag, 6 Stunden
waffle Switch 1 Tag, 6 Stunden
waffle Sample 1 Tag, 6 Stunden
tos TermsOfService 1 Tag, 6 Stunden
tos UserAgreement 1 Tag, 6 Stunden
impersonate ImpersonationLog 1 Tag, 6 Stunden
django_q OrmQ 1 Tag, 6 Stunden

Signale

Signal Empfänger
class_prepared StatusField.prepare_class, add_status_query_managers, add_timeframed_query_manager, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class, StatusField.prepare_class
connection_created
got_request_exception _got_request_exception
m2m_changed flag_membership_changed, flag_membership_changed
post_delete HistoricalRecords.post_delete, HistoricalRecords.post_delete, HistoricalRecords.post_delete, HistoricalRecords.post_delete, HistoricalRecords.post_delete, HistoricalRecords.post_delete, delete_search_index, delete_search_index
post_init ModelSignalRouter.post_init_receiver, MonitorField._save_initial, MonitorField._save_initial, MonitorField._save_initial, MonitorField._save_initial, ImageField.update_dimension_fields, MonitorField._save_initial, ImageField.update_dimension_fields, MonitorField._save_initial, MonitorField._save_initial, ImageField.update_dimension_fields, ImageField.update_dimension_fields, ImageField.update_dimension_fields, MonitorField._save_initial, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, delete_mt_init, MonitorField._save_initial, MonitorField._save_initial, MonitorField._save_initial, delete_mt_init, delete_mt_init, delete_mt_init
post_migrate create_permissions, create_contenttypes, create_default_site, _invalidate_on_migration
post_save ModelSignalRouter.post_save_receiver, HistoricalRecords.post_save, HistoricalRecords.post_save, HistoricalRecords.post_save, HistoricalRecords.post_save, HistoricalRecords.post_save, HistoricalRecords.post_save, call_hook, create_user_settings, save_user_settings, update_search_index, update_search_index
pre_delete clear_site_cache
pre_init
pre_migrate inject_rename_contenttypes_operations
pre_save clear_site_cache
request_finished close_old_connections, close_caches, reset_urlconf
request_started reset_queries, close_old_connections
setting_changed reset_cache, reload_settings, clear_cache_handlers, update_installed_apps, update_connections_time_zone, clear_routers_cache, reset_template_engines, storages_changed, clear_serializers_cache, language_changed, localize_settings_changed, file_storage_changed, complex_setting_changed, root_urlconf_changed, static_storage_changed, static_finders_changed, auth_password_validators_changed, user_model_swapped, update_toolbar_config, reset_hashers, update_level_tags, clear_caches, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, StaticFilesStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties