[OGo-XML-RPC] Importing contacts from delimited files
Adam Tauno Williams
xmlrpc@opengroupware.org
Fri, 13 Apr 2007 13:33:54 -0400
--=-Sm4mO0+6nB2hhyvGvpLi
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
On Fri, 2007-04-13 at 13:30 -0400, Adam Tauno Williams wrote:
> > Adam from the users@ mailing list recommended I hop on over here for a =
few=20
> > questions/help with XML-RPC scripts.
> > I was told its possible and actually VERY easy to import a number of co=
ntacts=20
> > from a delimited file using Python/XML-RPC scripts. I was wondering if=
someone
> > could provide some help as to how this is actually done.
> Here is one simple example -
> #!/usr/bin/env python
>=20
> import sys, csv, xmlrpclib, pprint
> server =3D xmlrpclib.Server('http://{USER}:{PASSWORD}@{HOST}/RPC2')
> reader =3D csv.reader(open("{FILENAME}", "rb"), delimiter=3D'|',
> quoting=3Dcsv.QUOTE_NONE)
Here is a more complicated example that creates both contacts and
enterprises, breaking enterprises by changes in the ZIP+4, and it sets
the permissions on all created objects to specific teams -
#!/usr/bin/env python
import sys, csv, xmlrpclib, pprint
server =3D xmlrpclib.Server('http://adam:********@gourd-amber/RPC2')
reader =3D csv.reader(open("MECustomerListforOGoLoad.aaaf.csv", "rb"),
delimiter=3D'|', quoting=3Dcsv.QUOTE_NONE)
previousZIP =3D ''
for row in reader:
currentZIP =3D row[5]
if currentZIP !=3D previousZIP or len(currentZIP) =3D=3D 5:
print "%s: ZIP code changed" %row[0]
result =3D {}
if len(row[14]) > 0:
fSpec =3D {}
fSpec['qualifier'] =3D "bankCode =3D '%s' " % row[14]
result =3D server.enterprise.fetch(fSpec)
if len(result) =3D=3D 0:
print "Creating new enterprise"
enterprise =3D {}
enterprise['name'] =3D row[1]
enterprise['bankCode'] =3D row[14]
enterprise['url'] =3D row[9]
enterprise['addresses'] =3D {}
enterprise['addresses']['ship'] =3D {}
enterprise['addresses']['ship']['name1'] =3D row[1]
enterprise['addresses']['ship']['street'] =3D row[2]
enterprise['addresses']['ship']['city'] =3D row[3]
enterprise['addresses']['ship']['state'] =3D row[4]
enterprise['addresses']['ship']['zip'] =3D row[5]
enterprise['addresses']['ship']['country'] =3D 'USA'
enterprise['addresses']['ship']['type'] =3D 'ship'
enterprise['extendedKeys'] =3D ['salesperson', 'division', 'mailmktco=
de']
enterprise['extendedAttrs'] =3D {}
enterprise['extendedAttrs']['salesperson'] =3D row[16]
enterprise['extendedAttrs']['division'] =3D row[17]
enterprise['extendedAttrs']['mailmktcode'] =3D row[15]
enterprise['phones'] =3D {}
enterprise['phones']['01_tel'] =3D {}
enterprise['phones']['01_tel']['number'] =3D row[7]
enterprise['phones']['01_tel']['info'] =3D ''
enterprise['phones']['01_tel']['type'] =3D '01_tel'
enterprise['phones']['10_fax'] =3D {}
enterprise['phones']['10_fax']['number'] =3D row[8]
enterprise['phones']['10_fax']['info'] =3D ''
enterprise['phones']['10_fax']['type'] =3D '10_fax'
enterpriseId =3D server.enterprise.insert(enterprise)
print "Enterprise Id %s created " % enterpriseId
server.access.setOperationOnObjectForAccess('rw', enterpriseId, 95524=
0);
server.access.setOperationOnObjectForAccess('rw', enterpriseId, 11530=
);
print " Permission applied to enterprise."
else:
print "Enterprise with bankCode already exists"
enterpriseId =3D result[0]['id'].split('/')[4]
print "Enterprise Id %s " % enterpriseId
else:
print "%s: ZIP code unchanged" %row[0]
previousZIP =3D currentZIP
if len(row[10]) > 0:
contact =3D {}
contact['firstname'] =3D row[11]
contact['name'] =3D row[12]
contact['nickname'] =3D row[10]
contact['isPrivate'] =3D '0'
contact['extendedKeys'] =3D ['organization', 'job_title', 'mailmktcode'=
,
'salesperson', 'division']
contact['extendedAttrs'] =3D {}
contact['extendedAttrs']['organization'] =3D row[1]
contact['extendedAttrs']['job_title'] =3D row[13]
contact['extendedAttrs']['mailmktcode'] =3D row[15]
contact['extendedAttrs']['salesperson'] =3D row[16]
contact['extendedAttrs']['division'] =3D row[17]
contact['phones'] =3D {}
contact['phones']['01_tel'] =3D {}
contact['phones']['01_tel']['number'] =3D row[7]
contact['phones']['01_tel']['info'] =3D ''
contact['phones']['01_tel']['type'] =3D '01_tel'
contact['phones']['10_fax'] =3D {}
contact['phones']['10_fax']['number'] =3D row[8]
contact['phones']['10_fax']['info'] =3D ''
contact['phones']['10_fax']['type'] =3D '10_fax'
contact['addresses'] =3D {}
contact['addresses']['mailing'] =3D {}
contact['addresses']['mailing']['name1'] =3D row[1]
contact['addresses']['mailing']['name2'] =3D row[10]
contact['addresses']['mailing']['street'] =3D row[2]
contact['addresses']['mailing']['city'] =3D row[3]
contact['addresses']['mailing']['state'] =3D row[4]
contact['addresses']['mailing']['zip'] =3D row[5]
contact['addresses']['mailing']['country'] =3D 'USA'
contact['addresses']['mailing']['type'] =3D 'mailing'
contactId =3D server.person.insert(contact)
print " Contact Id %s created " % contactId
server.enterprise.insertPerson(enterpriseId, contactId);
print " Contact Id %s added to Enterprise Id %s " % (contactId,
enterpriseId)
server.access.setOperationOnObjectForAccess('rw', contactId, 955240);
server.access.setOperationOnObjectForAccess('rw', contactId, 11530);
print " Permissions applied to contact."
--=-Sm4mO0+6nB2hhyvGvpLi
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
iD8DBQBGH78CLRePpNle04MRAprAAJ0bhpbK3PbTESPq4wv3z/Vy88EBHACfVDf1
xKlcPPaLyYLUHDcV6aM7DIQ=
=OTdL
-----END PGP SIGNATURE-----
--=-Sm4mO0+6nB2hhyvGvpLi--