Merge pull request #11 from seanderickson/master

UI and parsing updates
implements label-addressable row fields

for example, if the headers (aka "labels") row is the second one, and
the following rows are the data, the following prints the 'xyz'
column:

    for sh in Workbook(path_to_xls):
        ta = sh.astable(slice(2, None), 1)
        for ro in ta:
            print ro['xyz']
Merge branch 'master' of https://github.com/hmslincs/hmslincs
decrufting
internal refactoring of xls2py
UI updates:
* tabbed panel
* named URLs
* Cell model created/migrated ( use mangage.py migrate example to
update)
* sample sdf file
* makeTestData renamed to importCells
Merge pull request #12 from seanderickson/master

latest updates
sampledata/reagents.sdf

I got this file as attachment "HMS_LINCS-1.sdf" to email from Sean on 120726H.
1-char change to sampledata/reagents.sdf

Changed the encoding of one non-ASCII character (the "TM" superscript)
to UTF-8.
Added .gitignore to itself...

...and renamed it .gitignore.in.  Now .gitignore is no longer under
git control, so it's available for local working directory
customizations.  .gitignore.in can be thought as a starting template
for the local version of .gitignore.  (After applying this commit to
your working directory, just copy .gitignore.in to .gitignore.  The
only changes I foresee for .gitignore.in would be new types of
automatically generated files, so I expect that this file won't change
very often.)
naive sdf parser

VERY LIGHTLY TESTED!

Example:

    for mol_iter in parse_sdf(sdf_string):
        _, preamble = next(mol_iter)
        print 'TITLE: %s' % preamble.splitlines()[0]
        for tag, value in mol_iter:
            print '%s: %s' % (tag, value.strip())
        print
<??? puzzled by git... ???>

Most of these instructions make no sense to me

  # Please enter a commit message to explain why this merge is necessary,
                                                            ????????????
  # especially if it merges an updated upstream into a topic branch.
                               ????????????????        ????????????
setglobals.py: utility to set script params

ONLY LIGHTLY TESTED!

setglobals.setglobals supports the setting of script globals from the
command line.  For example:

    -----------------------------------------------------------------
    import setglobals as sg
    sg.setglobals(dict(DEBUG=False, DELIM=u',', ENCODING = u'utf8'))

    if DEBUG:
        print (u"DELIM='%s'" % DELIM).encode(ENCODING)
    print DELIM.join([unicode(i) for i in range(5)]).encode(ENCODING)
    print 'done'
    -----------------------------------------------------------------

If the snippet above is saved in test_sg.py, one can run, e.g.,

    % DELIM='|' python test_sg.py
    0|1|2|3|4
    done
    % DELIM= DEBUG=1 python test_sg.py
    DELIM=''
    01234
    done
    % python test_sg.py
    0,1,2,3,4
    done

IOW, setglobals.setglobals is an alternative to argparse/optparse that
may be more convenient during rapid script development, before the
command-line interface is finalized.

One important limitation is setglobals.setglobals assigns only string
values.
refactoring/decrufting/fixing xls2py

Earlier commits (08089b8fdb52a45efd3a3442d07b55b3b36b02c0 and
f91a48e016e2fb557f296e61f87642769a542354) were premature.  They should
both be consolidated with this one.
minor bugfix

latent name collision in test_xls2py.py
minor tweaks to test_xls2py
tests for setglobals
Add Cells table to the proof of concept view example app
Merge pull request #13 from seanderickson/master

Add Cells table to the proof of concept view example app
fixes small bug in test_xls2py

(an overly lax exception handler)