def repy_data(): """Download raw REPY data from Technion, convert it to almost-unicode (numbers are reversed)""" REPY_URI = "http://ug.technion.ac.il/rep/REPFILE.zip" if prefs.options.usecache: t = open("REPFILE.zip") else: try: t = tempfile.TemporaryFile() t.write(urllib.urlopen(REPY_URI).read()) except: ttime.warning(_("Network download of REPFILE.zip failed, " \ "trying local")) try: t = open("REPFILE.zip") except: raise _("REP file download has failed") try: z = zipfile.ZipFile(t) except: raise _("REP file is not a valid zip file!") repy_data = '\n'.join([ bidi_flip(unicode(x).rstrip('\r')) for x in unicode(z.read('REPY'), 'cp862').split('\n') ]) z.close t.close return repy_data
def __init__(self): gui.ProgressDialog(_("Downloading REPY data"), self.get_data, self.start_main_window) gtk.main()
def start_main_window(self): logic.repy.parse_repy_data() print _("Data has been downloaded, starting main window") self.main_window = gui.MainWindow()
def parse_raw_course(header, body): # This is an interesting course to parse, start with it body = u""" | מורה אחראי : פרופ. ד.הרשקוביץ | | ----------- | | מועד ראשון :יום ד' 25/07/07 | | ----------- | | מועד שני :יום א' 14/10/07 | | ----------- | | 1.מתרגלת אחראית: גב' מרינה גרוזד. | |מס. ++++++ | |רישום | | הרצאה: ג'14.30-12.30 307 אולמן | | מרצה : פרופ. ד.הרשקוביץ | | ----- | | | | 11 תרגיל: א'15.30-14.30 601 אולמן | | מתרגל: גב נ.לפל | | ----- | | | | 12 תרגיל: א'15.30-14.30 701 אולמן | | מתרגל: 0 א.שיפמן | | ----- | | | | 13 תרגיל: ד'15.30-14.30 504 אולמן | | מתרגל: גב ג.חדיף-נגרי | | ----- | |מס. ++++++ | |רישום | | הרצאה: א'12.30-10.30 605 אולמן | | מרצה : פרופ/ח מ.פוליאק | | ----- | | | | 21 תרגיל: ג'13.30-21.30 601 אולמן | | מתרגל: גב מ.גרוזד | | ----- | | | | 22 תרגיל: ד'10.30-9.30 601 אולמן | | מתרגל: גב נ.ציפיניוק | | ----- | | | | 23 תרגיל: ד'15.30-14.30 601 אולמן | | מתרגל: ד"ר י.פוגרבניאק | | ----- | |מס. ++++++ | |רישום | | הרצאה: ה'10.30-8.30 305 אולמן | | מרצה : גב ד.אבידן | | ----- | | | | 31 תרגיל: ב'15.30-14.30 201 אולמן | | מתרגל: גב א.פודולני | | ----- | | | | 32 תרגיל: ג'14.30-13.30 306 אולמן | | מתרגל: גב נ.זילברשטיין | | ----- | | | | 33 תרגיל: ג'15.30-14.30 501 אולמן | | מתרגל: גב נ.זילברשטיין | | ----- | |מס. ++++++ | |רישום | | הרצאה: ב'14.30-12.30 307 אולמן | | מרצה : ד"ר י.כהן | | ----- | | | | 41 תרגיל: ד'16.30-15.30 706 אולמן | | מתרגל: מר ג.שפירו | | ----- | | | | 42 תרגיל: ה'15.30-14.30 706 אולמן | | מתרגל: גב י.נץ | | ----- | | | | 43 תרגיל: ה'15.30-14.30 457 אולמן | | מתרגל: מר א.ניסנבוים | | ----- | |מס. ++++++ | |רישום | | הרצאה: ב'12.30-10.30 305 אולמן | | מרצה : גב ד.אבידן | | ----- | | | | 51 תרגיל: ד'10.30-9.30 604 אולמן | | מתרגל: ד"ר י.פוגרבניאק | | ----- | | | | 52 תרגיל: ד'10.30-9.30 706 אולמן | | מתרגל: גב ג.ליטבינוב | | ----- | | | | 53 תרגיל: ד'15.30-14.30 701 אולמן | | מתרגל: 0 א.יודוביץ | | ----- | |מס. ++++++ | |רישום | | הרצאה: ג'14.30-12.30 302 אולמן | | מרצה : ד"ר י.פוסטילניק | | ----- | | | | 61 תרגיל: א'12.30-11.30 311 אולמן | | מתרגל: גב ג.ליטבינוב | | ----- | | | | 62 תרגיל: א'12.30-11.30 456 אולמן | | מתרגל: גב ל.גיטלמן | | ----- | | | | 63 תרגיל: ד'15.30-14.30 301 אולמן | | מתרגל: גב מ.גרוזד | | ----- |""" m = re.match(COURSE_HEADER_REGEX, header) course_id = m.groupdict()['course_id'] course_name = m.groupdict()['course_name'].strip() academic_points = float(m.groupdict()['academic_points']) hours = [] arr = m.groups() for i in range(2,len(arr)-1): hours.append(arr[i].strip()) # print course_id, course_name, academic_points, str(hours), '!' # TODO: The state-machine :/ current_lecture_group_number = 1 print body m = re.match(RAW_COURSE_REGEX, body) try: print m.groupdict() for i,j in m.groupdict().items(): print i,j except: error(_(u"Error parsing course body in %s %s. Body was:\n<tt>%s</tt>") % (course_id, course_name, body)) raise error( "Parsing course body in %s %s." "Body was: \n<tt>%s</tt>\n" "Retrieved data: %s" % (course_id, course_name, body, "\n".join([ str(k) + ": " + str(v) for k,v in m.groupdict().items()]))) raise return (header, body)