20120521¶
Hurra, ich kann weiter an der CBSS-Connection arbeiten! Fast zwei Wochen lang wartete ich auf Antwort von der Smals wegen eines technischen Verbindungsproblems, das sich dann von selbst (d.h. bisher ohne Erklärung) gelöst hat.
Hier eine Zwischenstudie:
# -*- coding: UTF-8 -*-
"""
Some experiments on how to explore the response to an
IdentifyPerson request.
"""
from django.utils.translation import gettext as _
from lino.utils.choicelists import Gender
from suds.sax.parser import Parser
PARSER = Parser()
response_string = u'''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SSDNReply xmlns="http://www.ksz-bcss.fgov.be/XSD/SSDN/Service">
<ReplyContext>
<ns1:ResultSummary ok="YES" xmlns:ns1="http://www.ksz-bcss.fgov.be/XSD/SSDN/Common">
<ns1:ReturnCode>0</ns1:ReturnCode>
</ns1:ResultSummary>
<AuthorizedUser>
<UserID>12345678901</UserID><Email>123@example.be</Email>
<OrgUnit>123</OrgUnit><MatrixID>12</MatrixID><MatrixSubID>3</MatrixSubID>
</AuthorizedUser>
<Message>
<Reference>IdentifyPersonRequest # 1</Reference>
<Ticket>THTTMHHP49DGQ9V</Ticket>
<TimeRequest>20120521T134021</TimeRequest><TimeReceive>20120521T134002</TimeReceive>
<TimeResponse>20120521T134019</TimeResponse>
</Message>
</ReplyContext>
<ServiceReply>
<ns2:ResultSummary ok="YES" xmlns:ns2="http://www.ksz-bcss.fgov.be/XSD/SSDN/Common">
<ns2:ReturnCode>0</ns2:ReturnCode>
</ns2:ResultSummary>
<ServiceId>OCMWCPASIdentifyPerson</ServiceId>
<Version>20050930</Version>
<ns3:IdentifyPersonReply xmlns:ns3="http://www.ksz-bcss.fgov.be/XSD/SSDN/OCMW_CPAS/IdentifyPerson">
<ns3:SearchResults>
<ns3:LimitedLegalData origin="RN_RR">
<ns3:Basic>
<ns3:SocialSecurityUser>38060105329</ns3:SocialSecurityUser>
<ns3:LastName>MUSTERMANN</ns3:LastName>
<ns3:FirstName>MAX MORITZ</ns3:FirstName>
<ns3:BirthDate>1938-06-01</ns3:BirthDate>
<ns3:Gender>1</ns3:Gender>
<ns3:DiplomaticPost>
<ns3:CountryCode>136</ns3:CountryCode>
<ns3:Post>1418</ns3:Post>
<ns3:AddressPlainText>WILHELM-BUSCH-STR. 15 BERLIN DEUTSCHLAND</ns3:AddressPlainText>
</ns3:DiplomaticPost>
</ns3:Basic>
<ns3:Extended/>
</ns3:LimitedLegalData>
</ns3:SearchResults>
</ns3:IdentifyPersonReply>
</ServiceReply>
</SSDNReply>
'''
def gender(v):
if v == '1':
return Gender.male
elif v == '2':
return Gender.female
return None
reply = PARSER.parse(string=response_string.encode('utf-8')).root()
print reply.childAtPath('/ReplyContext/Message/Ticket').text
print reply.childAtPath('/ServiceReply/ResultSummary/ReturnCode').text
service_reply = reply.childAtPath('/ServiceReply/IdentifyPersonReply')
results = service_reply.childAtPath('/SearchResults')
for i,person in enumerate(results):
print person
mapper = [
# path , label, converter
['/Basic/SocialSecurityUser',_("National ID"),unicode],
['/Basic/LastName',_("Last name"),unicode],
['/Basic/MiddleName',_("Middle name"),unicode],
['/Basic/FirstName',_("First name"),unicode],
['/Basic/BirthDate',_("Birth Date"),unicode],
['/Basic/Gender',_("Gender"),gender],
]
for k,lbl,cvt in mapper:
node = person.childAtPath(k)
if node is not None:
v = cvt(node.text)
else:
v = None
print lbl, ':', unicode(v)
Und ein erstes Erfolgserlebnis ist die neue Tabelle
IdentifyPersonRequestResults
.
Also erstmals in Lino sieht mal als Antwort auf einen
Request nicht mehr den rohen XML-String, sondern dessen
Auswertung in Form einer virtuellen Tabelle.
Bei einem IPR sind das die legalen Daten der
gefunden Personen.
Also added a first fictive request
to lino.modlib.cbss.fixtures.demo
to test and demonstrate the new feature.