1. We just do it in the controller as a function . Try an .insert but 
   .bulk_insert should be fine for individual records.
   2. You may need a path to find the file.

Following code is cut, pasted and sanitised from a working controller.
(for illustration only)

## initiates getting files from a remote server
def GET():
    getfile('_000000_S_BTRI')
    getfile('_ST0000_S_ELST')


## reads remote files and writes to a folder on the local server
def getfile(f3):
    import datetime
    from datetime import date, timedelta
    import urllib2
    import contextlib
    import requests
    import time
    f0 = 'http://mcs...../getfile.aspx?filename='
    dr = 15 #target range

    today = datetime.date.today()
    for x in range(dr):
        start = today-timedelta(days=x)
        f1 = start.strftime('%Y%m%d')
        path = os.path.join(request.folder, 'data//')
        f4 = '.xml'
        file1 = f0 + f1 + f3 + f4
        try:
            u = urllib2.urlopen(file1)
        except urllib2.HTTPError, e:
            print str(e)
        else:
            if not 'alert' in u.read(100):
                rf = requests.get(file1)
                wf = open(path + f1 + f3 + f4, 'w')
                for line in rf:
                    newline = line
                    wf.write(newline)
                wf.close()


# scans folder and writes db records of files found
def update_PROCESS():
    import os
    path = os.path.join(request.folder, 'data\\')
    p1 = {}
    d1 = {}
    d2 = {}
    for files in os.listdir(path):
        if files.endswith(".xml"):
            p1 = path + files
            dd1 = {'FILE': p1}
            d1.update(dd1)
            dd2 = {'PREFIX': p1[-8:-4]}
            d1.update(dd2)
            d1.update({'UPDATED':0})
            d1.update({'RETRIEVED':datetime.now()})
            db1.PROCESSING.bulk_insert([d1])
    db.commit()


# processes unprocessed files
def PROCESS():
    q = db1(db1.PROCESSING.UPDATED == 0).select()
    if q:
        for row in q:
            f1 = row.FILE
            if row.PREFIX == 'ASUM':
                try:
                    attend(f1)
                    d1 = db1.PROCESSING.update_or_insert((db1.PROCESSING.id 
== row.id), UPDATED = 1, PROCESSED=datetime.now())
                except:
                    d1 = db1.PROCESSING.update_or_insert((db1.PROCESSING.id 
== row.id), UPDATED = 2)
                db1.commit()


# reads file, create dict, performs bulk_insert
def atten(f1):
    from xml.etree import ElementTree
    with open(f1, 'rt') as f:
        try:
            tree = ElementTree.parse(f)
        except:
            pass
        else:
            dh = {}
            dd = {}

            def onlyascii(char):
                if ord(char) < 32 or ord(char) > 127: return ''
                else: return char

            for node in tree.iter():
                if node.tag == 'ATTEN':
                    dh = node.attrib

                if node.tag == 'RECORD':
                    dd = node.attrib
                    remap = 
{'DATE':'RECORD_DATE','TOTAL':'RECORD_TOTAL','PUBLIC':'RECORD_PUBLIC','MEMS':'RECORD_MEMS','COSE':'RECORD_COSE'}
                    dd = dict((remap[key], value) for (key, value) in 
dd.items())
                    dd.update(dh)
                    db1.ATTEN.bulk_insert([dd])
                    dd = {}
            db1.commit()


-- 
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/groups/opt_out.

Reply via email to