def __init__(self, is_case_sensitive: bool = False): """ :param is_case_sensitive: If True, consider name with different case as different. """ self._is_case_sensitive = is_case_sensitive self._workspace_api = UnsafeWorkspaceApi(None) self._content_api = ContentApi(None)
def __init__(self, is_case_sensitive: bool=False): """ :param is_case_sensitive: If True, consider name with different case as different. """ self._is_case_sensitive = is_case_sensitive self._workspace_api = UnsafeWorkspaceApi(None) self._content_api = ContentApi(None)
def get_calendar(self, type: str, id: str, path: str) -> Calendar: """ Return tracim.model.organisational.Calendar instance for given parameters. :param type: Type of calendar, can be one of CALENDAR_TYPE_USER, CALENDAR_TYPE_WORKSPACE :param id: related calendar object id :param path: path representation like user/42--foo.ics :return: a calendar. """ if type == CALENDAR_TYPE_USER: user = UserApi(self._user).get_one_by_id(id) return UserCalendar(user, path=path) if type == CALENDAR_TYPE_WORKSPACE: workspace = UnsafeWorkspaceApi(self._user).get_one(id) return WorkspaceCalendar(workspace, path=path) raise UnknownCalendarType('Type "{0}" is not implemented'.format(type))
class PathValidationManager(object): def __init__(self, is_case_sensitive: bool = False): """ :param is_case_sensitive: If True, consider name with different case as different. """ self._is_case_sensitive = is_case_sensitive self._workspace_api = UnsafeWorkspaceApi(None) self._content_api = ContentApi(None) def workspace_label_is_free(self, workspace_name: str) -> bool: """ :param workspace_name: Workspace name :return: True if workspace is available """ query = self._workspace_api.get_base_query() label_filter = Workspace.label == workspace_name if not self._is_case_sensitive: label_filter = func.lower(Workspace.label) == \ func.lower(workspace_name) return not bool(query.filter(label_filter).count()) def content_label_is_free( self, content_label_as_file, workspace: Workspace, parent: Content = None, exclude_content_id: int = None, ) -> bool: """ :param content_label_as_file: :param workspace: :param parent: :return: True if content label is available """ query = self._content_api.get_base_query(workspace) if parent: query = query.filter(Content.parent_id == parent.content_id) if exclude_content_id: query = query.filter(Content.content_id != exclude_content_id) query = query.filter(Content.workspace_id == workspace.workspace_id) return not \ bool( self._content_api.filter_query_for_content_label_as_path( query=query, content_label_as_file=content_label_as_file, is_case_sensitive=self._is_case_sensitive, ).count() ) def validate_new_content(self, content: Content) -> bool: """ :param content: Content with label to test :return: True if content label is not in conflict with existing resource """ return self.content_label_is_free( content_label_as_file=content.get_label_as_file(), workspace=content.workspace, parent=content.parent, exclude_content_id=content.content_id, )
class PathValidationManager(object): def __init__(self, is_case_sensitive: bool=False): """ :param is_case_sensitive: If True, consider name with different case as different. """ self._is_case_sensitive = is_case_sensitive self._workspace_api = UnsafeWorkspaceApi(None) self._content_api = ContentApi(None) def workspace_label_is_free(self, workspace_name: str) -> bool: """ :param workspace_name: Workspace name :return: True if workspace is available """ query = self._workspace_api.get_base_query() label_filter = Workspace.label == workspace_name if not self._is_case_sensitive: label_filter = func.lower(Workspace.label) == \ func.lower(workspace_name) return not bool(query.filter(label_filter).count()) def content_label_is_free( self, content_label_as_file, workspace: Workspace, parent: Content=None, exclude_content_id: int=None, ) -> bool: """ :param content_label_as_file: :param workspace: :param parent: :return: True if content label is available """ query = self._content_api.get_base_query(workspace) if parent: query = query.filter(Content.parent_id == parent.content_id) if exclude_content_id: query = query.filter(Content.content_id != exclude_content_id) query = query.filter(Content.workspace_id == workspace.workspace_id) return not \ bool( self._content_api.filter_query_for_content_label_as_path( query=query, content_label_as_file=content_label_as_file, is_case_sensitive=self._is_case_sensitive, ).count() ) def validate_new_content(self, content: Content) -> bool: """ :param content: Content with label to test :return: True if content label is not in conflict with existing resource """ return self.content_label_is_free( content_label_as_file=content.get_label_as_file(), workspace=content.workspace, parent=content.parent, exclude_content_id=content.content_id, )