Source code for uw.scientia.uef

"""Scientia Universal Exchange Format implementation
"""

from .uef_lines import *
from .uef_records import *

BASE_Institution = 10000
BASE_Staff = 16000
BASE_Location = 17000
BASE_Examination = 21000
BASE_Department = 27000
BASE_Suitability = 29000
BASE_Student = 30000

ORIGINATOR_CP = 'SPLUS/CP'
ORIGINATOR_TT = 'SPLUS/TT'
ORIGINATOR_ES = 'SPLUS/ES'

[docs]class UEFFile: def __init__ (self, version, originator, timestamp, dataset, startdate, enddate, transfer_id): self.__version = version self.__originator = originator self.__timestamp = timestamp self.__dataset = dataset self.__startdate = startdate self.__enddate = enddate self.__transfer_id = transfer_id @property def version (self): return self.__version @property def originator (self): return self.__originator @property def timestamp (self): return self.__timestamp @property def dataset (self): return self.__dataset @property def startdate (self): return self.__startdate @property def enddate (self): return self.__enddate
[docs] def convert_date (self, d): if not self.startdate <= d <= self.enddate: raise ValueError ('Invalid date %s' % d) result = d - self.startdate if result.seconds or result.microseconds: raise ValueError ('Non-integer date %s' % d) return result.days
@property def transfer_id (self): return self.__transfer_id @property def lines (self): yield UEFHeader1 (self.version, self.originator, self.timestamp) yield UEFHeader2 (self.dataset, self.startdate, self.enddate, self.transfer_id) yield from self.data yield UEFFooter ()
[docs] def format_lines (self): for line in self.lines: yield line.format ()
[docs] def write (self, file): for line in self.format_lines (): print (line, end='\r\n', file=file)