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'
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'
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
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
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'
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)
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 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
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]