Hi, I have been working on a little project to transform excel docs
(actually them saved as csv files) into SQLAlchemy objects.
 Of course this is tailored for my own database which I need to import
but I have been splitting it into api more and more and eventually
plan to release it as some configurable importer for SA. But first I
need to clean up the code!

currently I have this type of configuration.

    _excel_to_field = {
    'First Name' : 'first_name',
    'Last Name' : 'last_name',
    'Address' : 'address',
    'City' : 'city',
    'State' : 'state',
    'Zip' : 'zip_code',
    }

and the bulk of the system is run as

        for k,v in row:
            if not k in [NoModelField,NoCSVField]:
                if v:
                    log.debug('Adding Field %s:%s' % (k,v))
                else:
                    log.warning('Adding Empty Field for %s at line %i'
% (k,index))
                setattr(contact,k,v)
            else:
                log.warning("Field not accounted for (%s,%s)" % (k,v))

so currently that for is very big for (see below)

So in order to make code a lot more readable I was thinking I could
use the syntax SA uses for filter and such so I can write the
_excel_to_field as
    _excel_to_field = {
    'First Name' : 'Contact.first_name',
    'Last Name' : 'Contact.last_name',
    'Address' : 'Location.address',
    'City' : 'Location.city',
    'State' : 'Location.state',
    'Zip' : 'Location.zip_code',
    }
please note the Location obj is a fabrication of this email

but how can I replace the setatrr call? I guess I could parse things
around but I assume there is some kind of api in SA to accomplish
this.

My plan is to add two more parameter to this dict, #1 a typeConverter
#2 a headerReader, I'll explain those in due time. I'm working on
transforming the forloop into a more elegant forloop with a callback.
So the final plan is to have something like this

    _excel_to_field = {
    'First Name' : 'Contact.first_name',string,
    'Last Name' : 'Contact.last_name','string',
    'Address' : 'Location.address',address,
    'City' : 'Location.city',string
    'State' : 'Location.state',state
    'Zip' : 'Location.zip_code',int
    }

this third callback will be either a build-in, I have several already
for date,float,us_money,etc also more complex ones like always create
(adds a new record all the time) and query_create (looks for one if
that fails create it) fields but you can code your own as they are
simply python functions with a common interface. Ideally this will
grow into a number big number of defaults that will live inside the
package. So you will never have to code it yourself just look for
them, but I want to do this string-python formatting First.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to