class WorkspaceUser(WorkspacedEntity): """ Workspace User entity. This entity represents assignment of specific User into Workspace. It additionally configures access rights and several other things. """ _can_get_detail = False _can_create = False email = fields.EmailField(write=False) """ Email of the user. """ active = fields.BooleanField() """ If user is active in Workspace. """ admin = fields.BooleanField(admin_only=True) """ Weather user has admin privilege in the Workspace. """ user = fields.MappingField(User, 'uid', write=False) """ User's instance """ def __str__(self): return '{} (#{})'.format(self.email, self.id)
class User(WorkspacedEntity): """ User entity. """ _can_create = False _can_update = False _can_delete = False _can_get_detail = False api_token = fields.StringField() """ API token to use for API calls. (Returned only for User.objects.current_user() call.) """ send_timer_notifications = fields.BooleanField() default_workspace = fields.MappingField(Workspace, 'default_wid') # type: Workspace """ Default workspace for calls that does not specify Workspace. (Returned only for User.objects.current_user() call.) """ email = fields.EmailField() """ Email address of user. """ fullname = fields.StringField() """ Full name of the user. """ beginning_of_week = fields.ChoiceField({ '0': 'Sunday', '1': 'Monday', '2': 'Tuesday', '3': 'Wednesday', '4': 'Thursday', '5': 'Friday', '6': 'Saturday' }) """ Defines which day is the first day of week for the user. """ language = fields.StringField() """ Stores language used for the user. """ image_url = fields.StringField() """ URL of the profile image of the user. """ timezone = fields.StringField() """ Timezone which is used to convert the times into. May differ from one used in this tool, see toggl.utils.Config(). """ # TODO: Add possibility to use this value in Config.time_format timeofday_format = fields.ChoiceField({ 'H:mm': '24-hour', 'h:mm A': '12-hour' }) """ Format of time used to display time. """ # TODO: Add possibility to use this value in Config.datetime_format date_format = fields.ChoiceField([ "YYYY-MM-DD", "DD.MM.YYYY", "DD-MM-YYYY", "MM/DD/YYYY", "DD/MM/YYYY", "MM-DD-YYYY" ]) """ Format of date used to display dates. """ objects = UserSet() @classmethod def signup( cls, email, password, timezone=None, created_with='TogglCLI', config=None): # type: (str, str, str, str, utils.Config) -> User """ Creates brand new user. After creation confirmation email is sent to him. :param email: Valid email of the new user. :param password: Password of the new user. :param timezone: Timezone to be associated with the user. If empty, than timezone from config is used. :param created_with: Name of application that created the user. :param config: :return: """ if config is None: config = utils.Config.factory() if timezone is None: timezone = config.timezone if not validate_email(email): raise exceptions.TogglValidationException( 'Supplied email \'{}\' is not valid email!'.format(email)) user_json = json.dumps({ 'user': { 'email': email, 'password': password, 'timezone': timezone, 'created_with': created_with } }) data = utils.toggl("/signups", "post", user_json, config=config) return cls.deserialize(config=config, **data['data']) def is_admin(self, workspace): wid = workspace.id if isinstance(workspace, Workspace) else workspace workspace_user = WorkspaceUser.objects.get(wid=wid, uid=self.id) return workspace_user.admin def __str__(self): return '{} (#{})'.format(self.fullname, self.id)