class TestParseXMLString(TestCase): def setUp(self): self.handler = XMLHandler() def test_returns_minidom_object(self): xml = self.handler.parse_xml_string('<james></james>') self.assertEquals(xml.__class__.__name__, 'Document') def test_functionality_with_unicode(self): xml = self.handler.parse_xml_string(u'<j\xe4mes></j\xe4mes>') self.assertIn(u'j\xe4mes', xml.firstChild.tagName) def test_functionality_with_utf_8(self): xml = self.handler.parse_xml_string( '<j\xc3\xa4mes></j\xc3\xa4mes>') self.assertIn(u'j\xe4mes', xml.firstChild.tagName) def test_error_message_with_invalid_xml_string(self): with self.assertRaises(ExpatError) as err: self.handler.parse_xml_string('bad_xml') self.assertIn('syntax error', str(err.exception))
class TestGetElementAttribute(TestCase): def setUp(self): self.handler = XMLHandler() def test_get_agent_when_asking_for_bond_title(self): value = self.handler.get_element_attribute_value( TEST_XML, 'bond', 'title') self.assertEquals(u'\xe4gent', value) def test_get_hero_when_asking_for_bond_tag_with_specified_xml(self): xml = self.handler.get_first_element(TEST_XML, 'asterix') value = self.handler.get_element_attribute_value(xml, 'bond', 'title') self.assertEquals('hero', value) def test_empty_string_when_attribute_doesnt_exist(self): value = self.handler.get_element_attribute_value( TEST_XML, 'bond', 'nothing') self.assertEquals('', value) def test_empty_string_when_element_doenst_exist(self): value = self.handler.get_element_attribute_value( TEST_XML, 'austin', 'title') self.assertEquals('', value)
class TestGetFirstElement(TestCase): def setUp(self): self.handler = XMLHandler() def test_get_one_bond_element(self): element = self.handler.get_first_element(TEST_XML, 'bond') self.assertEquals('bond', element.tagName) def test_get_no_elements(self): element = self.handler.get_first_element(TEST_XML, 'austin') self.assertIs(None, element)
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 TestGetElementValue(TestCase): def setUp(self): self.handler = XMLHandler() def test_get_007_when_asking_for_bond_tag(self): value = self.handler.get_element_value(TEST_XML, 'bond') self.assertEquals('007', value) def test_get_other_agent_when_asking_for_bond_tag_with_specified_xml(self): xml = self.handler.get_first_element(TEST_XML, 'asterix') value = self.handler.get_element_value(xml, 'bond') self.assertEquals(u'Other \xe4gent', value) def test_empty_string_when_no_elements_with_value(self): value = self.handler.get_element_value(TEST_XML, 'austin') self.assertEquals('', value)
class TestParseXMLString(TestCase): def setUp(self): self.handler = XMLHandler() def test_returns_minidom_object(self): xml = self.handler.parse_xml_string('<james></james>') self.assertEquals(xml.__class__.__name__, 'Document') def test_functionality_with_unicode(self): xml = self.handler.parse_xml_string(u'<j\xe4mes></j\xe4mes>') self.assertIn(u'j\xe4mes', xml.firstChild.tagName) def test_functionality_with_utf_8(self): xml = self.handler.parse_xml_string('<j\xc3\xa4mes></j\xc3\xa4mes>') self.assertIn(u'j\xe4mes', xml.firstChild.tagName) def test_error_message_with_invalid_xml_string(self): with self.assertRaises(ExpatError) as err: self.handler.parse_xml_string('bad_xml') self.assertIn('syntax error', str(err.exception))
def setUp(self): self.handler = XMLHandler()
def __init__(self, field, item): self.handler = XMLHandler() self.field = field self.item = item
class FormGenField(dict): implements(IFormGenField) form_type = None def __init__(self, field, item): self.handler = XMLHandler() self.field = field self.item = item def fill_field(self): for method in dir(self): if method.startswith('set_'): getattr(self, method)() def _get_filtered_element_value(self, name): value = self.handler.get_element_value(self.field, name) type_ = self.handler.get_element_attribute_value( self.field, name, 'type') if type_ == 'float': return float(value) elif type_ == 'int': if name in ['enabled', 'required', 'hidden']: return bool(int(value)) return int(value) elif type_ == 'list': return eval(value) elif type_ == 'datetime': return DateTime(value) if isinstance(value, unicode): return value.encode('utf-8') else: return value def set_path(self): self['_path'] = '%s/%s' % ( self.item['_path'], self._get_filtered_element_value('id')) def set_id(self): self['_id'] = self._get_filtered_element_value('id') def set_type(self): self['_type'] = self.form_type def set_title(self): self['title'] = self._get_filtered_element_value('title') def set_required(self): self['required'] = self._get_filtered_element_value('required') def set_description(self): self['description'] = self._get_filtered_element_value('description') def set_hidden(self): self['hidden'] = self._get_filtered_element_value('hidden') def set_default(self): self['fgDefault'] = self._get_filtered_element_value('default')
def __init__(self, item, xml_string): self.handler = XMLHandler() self.item = item self.xml_string = xml_string self.normalizer = getUtility(IIDNormalizer)
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