[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