コード例 #1
0
ファイル: integrity.py プロジェクト: qyqx/tracim
 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)
コード例 #2
0
ファイル: integrity.py プロジェクト: buxx/tracim
 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)
コード例 #3
0
    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))
コード例 #4
0
ファイル: integrity.py プロジェクト: qyqx/tracim
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,
        )
コード例 #5
0
ファイル: integrity.py プロジェクト: buxx/tracim
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,
        )