69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
import pytz
|
|
from django.conf import settings
|
|
from django.contrib.auth import get_user_model
|
|
from django.db import models
|
|
from django.utils.functional import cached_property
|
|
from django_extensions.db.models import TimeStampedModel
|
|
from encrypted_field import EncryptedField
|
|
from profiles.constants import PRETTY_TIMEZONE_CHOICES
|
|
|
|
User = get_user_model()
|
|
BNULL = {"blank": True, "null": True}
|
|
|
|
|
|
class UserProfile(TimeStampedModel):
|
|
user = models.OneToOneField(
|
|
User, on_delete=models.CASCADE, related_name="profile"
|
|
)
|
|
timezone = models.CharField(
|
|
max_length=255, choices=PRETTY_TIMEZONE_CHOICES, default="UTC"
|
|
)
|
|
lastfm_username = models.CharField(max_length=255, **BNULL)
|
|
lastfm_password = EncryptedField(**BNULL)
|
|
lastfm_auto_import = models.BooleanField(default=False)
|
|
|
|
retroarch_path = models.CharField(max_length=255, **BNULL)
|
|
retroarch_auto_import = models.BooleanField(default=False)
|
|
|
|
archivebox_username = models.CharField(max_length=255, **BNULL)
|
|
archivebox_password = EncryptedField(**BNULL)
|
|
archivebox_url = models.CharField(max_length=255, **BNULL)
|
|
|
|
task_context_tags_str = models.CharField(max_length=255, **BNULL)
|
|
|
|
bgg_username = models.CharField(max_length=255, **BNULL)
|
|
lichess_username = models.CharField(max_length=255, **BNULL)
|
|
|
|
todoist_auth_key = EncryptedField(**BNULL)
|
|
todoist_state = EncryptedField(**BNULL)
|
|
todoist_user_id = models.CharField(max_length=100, **BNULL)
|
|
|
|
webdav_url = models.CharField(max_length=255, **BNULL)
|
|
webdav_user = models.CharField(max_length=255, **BNULL)
|
|
webdav_pass = EncryptedField(**BNULL)
|
|
webdav_auto_import = models.BooleanField(default=False)
|
|
|
|
ntfy_url = models.CharField(max_length=255, **BNULL)
|
|
ntfy_enabled = models.BooleanField(default=False)
|
|
|
|
redirect_to_webpage = models.BooleanField(default=True)
|
|
|
|
def __str__(self):
|
|
return f"User profile for {self.user}"
|
|
|
|
@property
|
|
def tzinfo(self):
|
|
return pytz.timezone(self.timezone)
|
|
|
|
@cached_property
|
|
def task_context_tags(self) -> list:
|
|
tag_list = [
|
|
t.strip().capitalize()
|
|
for t in self.task_context_tags_str.split(",")
|
|
]
|
|
|
|
if not tag_list:
|
|
tag_list = settings.DEFAULT_TASK_CONTEXT_TAG_LIST
|
|
|
|
return tag_list
|