def testAddressRange(self): result = AddressRange.create('api-iprange', '2.3.4.5-2.3.4.6') self.assertTrue(result.href.startswith('http')) addr = AddressRange('api-iprange') self.assertEqual(addr.ip_range, '2.3.4.5-2.3.4.6') self.assertEqual(addr.data.get('ip_range'), '2.3.4.5-2.3.4.6') addr.modify_attribute(ip_range='1.1.1.1-1.1.1.2') self.assertEqual(addr.data.get('ip_range'), '1.1.1.1-1.1.1.2') addr.rename('api-iprange2') addr = AddressRange('api-iprange2') Category.create(name='elements') addr.add_category(['elements']) for tag in addr.categories: self.assertEqual(tag.name, 'elements') # Add another tag but category doesnt exist so it wil be created automatically addr.add_category(['customtag', 'someothertag']) for tag in addr.categories: self.assertIn(tag.name, ['elements', 'customtag', 'someothertag']) self.assertIsNone(addr.comment) addr.data['comment'] = 'testcomment' self.assertEqual(addr.data.get('comment'), 'testcomment') addr.delete()
def add_category(self, category): """ Category Tags are used to characterize an element by a type identifier. They can then be searched and returned as a group of elements. If the category tag specified does not exist, it will be created. This change will take effect immediately. :param list tags: list of category tag names to add to this element :type tags: list(str) :raises ElementNotFound: Category tag element name not found :return: None .. seealso:: :class:`smc.elements.other.Category` """ assert isinstance(category, list), "Category input was expecting list." from smc.elements.other import Category for tag in category: category = Category(tag) try: category.add_element(self.href) except ElementNotFound: Category.create(name=tag) category.add_element(self.href)
def remove_tags(self, element, tags): """ Remove tag/s from an element :param Element element: the element to add a tag. :param list tags: list of tags by name :return: boolean success or fail """ changed = False current_tags = [tag.name for tag in element.categories] for tag in tags: if tag in current_tags: category = Category(tag) category.remove_element(element) changed = True return changed
def test_category_tag(self): category = Category.create('foo', comment='mycomment') self.assertTrue(category.href.startswith('http')) category = Category('foo') host = Host.create(name='categoryelement', address='1.1.1.1') # Add category tag by HREF result = category.add_element(host) self.assertIsNone(result) # Search result result = category.search_elements() self.assertTrue(result) # Not [] self.assertTrue(result[0].name == 'categoryelement') # Find the category tag from the element result = Host('categoryelement').categories self.assertTrue(result) self.assertTrue(result[0].name == 'foo') # Remove category result = category.remove_element(host) self.assertIsNone(result) # Add by smc.base.model.Element result = category.add_element(Host('categoryelement')) self.assertIsNone(result) # Search result result = category.search_elements() self.assertTrue(result) # Not [] self.assertTrue(result[0].name == 'categoryelement') # Delete result by smc.base.model.Element result = category.remove_element(Host('categoryelement')) self.assertIsNone(result) category_tag = CategoryTag.create(name='footag') category.add_category_tag([category_tag.href]) for tag in category.categories: self.assertEqual(tag.name, 'footag') with self.assertRaises(DeleteElementFailed): Category('foo').delete() #Dependencies category_tag = Element.from_href(category_tag.href) for category in category_tag.child_categories: self.assertTrue(category.name, 'foo') self.assertFalse(category_tag.parent_categories) # Throwing when __setattr__ set category_tag.remove_category([Category('foo')]) Host('categoryelement').delete() Category('foo').delete()