def __new__(cls, name, validate=True): '''user/modname/branch ie: owner/[originalowner/name]/branch ''' assert isinstance(name, basestring), '%s is not a string' % str(name) if not validate: obj = str.__new__(cls, name) else: name = name.strip().replace('\\', '/') tokens = name.split('/') if len(tokens) != 4: raise InvalidNameException( "Invalid block name: %s, it should be in the form " "owner/originalowner/name/branch" % name) user = tokens[0] block_name = '/'.join(tokens[1:3]) obj = str.__new__(cls, '%s/%s/%s' % (user, block_name, tokens[3])) obj._user = BRLUser(user) obj._block_name = BlockName(block_name) obj._branch = ComplexName(tokens[3].lower()) return obj
def checkin_block_files(hive_holder, block_name, files, biiout): ''' Params: hive_holder: HiveHolder block_name: BlockName files: {cell_name: content} processor_changes: ProcessorChanges biiout: biiout ''' block_name = BlockName(block_name) types_blobs = obtain_types_blobs( files) # {cell_name: (TYPE, Content/CellType/None)} # FIXME: What happens if merge result is larger than individual files, reject??? changevalidator.remove_large_cells(types_blobs, biiout) try: block_holder = hive_holder[block_name] except KeyError: block_holder = BlockHolder(block_name, []) hive_holder.add_holder(block_holder) for cell_name, (biitype, blob) in types_blobs.iteritems(): block_cell_name = block_name + cell_name cell = SimpleCell(block_cell_name, biitype) try: resource = block_holder[cell_name] except KeyError: content = Content(block_cell_name, load=blob) else: content = resource.content if content is None or blob != content.load: content = Content(block_cell_name, load=blob) else: content.set_blob(blob) resource = Resource(cell, content) block_holder.add_resource(resource) for cell_name, resource in block_holder.resources.items(): if cell_name not in types_blobs: block_holder.delete_resource(cell_name)
def parse_block_version_expression(text): '''Parse text and returns the components of a BlockVersion Valid text input examples: lasote/myblock lasote/myblock(master) lasote/myblock(master):1 lasote/myblock(pepe/branch):33 @My cool version # Comment at the end ''' text = text.strip().replace('\\', '/') group_values = [m.groupdict() for m in block_version_re.finditer(text)] if len(group_values) == 0: # Not Match raise ValueError() group_values = group_values[0] # Get block_name block_name = BlockName(group_values["block_name"]) # Get complete branch_name if group_values.get("branch", None) is None: # If none => owner/master branch_user = block_name.user branch_name = "master" elif "/" in group_values["branch"]: branch_user, branch_name = group_values["branch"].split("/") else: # Only branch_name, so owner/branch_name branch_user = block_name.user branch_name = group_values["branch"] branch = BranchName('%s/%s' % (branch_user, branch_name)) brl_block = BRLBlock( '%s/%s/%s/%s' % (branch.user, block_name.user, block_name.name, branch.name)) # Get time version = group_values.get("time", None) time = int(version) if version else None version_tag = group_values.get("tag", None) return brl_block, time, version_tag
def disk_blocks(self): """Get the blocks based on disk, not in processed hive""" result = {} root_block = self._bii_paths.root_block if os.path.exists(self._bii_paths.blocks): for username in os.listdir(self._bii_paths.blocks): for name in os.listdir( os.path.join(self._bii_paths.blocks, username)): tmp_path = os.path.join(self._bii_paths.blocks, username, name) if (os.path.isdir(tmp_path)): block_name = BlockName("%s/%s" % (username, name)) if root_block == block_name: self._biiout.warn( "Skipping %s, it exists as root block" % root_block) elif (os.listdir(tmp_path) ): # If there is any file inside result[block_name] = os.path.join( self._bii_paths.blocks, block_name) if root_block: result[root_block] = self._bii_paths.project_root return result
def parent_update_test(self): block_name = BlockName("user/block") text = "[parent]\n # My comment\n" config = BiiConfig(text) self.assertEqual(config.dumps(), None) version = BlockVersion(block_name.default_block(), 0) config.parent = version dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block: 0\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config2 = BiiConfig(dumped) self.assertEqual(config2.parent, config.parent) version2 = BlockVersion.loads("user/block(track): 2") config.parent = version2 dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block(track): 2\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config3 = BiiConfig(dumped) self.assertEqual(config3.parent, config.parent)
def testComputeLevels(self): g = DirectedGraph() for i in range(13): g.add_node(BlockName("user/mod%d" % i)) g.add_edge(BlockName("user/mod0"), BlockName("user/mod2")) g.add_edge(BlockName("user/mod0"), BlockName("user/mod3")) g.add_edge(BlockName("user/mod0"), BlockName("user/mod4")) g.add_edge(BlockName("user/mod3"), BlockName("user/mod6")) g.add_edge(BlockName("user/mod4"), BlockName("user/mod7")) g.add_edge(BlockName("user/mod6"), BlockName("user/mod9")) g.add_edge(BlockName("user/mod7"), BlockName("user/mod9")) g.add_edge(BlockName("user/mod9"), BlockName("user/mod12")) g.add_edge(BlockName("user/mod1"), BlockName("user/mod5")) g.add_edge(BlockName("user/mod5"), BlockName("user/mod8")) g.add_edge(BlockName("user/mod8"), BlockName("user/mod10")) g.add_edge(BlockName("user/mod8"), BlockName("user/mod11")) g.add_edge(BlockName("user/mod10"), BlockName("user/mod12")) g.add_edge(BlockName("user/mod7"), BlockName("user/mod10")) result = g.get_levels() self.assertEquals(5, len(result)) self.assertEquals( result[0], set([ BlockName("user/mod12"), BlockName("user/mod11"), BlockName("user/mod2") ])) self.assertEquals( result[1], set([BlockName("user/mod9"), BlockName("user/mod10")])) self.assertEquals( result[2], set([ BlockName("user/mod6"), BlockName("user/mod7"), BlockName("user/mod8") ])) self.assertEquals( result[3], set([ BlockName("user/mod3"), BlockName("user/mod4"), BlockName("user/mod5") ])) self.assertEquals( result[4], set([BlockName("user/mod0"), BlockName("user/mod1")]))
def block_test(self): self.assertEquals(self.sut.block(), BlockName("user/wizard"))
def long_blockname_test(self): wrong_bn = "dummy/dummy/block/master" with self.assertRaisesRegexp(InvalidNameException, '%s is not a valid BlockName.' % wrong_bn): BlockName(wrong_bn)
def blockname_underscore_test(self): bn = BlockName("user_1/block_1")
def setUp(self): self.testuser = BRLUser('user') self.edition_api = TestEditionAPI() self.hive_manager = HiveManager(self.edition_api, None, OutputStream()) self.block_name = BlockName('dummy/myblock')
def block_name(argument): try: return BlockName(argument) except InvalidNameException as e: raise BiiException('%s, e.g.: my_user/my_block' % e.message)
def _parse(self): # Data must be already validated tokens = self.split('/', 2) self._block = BlockName('/'.join(tokens[:2]), False) self._cell = CellName(tokens[2], False)
def _parse(self): tokens = self.split('/') self._user = BRLUser(tokens[0], False) self._block_name = BlockName('/'.join(tokens[1:3]), False) self._branch = tokens[3]