Example #1
0
    async def validate_v1_path(self, path, **kwargs):
        if not getattr(self, '_repo', None):
            self._repo = await self._fetch_repo()
            self.default_branch = self._repo['default_branch']

        branch_ref = kwargs.get('ref') or kwargs.get(
            'branch') or self.default_branch
        if isinstance(branch_ref, list):
            raise exceptions.InvalidParameters(
                'Only one ref or branch may be given.')

        if path == '/':
            return GitHubPath(path, _ids=[(branch_ref, '')])

        branch_data = await self._fetch_branch(branch_ref)

        # throws Not Found if path not in tree
        await self._search_tree_for_path(
            path, branch_data['commit']['commit']['tree']['sha'])

        path = GitHubPath(path)
        for part in path.parts:
            part._id = (branch_ref, None)

        # TODO Validate that filesha is a valid sha
        path.parts[-1]._id = (branch_ref, kwargs.get('fileSha'))

        return path
    def test_child_gets_branch(self):
        parent = GitHubPath('/', _ids=[('master', None)], folder=True)

        child_file = parent.child('childfile', folder=False)
        assert child_file.identifier[0] == 'master'

        child_folder = parent.child('childfolder', folder=True)
        assert child_folder.identifier[0] == 'master'
Example #3
0
    def test_child_given_explicit_branch(self):
        gh_parent = GitHubPath('/foo/',
                               _ids=[('master', None),
                                     ('master', 'abcea54as123')])
        gh_child = gh_parent.child('foo', _id=('develop', '413006763'))

        assert gh_child.branch_ref == 'develop'
        assert gh_child.file_sha == '413006763'
Example #4
0
    def test_child_inherits_branch(self):
        gh_parent = GitHubPath('/foo/',
                               _ids=[('master', None),
                                     ('master', 'abcea54as123')])
        gh_child = gh_parent.child('foo')

        assert gh_child.branch_ref == 'master'
        assert gh_child.file_sha is None
Example #5
0
    async def validate_path(self, path, **kwargs):
        if not getattr(self, '_repo', None):
            self._repo = await self._fetch_repo()
            self.default_branch = self._repo['default_branch']

        path = GitHubPath(path)
        branch_ref, ref_from = None, None
        if kwargs.get('ref'):
            branch_ref = kwargs.get('ref')
            ref_from = 'query_ref'
        elif kwargs.get('branch'):
            branch_ref = kwargs.get('branch')
            ref_from = 'query_branch'
        else:
            branch_ref = self.default_branch
            ref_from = 'default_branch'
        if isinstance(branch_ref, list):
            raise exceptions.InvalidParameters('Only one ref or branch may be given.')
        self.metrics.add('branch_ref_from', ref_from)

        for part in path.parts:
            part._id = (branch_ref, None)

        # TODO Validate that filesha is a valid sha
        path.parts[-1]._id = (branch_ref, kwargs.get('fileSha'))
        self.metrics.add('file_sha_given', True if kwargs.get('fileSha') else False)

        return path
Example #6
0
    def test_id_accessors(self):
        gh_path = GitHubPath('/foo',
                             _ids=[('master', None),
                                   ('master', 'abcea54as123')])

        assert gh_path.branch_ref == 'master'
        assert gh_path.file_sha == 'abcea54as123'
