Source code for pykechain.models.user

import datetime

import pytz
import requests

from ..enums import LanguageCodes
from ..exceptions import APIError
from .base import Base


[docs] class User(Base): """A virtual object representing a KE-chain user. :ivar username: username of the user :type username: str :ivar name: username of the user (compatibility) :type name: str :ivar id: userid of the user :type id: int :ivar timezone: timezone of the User (defaults to <UTC>) :type timezone: timezone object :ivar language: language of the User (defaults to 'en') :type language: str :ivar email: email of the User (defaults to '') :type email: str """ def __init__(self, json, **kwargs): """Construct a user from provided json data.""" super().__init__(json, **kwargs) self.username = self._json_data.get("username", "") self.id = self._json_data.get("pk", "") def __repr__(self): # pragma: no cover return f"<pyke {self.__class__.__name__} '{self.username}' id {self.id}>" @property def default_name(self) -> str: """ Get default name, prioritizing the user name over the KE-chain name. :return: Name :rtype str """ return self.username if self.username else self.name @property def timezone(self) -> pytz.BaseTzInfo: """ Timezone of the user. Defaults to timezone UTC. With return a pytz timezone eg. 'Europe/Amsterdam' :return: timezone object (compatible with datetime) :rtype: TzInfo """ return pytz.timezone(zone=self._json_data.get("timezone", "UTC")) @property def language(self) -> str: """ Language code of the user. Defaults to English ('en") when no language code is configured. :return: language code string :rtype: basestring """ return self._json_data.get("language_code", LanguageCodes.ENGLISH) @property def email(self) -> str: """ Email of the user. :return: email address, default is empty string. :rtype: basestring """ return self._json_data.get("email", "")
[docs] def reset_password(self) -> None: """Send a request password link to the email of the user. curl 'https://pim3-test.ke-chain.com/accounts/password/reset/' \ --data-raw '{"email":"hostmaster+newuser@ke-works.com"}' \ """ payload = {"email": self.email} response = self._client._request( "POST", url=self._client._build_url("user_reset_password"), json=payload ) if response.status_code != requests.codes.ok: # pragma: no cover raise APIError( f"Could not request a reset password link for '{self}'", response=response, )
[docs] def now_in_my_timezone(self) -> datetime.datetime: """ Get current time in the timezone of the User. Defaults to timezone GMT+1 (Europe/Amsterdam). :return: Current datetime :rtype datetime.datetime """ timezone_definition = self._json_data["timezone"] if timezone_definition: timezone = pytz.timezone(timezone_definition) else: # if there is no timezone set then the Europe/Amsterdam timezone timezone = pytz.timezone("Europe/Amsterdam") # Default is utc timezone utc_time = datetime.datetime.now(tz=pytz.utc) # Convert to local timezone local_time = utc_time.astimezone(timezone) return local_time