Why can't you use the scheduler for this? You can put your code in a function in a module and then import it into a model file to make it available to the scheduler.
Anthony On Wednesday, May 7, 2014 4:38:52 PM UTC-4, Spencer Underwood wrote: > > Greetings, > > This might be a really dumb or simple question or might better suited to > ask in the IRC channel, but I can't seem to find an answer to this anywhere > on google. I've been trying to test various bits of code to see how it runs > on the web2py framework but without tying it to a specific view. Does > anyone know how to run a script / function in a module based off of events > such as a button press or a input command to the web shell? > > I made a simple function in a module which, provided a valid API Key, > Verification Code and Character ID, parses and stores a list of mail > messages pulled from the > MailMessage<http://wiki.eve-id.net/APIv2_Char_MailMessages_XML>function made > available by the EVE Online API Server. There is also a > function which will do the same as before but for every valid API Key, > Verification Code and Character ID stored in the database all at once. I'm > working on a means to properly handle the other API calls > available<http://wiki.eve-id.net/APIv2_Page_Index>and would like to run those > on a semi-regular basis, but haven't currently > achieved a working result yet. I intended to invoke these method when a > user logs into the site, as well as roughly once every twelve hours, to > keep a relatively up-to-date database filled with mails for EVE Online. > > All relevant ID columns for things like Character ID, Message ID, etc... > from the API server are unique so a quick IS_NOT_IN_DB and a unique key > constraint should stop any and all duplicates. I guess later I could log > attempts to enter a duplicate value, but right now it's not a concern. > > From my understanding, any code in the Model or Controller folders will be > executed each time the page is viewed. This works well for a lot of things, > but doesn't seem optimal for relatively slow net and database code. The > Scheduler seems like it could be useful for this, but that doesn't seem > like it should be placed in a model or a controller file. > > Here is what I've used so far to read messages and pull them to a > database, it's pretty crude but I just wanted a working example to build > off of later. > > the EVE API class is a python library (found > here<https://github.com/ntt/eveapi>) > which does the job of parsing the XML data returned from the API server > into an iterable data structure. > > # Put your userID and apiKey (full access) here before running this script. > YOUR_KEYID = [redacted] > YOUR_VCODE = "[redacted]" > YOUR_CHARACTERID=[redacted] > > from os.path import join, exists > from httplib import HTTPException > from gluon.sql import DAL, Field > from gluon.validators import * > > import logging > > import eveapi > import datetime > > api = eveapi.EVEAPIConnection() > db = DAL('sqlite://test3.sqlite') > > #---------------------------------------------------------------------------- > message = db.define_table('message', > Field('messageID','integer', unique=True), > Field('header','string'),Field('body','string'), > Field('dateTimeSent','datetime')) > > # /account/Characters.xml.aspx > getMailHeader = api("/char/MailMessages", keyID=YOUR_KEYID, > vCode=YOUR_VCODE, characterID=YOUR_CHARACTERID) > > listOfMessageID = [] > listOfHeaders = [] > > result = getMailHeader.messages.SortedBy("sentDate") > for s in result: > try: > db.message.insert(messageID=s.get("messageID"), header=s.get("title"), > dateTimeSent = datetime.datetime.utcfromtimestamp( s.get("sentDate") ) , > body="") > listOfMessageID.append(s.get("messageID")) > except Exception as e: > logging.warning("Message with ID of %s already exists in database", > s.get("messageID")) > > if len(listOfMessageID) > 0: > getMailBody = api("/char/MailBodies", keyID=YOUR_KEYID, vCode=YOUR_VCODE, > characterID=YOUR_CHARACTERID, ids = ','.join([ str(i) for i in > listOfMessageID]) ) > MailMessages = getMailBody.messages.SortedBy("messageID") > > for s in MailMessages: > mailID = s.get("messageID") > mailBody = s.get("data").encode("utf-8") > db( db[message].messageID==mailID).update(**{"body":mailBody}) > #print s.__str__().encode("utf-8") > #print > > for row in db(message).select(): > print row > print > db.commit() > > Thanks, > Spencer Underwood > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.