Example #7
0
    async def create_folder(self, path, branch=None, message=None, **kwargs):
        GitHubPath.validate_folder(path)

        assert self.name is not None
        assert self.email is not None
        message = message or settings.UPLOAD_FILE_MESSAGE

        keep_path = path.child('.gitkeep')

        data = {
            'content': '',
            'path': keep_path.path,
            'committer': self.committer,
            'branch': path.branch_ref,
            'message': message or settings.UPLOAD_FILE_MESSAGE
        }

        resp = await self.make_request('PUT',
                                       self.build_repo_url(
                                           'contents', keep_path.path),
                                       data=json.dumps(data),
                                       expects=(201, 422, 409),
                                       throws=exceptions.CreateFolderError)

        data = await resp.json()

        if resp.status in (422, 409):
            if resp.status == 409 or data.get(
                    'message'
            ) == 'Invalid request.\n\n"sha" wasn\'t supplied.':
                raise exceptions.FolderNamingConflict(str(path))
            raise exceptions.CreateFolderError(data, code=resp.status)

        data['content']['name'] = path.name
        data['content']['path'] = data['content']['path'].replace(
            '.gitkeep', '')

        return GitHubFolderContentMetadata(data['content'],
                                           commit=data['commit'],
                                           ref=path.branch_ref)
    async def create_folder(self, path, branch=None, message=None, **kwargs):
        GitHubPath.validate_folder(path)

        assert self.name is not None
        assert self.email is not None
        message = message or pd_settings.UPLOAD_FILE_MESSAGE

        keep_path = path.child('.gitkeep')

        data = {
            'content': '',
            'path': keep_path.path,
            'committer': self.committer,
            'branch': path.branch_ref,
            'message': message or pd_settings.UPLOAD_FILE_MESSAGE
        }

        resp = await self.make_request(
            'PUT',
            self.build_repo_url('contents', keep_path.path),
            data=json.dumps(data),
            expects=(201, 422, 409),
            throws=exceptions.CreateFolderError
        )

        data = await resp.json()

        if resp.status in (422, 409):
            if resp.status == 409 or data.get('message') == 'Invalid request.\n\n"sha" wasn\'t supplied.':
                raise exceptions.FolderNamingConflict(path.name)
            raise exceptions.CreateFolderError(data, code=resp.status)

        data['content']['name'] = path.name
        data['content']['path'] = data['content']['path'].replace('.gitkeep', '')

        return GitHubFolderContentMetadata(data['content'], commit=data['commit'], ref=path.branch_ref)
Example #9
0
    async def create_folder(self, path, branch=None, message=None, **kwargs):
        GitHubPath.validate_folder(path)

        assert self.name is not None
        assert self.email is not None
        message = message or settings.UPLOAD_FILE_MESSAGE

        keep_path = path.child(".gitkeep")

        data = {
            "content": "",
            "path": keep_path.path,
            "committer": self.committer,
            "branch": path.branch_ref,
            "message": message or settings.UPLOAD_FILE_MESSAGE,
        }

        resp = await self.make_request(
            "PUT",
            self.build_repo_url("contents", keep_path.path),
            data=json.dumps(data),
            expects=(201, 422, 409),
            throws=exceptions.CreateFolderError,
        )

        data = await resp.json()

        if resp.status in (422, 409):
            if resp.status == 409 or data.get("message") == 'Invalid request.\n\n"sha" wasn\'t supplied.':
                raise exceptions.FolderNamingConflict(str(path))
            raise exceptions.CreateFolderError(data, code=resp.status)

        data["content"]["name"] = path.name
        data["content"]["path"] = data["content"]["path"].replace(".gitkeep", "")

        return GitHubFolderContentMetadata(data["content"], commit=data["commit"], ref=path.branch_ref)
Example #10
0
    async def validate_path(self, path, **kwargs):
        if not getattr(self, '_repo', None):
            self._repo = await self._fetch_repo()
            self.default_branch = self._repo['default_branch']

        path = GitHubPath(path)
        branch_ref = kwargs.get('ref') or kwargs.get(
            'branch') or self.default_branch
        if isinstance(branch_ref, list):
            raise exceptions.InvalidParameters(
                'Only one ref or branch may be given.')

        for part in path.parts:
            part._id = (branch_ref, None)

        # TODO Validate that filesha is a valid sha
        path.parts[-1]._id = (branch_ref, kwargs.get('fileSha'))

        return path
Example #11
0
    def test_child_given_explicit_branch(self):
        gh_parent = GitHubPath('/foo/', _ids=[('master', None), ('master', 'abcea54as123')])
        gh_child = gh_parent.child('foo', _id=('develop', '413006763'))

        assert gh_child.branch_ref == 'develop'
        assert gh_child.file_sha == '413006763'
Example #12
0
    def test_child_inherits_branch(self):
        gh_parent = GitHubPath('/foo/', _ids=[('master', None), ('master', 'abcea54as123')])
        gh_child = gh_parent.child('foo')

        assert gh_child.branch_ref == 'master'
        assert gh_child.file_sha is None
    def test_increment_name(self):
        gh_path = GitHubPath('/foo/', _ids=[('master', None), ('master', 'abcea54as123')])
        old_id = gh_path.identifier
        gh_path.increment_name()

        assert old_id[0] == gh_path.identifier[0]