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.

Reply via email to