def readSearchResult(cls, xml):
     parser = PagSeguroXmlParser(xml, 'transactionSearchResult')
     data = parser.getResult('transactionSearchResult')
     
     searchResult = PagSeguroTransactionSearchResult()
     
     if 'totalPages' in data:
         searchResult.setTotalPages(data['totalPages'])
     
     if 'date' in data:
         searchResult.setDate(data['date'])
     
     if 'resultsinThisPage' in data:
         searchResult.setResultsInThisPage(data['resultsinThisPage'])
     
     if 'currentPage' in data:
         searchResult.setCurrentPage(data['currentPage'])
         
     if 'transactions' in data and isinstance(data['transactions'], (list, tuple)):
         transactions = {}
         for i, v in data['transactions']:
             if i == 'transaction':
                 transactions.append(cls.parseTransactionSummary(v))
         searchResult.setTransactions(transactions)
     return searchResult
 def readSuccessXml(cls, str_xml):
     parser = PagSeguroXmlParser(str_xml, 'checkout')
     data = parser.getResult('checkout')
     paymentParserData = PagSeguroPaymentParserData()
     paymentParserData.setCode(data['code'])
     paymentParserData.setRegistrationDate(data['date'])
     return paymentParserData
 def readErrors(cls, str_xml):
     parser = PagSeguroXmlParser(str_xml,'errors')
     data = parser.getResult('errors')
     errors = {}
     if 'error' in data and isinstance(data['error'], (list,tuple)):
         if 'code' in data['error'] and 'message' in data['error']:
             errors.append(PagSeguroError(data['error']['code'], data['error']['message']))
         else:
             for v in data['error']:
                 if 'code' in v and 'message' in v:
                     errors.append(PagSeguroError(v['code'], v['message']))
     return errors
 def readTransaction(cls, xml):
     
     parser = PagSeguroXmlParser(xml)
     data = parser.getResult('transaction')
     
     transaction = PagSeguroTransaction()
     
     if 'lastEventDate' in data:
         transaction.setLastEventDate(data['lastEventDate'])
     
     if 'date' in data:
         transaction.setDate(data['date'])
     
     if 'code' in data:
         transaction.setCode(data['code'])
     
     if 'reference' in data:
         transaction.setReference(data['reference'])
         
     if 'type' in data:
         transaction.setType(data['type'])
         
     if 'status' in data:
         transaction.setStatus(data['status'])
         
     if 'paymentMethod' in data:
         paymentMethod = PagSeguroPaymentMethod()
         if 'type' in data['paymentMethod']:
             paymentMethod.setType(data['paymentMethod']['type'])
         if 'code' in data['paymentMethod']:
             paymentMethod.setCode(data['paymentMethod']['code'])
         transaction.setPaymentMethod(paymentMethod)
     
     if 'grossAmount' in data:
         transaction.setGrossAmount(data['grossAmount'])
         
     if 'discountAmount' in data:
         transaction.setDiscountAmount(data['discountAmount'])
         
     if 'feeAmount' in data:
         transaction.setFeeAmount(data['feeAmount'])
         
     if 'netAmount' in data:
         transaction.setNetAmount(data['netAmount'])
         
     if 'extraAmount' in data:
         transaction.setExtraAmount(data['extraAmount'])
         
     if 'installmentCount' in data:
         transaction.setInstallmentCount(data['installmentCount'])
         
     if data['items']['item'] and isinstance(data['items']['item'], (list,tuple)):
         items = {}
         i = 0
         for v in data['items']['item']:
             item = cls.parseTransactionItem(v)
             items[i] = item
             i = i + 1
             
         transaction.setItems(items)
     
     if 'sender' in data:
         sender = PagSeguroSender()
         if 'name' in data['sender']:
             sender.setName(data['sender']['name'])
         if 'email' in data['sender']:
             sender.setEmail(data['sender']['email'])
         if 'phone' in data['sender']:
             phone = PagSeguroPhone()
             if 'areaCode' in data['sender']['phone']:
                 phone.setAreaCode(data['sender']['phone']['areaCode'])
             if 'number' in data['sender']['phone']:
                 phone.setNumber(data['sender']['phone']['number'])
             sender.setPhone(phone)
         transaction.setSender(sender)
     
     if data['shipping'] and isinstance(data['shipping'], (list, tuple)):
         shipping = PagSeguroShipping()
         if 'type' in data['shipping']:
             shipping.setType(data['shipping']['type'])
         if 'cost' in data['shipping']:
             shipping.setCost(data['shipping']['cost'])
         if data['shipping']['address'] and isinstance(data['shipping']['address'],(list,tuple)):
             address = PagSeguroAddress()
             if 'street' in data['shipping']['address']:
                 address.setStreet(data['shipping']['address']['street'])
             if 'number' in data['shipping']['address']:
                 address.setNumber(data['shipping']['address']['number'])
             if 'complement' in data['shipping']['address']:
                 address.setComplement(data['shipping']['address']['complement'])
             if 'city' in data['shipping']['address']:
                 address.setCity(data['shipping']['address']['city'])
             if 'state' in data['shipping']['address']:
                 address.setState(data['shipping']['address']['state'])
             if 'district' in data['shipping']['address']:
                 address.setDistrict(data['shipping']['address']['district'])
             if 'postalCode' in data['shipping']['address']:
                 address.setPostalCode(data['shipping']['address']['postalCode'])
             if 'country' in data['shipping']['address']:
                 address.setCountry(data['shipping']['address']['country'])
             shipping.setAddress(address)
         transaction.setShipping(shipping)
     
     return transaction