Ciao lista,

sto facendo una applicazione con genropy, per cui ho scritto un
servizio che mi permette di integrare (in forma minima, per adesso)
genropy e il server ldap. Lo uso per l'autenticazione degli utenti, e
per recuperare i dati utente durante le varie lavorazione (gestione
dei ticket, l'utente digita solo la matricola e si ritrova i suoi dati
o i dati della persona per cui sta facendo la richiesta). Il problema
che mi ritrovo ad affrontare è la gestione delle date (tipicamente
l'account expiration date), che in ldap è in un formato non
compatibile con datetime (ms-file, ho trovato questa indicazione
durante le mie ricerche).

Possibile che python-ldap non abbia già previsto di suo un metodo per
la conversione dei due formati? mi sono letto quasi tutta la
documentazione del sito ufficiale, ma non ne ho trovata traccia...

con un po' di reverse engineering, ho sfornato il codice allegato, che
mi fa la conversione, ma mi ritrovo con uno strano problema...

evidentemente per alcuni utenti, sono state inserite delle date
estremamente avanti nel futuro, e quando cerco di fare la conversione,
il codice va in errore di overflow.

per ovviare alla cosa, ho fatto un controllo che se i giorni calcolati
sono superiore a 400, rispetto alla data attuale, semplicemente viene
ignorata la data di scadenza (impostandola a None), in questo modo
posso trasasformarlo in datetime e continuare a far funzionare il
tutto...

Il tutto non dovrebbe dare problemi, in quanto il programma dovrebbe
fare il controllo degli utenti con una cadenza almeno annuale,
spostando di volta in volta le scadenze che superano i 400 giorni dal
momento dell'esecuzione.

ora... la mia domanda è più pragmaticamente semplice... il codice
funziona, e per ora mi va bene... ma possibile che un tools come
python-ldap non lo preveda già di suo? qualcuno ha esperienze in
merito?

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesssssoro, dov'é il mio tessssoro...
def convertMS_time(self, dt):
    delta = datetime.datetime.now() + datetime.timedelta(400) - datetime.datetime.strptime('1/1/1601', "%m/%d/%Y")

    microseconds = int(dt)/10
    seconds, microseconds = divmod(microseconds, 1000000)
    days, seconds = divmod(seconds, 86400)

    if days > delta.days:
        return None

    return datetime.datetime.strptime('1/1/1601', "%m/%d/%Y") + datetime.timedelta(days, seconds, microseconds)
 
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a