Changeset View
Changeset View
Standalone View
Standalone View
pykolab/auth/ldap/cache.py
Show All 25 Lines | |||||
from sqlalchemy import MetaData | from sqlalchemy import MetaData | ||||
from sqlalchemy import String | from sqlalchemy import String | ||||
from sqlalchemy import Table | from sqlalchemy import Table | ||||
from sqlalchemy import desc | from sqlalchemy import desc | ||||
from sqlalchemy import create_engine | from sqlalchemy import create_engine | ||||
from sqlalchemy.orm import mapper | from sqlalchemy.orm import mapper | ||||
from uuid import UUID | |||||
try: | try: | ||||
from sqlalchemy.orm import relationship | from sqlalchemy.orm import relationship | ||||
except: | except: | ||||
from sqlalchemy.orm import relation as relationship | from sqlalchemy.orm import relation as relationship | ||||
try: | try: | ||||
from sqlalchemy.orm import sessionmaker | from sqlalchemy.orm import sessionmaker | ||||
except: | except: | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | if not _entry == None: | ||||
db.commit() | db.commit() | ||||
def get_entry(domain, entry, update=True): | def get_entry(domain, entry, update=True): | ||||
result_attribute = conf.get_raw('cyrus-sasl', 'result_attribute') | result_attribute = conf.get_raw('cyrus-sasl', 'result_attribute') | ||||
_entry = None | _entry = None | ||||
db = init_db(domain) | db = init_db(domain) | ||||
try: | try: | ||||
_entry = db.query(Entry).filter_by(uniqueid=entry['id']).first() | _uniqueid = str(UUID(bytes_le=entry['id'])) | ||||
log.debug(_("Entry uniqueid was converted from binary form to string: %s") % _uniqueid, level=8) | |||||
except ValueError: | |||||
_uniqueid = entry['id'] | |||||
try: | |||||
_entry = db.query(Entry).filter_by(uniqueid=_uniqueid).first() | |||||
except sqlalchemy.exc.OperationalError, errmsg: | except sqlalchemy.exc.OperationalError, errmsg: | ||||
db = init_db(domain,reinit=True) | db = init_db(domain,reinit=True) | ||||
except sqlalchemy.exc.InvalidRequestError, errmsg: | except sqlalchemy.exc.InvalidRequestError, errmsg: | ||||
db = init_db(domain,reinit=True) | db = init_db(domain,reinit=True) | ||||
finally: | finally: | ||||
_entry = db.query(Entry).filter_by(uniqueid=entry['id']).first() | _entry = db.query(Entry).filter_by(uniqueid=_uniqueid).first() | ||||
if not update: | if not update: | ||||
return _entry | return _entry | ||||
if _entry == None: | if _entry == None: | ||||
log.debug(_("Inserting cache entry %r") % (entry['id']), level=8) | log.debug(_("Inserting cache entry %r") % (_uniqueid), level=8) | ||||
if not entry.has_key(result_attribute): | if not entry.has_key(result_attribute): | ||||
entry[result_attribute] = '' | entry[result_attribute] = '' | ||||
db.add( | db.add( | ||||
Entry( | Entry( | ||||
entry['id'], | _uniqueid, | ||||
entry[result_attribute], | entry[result_attribute], | ||||
entry['modifytimestamp'] | entry['modifytimestamp'] | ||||
) | ) | ||||
) | ) | ||||
db.commit() | db.commit() | ||||
_entry = db.query(Entry).filter_by(uniqueid=entry['id']).first() | _entry = db.query(Entry).filter_by(uniqueid=_uniqueid).first() | ||||
else: | else: | ||||
modifytimestamp_format = conf.get_raw('ldap', 'modifytimestamp_format') | modifytimestamp_format = conf.get_raw('ldap', 'modifytimestamp_format') | ||||
if modifytimestamp_format == None: | if modifytimestamp_format == None: | ||||
modifytimestamp_format = "%Y%m%d%H%M%SZ" | modifytimestamp_format = "%Y%m%d%H%M%SZ" | ||||
if not _entry.last_change.strftime(modifytimestamp_format) == entry['modifytimestamp']: | if not _entry.last_change.strftime(modifytimestamp_format) == entry['modifytimestamp']: | ||||
log.debug(_("Updating timestamp for cache entry %r") % (entry['id']), level=8) | log.debug(_("Updating timestamp for cache entry %r") % (_uniqueid), level=8) | ||||
last_change = datetime.datetime.strptime(entry['modifytimestamp'], modifytimestamp_format) | last_change = datetime.datetime.strptime(entry['modifytimestamp'], modifytimestamp_format) | ||||
_entry.last_change = last_change | _entry.last_change = last_change | ||||
db.commit() | db.commit() | ||||
_entry = db.query(Entry).filter_by(uniqueid=entry['id']).first() | _entry = db.query(Entry).filter_by(uniqueid=_uniqueid).first() | ||||
if entry.has_key(result_attribute): | if entry.has_key(result_attribute): | ||||
if not _entry.result_attribute == entry[result_attribute]: | if not _entry.result_attribute == entry[result_attribute]: | ||||
log.debug(_("Updating result_attribute for cache entry %r") % (entry['id']), level=8) | log.debug(_("Updating result_attribute for cache entry %r") % (_uniqueid), level=8) | ||||
_entry.result_attribute = entry[result_attribute] | _entry.result_attribute = entry[result_attribute] | ||||
db.commit() | db.commit() | ||||
_entry = db.query(Entry).filter_by(uniqueid=entry['id']).first() | _entry = db.query(Entry).filter_by(uniqueid=_uniqueid).first() | ||||
return _entry | return _entry | ||||
def init_db(domain,reinit=False): | def init_db(domain,reinit=False): | ||||
""" | """ | ||||
Returns a SQLAlchemy Session() instance. | Returns a SQLAlchemy Session() instance. | ||||
""" | """ | ||||
global db | global db | ||||
Show All 39 Lines |