def mutate_and_get_payload(cls, root, info, name, description, repository, base_id, revision, is_untracked=False, client_mutation_id=None): username = get_logged_in_username() inv_manager = InventoryManager() if is_untracked: lb = inv_manager.create_labbook_disabled_lfs( username=username, owner=username, labbook_name=name, description=description, author=get_logged_in_author()) else: lb = inv_manager.create_labbook(username=username, owner=username, labbook_name=name, description=description, author=get_logged_in_author()) if is_untracked: FileOperations.set_untracked(lb, 'input') FileOperations.set_untracked(lb, 'output') input_set = FileOperations.is_set_untracked(lb, 'input') output_set = FileOperations.is_set_untracked(lb, 'output') if not (input_set and output_set): raise ValueError( f'{str(lb)} untracking for input/output in malformed state' ) if not lb.is_repo_clean: raise ValueError( f'{str(lb)} should have clean Git state after setting for untracked' ) adr = ActivityDetailRecord(ActivityDetailType.LABBOOK, show=False, importance=0) adr.add_value('text/plain', f"Created new LabBook: {username}/{name}") # Create activity record ar = ActivityRecord(ActivityType.LABBOOK, message=f"Created new LabBook: {username}/{name}", show=True, importance=255, linked_commit=lb.git.commit_hash) ar.add_detail_object(adr) store = ActivityStore(lb) store.create_activity_record(ar) cm = ComponentManager(lb) cm.add_base(repository, base_id, revision) return CreateLabbook(labbook=Labbook(owner=username, name=lb.name))
def test_set_new_lb_section_for_large_files(self, mock_labbook): x, y, lb = mock_labbook assert FileOperations.is_set_untracked(labbook=lb, section='input') is False FileOperations.set_untracked(labbook=lb, section='input') assert FileOperations.is_set_untracked(labbook=lb, section='input') is True assert FileOperations.is_set_untracked(labbook=lb, section='code') is False # 1 - Ensure there are no untracked changes after the set operation s = lb.git.status() for key in s.keys(): assert not s[key] # 2 - Add a file to the input directory using the old-fashioned add file op. with open('/tmp/unittestfile', 'w') as f: f.write('------------------------\n') r = FileOperations.put_file(lb, section="input", src_file=f.name, dst_path='') assert os.path.isfile( os.path.join(lb.root_dir, 'input', 'unittestfile')) # 3 - Make sure the new file exists but is not tracked (i.e., the git commit is the same) s = lb.git.status() for key in s.keys(): assert not s[key]
def resolve_is_untracked(self, info): return info.context.labbook_loader.load( f"{get_logged_in_username()}&{self.owner}&{self.name}").then( lambda labbook: FileOperations.is_set_untracked( labbook=labbook, section=str(self.section)))