[Python] Parsing di un file ldif invalido
Valerio Pachera
sirio81 a gmail.com
Gio 15 Set 2022 09:50:35 CEST
Il giorno mer 14 set 2022 alle ore 15:36 Marco Giusti <
marco.giusti a posteo.de> ha scritto:
>
>
> #!/usr/bin/env python3
>
> import sys
> from ldif3 import LDIFParser
>
> ldif_path = sys.argv[1]
>
> with open(ldif_path, 'rb') as ldif_file:
> parser = LDIFParser(ldif_file)
>
> for dn, entry in parser.parse():
> try:
> print(dn, entry['cn'])
> except ValueError:
> continue
>
>
> Ciao, grazie della risposta ma l'errore avviene nel momento in cui la
variabile dn viene popolata, prima del try.
Credo che non sia possibile gestire l'eccezione in questa fase :-(.
Dovrebbe essere gestita dal modulo ldif3.
Mentre scrivevo questo sono andata a spulciare la documentazione della
libreria <https://ldif3.readthedocs.io/en/latest/> e fra i parametri ho
trovato:
"strict (boolean) – If set to False, recoverable parse errors will produce
log warnings rather than exceptions."
Ho modificato lo script come segue:
---
#!/usr/bin/env python3
import sys
from pprint import pprint
from ldif3 import LDIFParser
ldif_path = sys.argv[1]
with open(ldif_path, 'rb') as ldif_file:
parser = LDIFParser(ldif_file, *strict=False*)
for dn, entry in parser.parse():
pprint(dn)
pprint(entry)
---
Ho eseguito lo script:
---
./test.py bad_sample.ldif 2> error.log
'cn=*Mario, Rossi*,mail=mario.rossi a domain.com'
OrderedDict([('objectclass',
['top',
'person',
'organizationalPerson',
'inetOrgPerson',
'mozillaAbPersonAlpha']),
('givenName', ['Mario Rossi']),
*('cn', ['Mario, Rossi']),*
('mail', ['mario.rossi a domain.com']),
('modifytimestamp', ['1632815299'])])
cat error.log
No valid string-representation of distinguished name cn=Mario, Rossi,mail=
mario.rossi a domain.com.
---
In questo modo lo script non si blocca e ho comunque traccia dei contatti
problematici da sistemare in sorgente!
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20220915/818d20de/attachment.html>
Maggiori informazioni sulla lista
Python