pyceo/ceod/model/UWLDAPRecord.py

55 lines
1.5 KiB
Python

from typing import List, Dict, Union
from .utils import bytes_to_strings
class UWLDAPRecord:
"""Represents a record from the UW LDAP."""
def __init__(
self,
uid: str,
mail_local_addresses: List[str],
program: Union[str, None] = None,
cn: Union[str, None] = None,
sn: Union[str, None] = None,
given_name: Union[str, None] = None,
):
self.uid = uid
self.mail_local_addresses = mail_local_addresses
self.program = program
self.cn = cn
self.sn = sn
self.given_name = given_name
@staticmethod
def deserialize_from_ldap(data: Dict[str, List[bytes]]):
"""
Deserializes a dict returned from ldap.search_s() into a
UWLDAPRecord.
"""
data = bytes_to_strings(data)
return UWLDAPRecord(
uid=data['uid'][0],
mail_local_addresses=data['mailLocalAddress'],
program=data.get('ou', [None])[0],
cn=data.get('cn', [None])[0],
sn=data.get('sn', [None])[0],
given_name=data.get('givenName', [None])[0],
)
def to_dict(self):
data = {
'uid': self.uid,
'mail_local_addresses': self.mail_local_addresses,
}
if self.program:
data['program'] = self.program
if self.cn:
data['cn'] = self.cn
if self.sn:
data['sn'] = self.sn
if self.given_name:
data['given_name'] = self.given_name
return data