class TestGetElements(TestCase): def setUp(self): self.handler = XMLHandler() def test_get_two_bond_elements_as_list(self): elements = self.handler.get_elements(TEST_XML, 'bond') self.assertIs(2, len(elements)) def test_get_no_elements_in_empty_list(self): elements = self.handler.get_elements(TEST_XML, 'austin') self.assertIs(0, len(elements))
class PFM2PFGConverter(object): implements(IPFM2PFGConverter) def __init__(self, item, xml_string): self.handler = XMLHandler() self.item = item self.xml_string = xml_string self.normalizer = getUtility(IIDNormalizer) def __iter__(self): xml = self.handler.parse_xml_string(self.xml_string) for group in self.handler.get_elements(xml, 'group'): yield self.begin_group(group) for field in self.handler.get_elements(group, 'field'): yield self.get_pfg_field(field) yield self.end_group(group) def get_pfg_field(self, field): pfm_type = self.handler.get_element_value(field, 'type') field_utility = self.get_field_utility(pfm_type) if not field_utility: raise pfg_field = field_utility(field, self.item) pfg_field.fill_field() return pfg_field def get_field_utility(self, type_): """Returns the assosiated utility for pfg fields """ return queryUtility( IFormGenField, 'ftw.blueprints.pfm2pfg.%s' % type_) def end_group(self, xml): item = {} title = self.handler.get_element_value(xml, 'title') if title == 'Default': return item title = self.normalizer.normalize(title) item['_id'] = '%s-end' % title item['_type'] = 'FieldsetEnd' item['_path'] = '%s/%s-stop' % (self.item['_path'], title) return item def begin_group(self, xml): item = {} title = self.handler.get_element_value(xml, 'title') if title == 'Default': return item item['title'] = title title = self.normalizer.normalize(title) item['_id'] = '%s-start' % title item['_type'] = 'FieldsetStart' item['_path'] = '%s/%s-start' % (self.item['_path'], title) return item