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 write (self, file):
for line in self.format_lines ():
print (line, end='\r\n', file=file)