def main(): myConfig = SkemaPackConfig( SkemaPackConfig_stdin() ) myHtmlGetter = HtmlGetter.htmlGetter() htmlResponse = myHtmlGetter.getSkemaWithPost(myConfig.get("SkemaScraper","TeacherId"),\ myConfig.get("SkemaScraper","FirstWeek"),\ myConfig.get("SkemaScraper","LastWeek")) response = htmlResponse.read() htmlScraper = SdeSkemaScraper(DateFormat = myConfig.get("SkemaScraper","Dateformat")) htmlScraper.feed(response) try: myGmailOutput = GmailOutput_API(myConfig.get("gmail","username"),myConfig.get("gmail","Password")) except : #TODO : GmailOutput_API should raise a common exception when gdata throws gdata.service.BasAuthentication print ( "login to gmail failed - please check username and password") exit() for Appointment in htmlScraper.Appointments: myGmailOutput.addAppointment(Appointment) return 0
def testGetSkemaWithPost_1(self): ''' HtmlGetter : do a POST 1 week''' myLoader = loadWeb.htmlGetter() try: self._htmlResponse = myLoader.getSkemaWithPost(3735, 43, 43, 2010) except IOError: self.fail("IOError. No internet?") parser = SdeSkemaScraper(DateFormat = "%d-%m-%Y") parser.feed( self._htmlResponse.read() ) parser.close() i = len(parser.Appointments) self.assertEqual(i,19) pass
def testGetSkemaWithPost_2(self): ''' HtmlGetter : do a POST 5 weeks ''' # TODO : can we change this into a static test? As it is now it requires net-access and fails if changes are made myLoader = loadWeb.htmlGetter() try: self._htmlResponse = myLoader.getSkemaWithPost(3735, 43, 48, 2010) except IOError: self.fail("IOError. No internet?") parser = SdeSkemaScraper(DateFormat = "%d-%m-%Y") parser.feed( self._htmlResponse.read() ) parser.close() i = len(parser.Appointments) self.assertEqual(i,75) pass
def main(): myConfig = SkemaPackConfig( SkemaPackConfig_stdin() ) myHtmlGetter = HtmlGetter.htmlGetter() htmlResponse = myHtmlGetter.getSkemaWithPost(myConfig.get("SkemaScraper","TeacherId"),\ myConfig.get("SkemaScraper","FirstWeek"),\ myConfig.get("SkemaScraper","LastWeek")) response = htmlResponse.read() htmlScraper = SdeSkemaScraper(DateFormat = myConfig.get("SkemaScraper","Dateformat")) htmlScraper.feed(response) for Appointment in htmlScraper.Appointments: print Appointment
def testGetGetterParameters(self): ''' HtmlGetter : checks if the current year is chosen, if no year is supplied ''' UserId = 3735 StartWeek = 04 EndWeek = 04 Year = datetime.datetime.now().year ExpectedParams = {'id': UserId, 'startWeek': StartWeek, 'endWeek': EndWeek, 'year': Year} myLoader = loadWeb.htmlGetter() try: myLoader.getSkemaWithPost(3735, 04, 04) except IOError: self.fail("IOError. No internet?") Params = myLoader.getParameters() self.assertEqual(ExpectedParams, Params )
def ProcessWebPageById( Id, FirstWeek, LastWeek, Year, DateFormat = "%Y/%m/%d" ): """ Utility function. Fetches webpage from the internet and parses it @param Id: The identifier of the teacher or room. @see: Input.HtmlGetter.LoadHtml.getSkemaWithPost @param FirstWeek: Start week of resulting schedule @param LastWweek: End week of resulting schedule @param Year: The year to extract data for. Defaults to current year. @param DateFormat: The dateformat. Defaults to "%Y/%m/%d" """ # TODO: The function should be moved elsewhere. myLoader = loadWeb.htmlGetter() parser = SdeSkemaScraper( DateFormat ) parser.feed(myLoader.getSkemaWithPost(Id, FirstWeek, LastWeek, Year).read()) parser.close() print myLoader.getParameters() return parser.Appointments
def testGetSkemaWithPostWithSpecifiedYear(self): ''' HtmlGetter : do a POST 1 week with the year specified''' myLoader = loadWeb.htmlGetter() try: self._htmlResponse = myLoader.getSkemaWithPost(3735, 04, 04, 2011) except IOError: self.fail("IOError. No internet?") parser = SdeSkemaScraper(DateFormat = "%d-%m-%Y") parser.feed( self._htmlResponse.read() ) parser.close() fp = open( Filename_pfl_2011_04, "r" ) Filecontent = fp.read() fp.close() parser2 = SdeSkemaScraper(DateFormat = "%d-%m-%Y") parser2.feed( Filecontent ) parser2.close() self.assertEqual(parser.Appointments, parser2.Appointments) pass
def ImportSdeSkema( config, ConfigSet = "SkemaScraper" ): ''' Config parameters: TeacherId, FirstWeek, LastWeek, Year, InputDateformat, Infile (if set, read from file) ''' # read data from file or net if config.has_option(ConfigSet, "Infile"): Data = open(config.get(ConfigSet, "Infile")).read() else: myLoader = loadWeb.htmlGetter( config.get(ConfigSet, "Site") ) Data = myLoader.getSkemaWithPost(config.get(ConfigSet, "TeacherId"), config.get(ConfigSet, "FirstWeek"), config.get(ConfigSet, "LastWeek"), config.get(ConfigSet, "Year")).read() # and process data parser = SdeSkemaScraper( config.get(ConfigSet, "InputDateformat"), Teacher = config.get(ConfigSet, "Teacher" ) ) parser.feed( Data ) parser.close() # TODO: Decide on name for this, Appointments or Events return parser.Appointments
def testBadParameters(self): ''' HtmlGetter : checks for exception on non-integers ''' myLoader = loadWeb.htmlGetter() self.assertRaises( ValueError, myLoader.getSkemaWithPost, 3735, 'text', 04, 2011 )