thanks Michael. I took a look at README.unittests, but had some difficulties running them with ironpython (ipy setup.py test fails, and nosetests.exe doesn't allow you to specificy an interpreter). Still, i found some help on the interwebs, as well as in the nose __init__.py. eventually i was able to run the tests by running the following script:
import sys, os #import ironclad #not needed. i think. sys.path.append(r'C:\Python26\lib') #now load Jeff Hardys sqlite dll which is in sqlite folder (sqlite not supported on ipy) sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)),'sqlite')) import clr clr.AddReference('IronPython.SQLite') #load plugin from sqlalchemy.test.noseplugin import NoseSQLAlchemy from nose import main if __name__ == '__main__': main(addplugins=[NoseSQLAlchemy()]) cf http://stackoverflow.com/questions/3198500/how-to-use-nose-with-ironpython/3223278#3223278 Here's the summary: *Ran 1862 tests in 141.873s > FAILED (SKIP=7, errors=1483, failures=52) > * oh dear! and yet, it seemed to be working pretty well until i ran into this problem with mutli-table mapping. Also, Jeff Hardy's porting of sqlite is still in development, so it may be the cause of a few errors... might take a look at On Sat, Jul 10, 2010 at 6:11 PM, Michael Bayer <mike...@zzzcomputing.com>wrote: > > On Jul 10, 2010, at 12:07 PM, Harry Percival wrote: > > OK, just in case anyone else is foolishly trying to run SQLA on > ironpython, here's the workaround I've found: > > instead of attempting to use the mapper directly on the join: > > j = join(movies_table,md_table).join(directors_table) >> mapper(MoviesAndDirectors,j) #ipy errors here >> > > use a mapper on a select based on the join: > > >> mapper(MoviesAndDirectors,j.select(use_labels=True).alias('moviesanddirectors')) >> > > seems to be working ok for now. > > one final, polite plea - how can i run the sqla test suite, to see what > other bugs might be lurking? > > > running the tests is fully described in README.unittests > > > > > > cheers, > Harry > > > On Thu, Jul 8, 2010 at 10:52 AM, Harry Percival > <harry.perci...@gmail.com>wrote: > >> Here's the source code of my test - let me know if I'm doing anything >> wrong here >> >> from sqlalchemy import create_engine >> from sqlalchemy.orm import mapper >> from sqlalchemy.sql.expression import join >> from sqlalchemy.orm.session import sessionmaker >> from sqlalchemy.schema import MetaData >> import traceback >> >> try: >> import clr >> import os >> import sys >> >> sys.path.append(os.path.join(os.path.abspath(os.path.curdir),'sqlite')) >> clr.AddReference('Ironpython.Sqlite') #need this for sqlite to work >> on ironpython. refers to a dll in zip file. >> except: >> #not ipy >> pass >> #from sqlalchemy.ext.sqlsoup import SqlSoup #sqlsoup also errors >> >> engine = create_engine('sqlite:///moviedemo_simple.db3') #moviedemo file >> also in zip file. >> Session = sessionmaker(bind=engine) >> class Movies(object): >> pass >> class Directors(object): >> pass >> class Genres(object): >> pass >> class MoviesAndDirectors(object): >> pass >> >> meta = MetaData() >> meta.reflect(bind=engine) >> all_tables = meta.tables >> >> movies_table = all_tables['movies'] >> genres_table = all_tables['genres'] >> directors_table = all_tables['directors'] >> md_table = all_tables['movie_directors'] >> >> mapper(Movies,movies_table) >> mapper(Directors,directors_table) >> mapper(Genres,genres_table) >> >> session = Session() >> print session.query(Movies).all()[0] >> print session.query(Directors).all()[0] >> >> j = join(movies_table,md_table).join(directors_table) >> try: >> >> mapper(MoviesAndDirectors,j)#ipy errors here >> mad1 = session.query(MoviesAndDirectors).all()[0] >> print mad1 >> except Exception, e: >> print 'caught exception',e >> last_error = e >> traceback.print_exc() >> >> how can i run the sqlalchemy test suite? I see it needs nose, i've >> installed that. but i'm not clear what command to run to launch tests. >> >> rgds, >> harry >> >> >> On Tue, Jul 6, 2010 at 6:40 PM, Harry Percival >> <harry.perci...@gmail.com>wrote: >> >>> Hi Michael, >>> >>> thanks for replying - the reason I attached a zipfile is because sqlite >>> isn't supported natively on ironpython, so I've had to include the source >>> and a dll for it. So, if you did have time to open it up and take a peek, >>> I'd very much appreciate it. >>> >>> Alternatively, how can I run the sqla unit tests? >>> >>> >>> On Tue, Jul 6, 2010 at 3:56 PM, Michael Bayer >>> <mike...@zzzcomputing.com>wrote: >>> >>>> >>>> On Jul 6, 2010, at 4:18 AM, Harry Percival wrote: >>>> >>>> Hi, >>>> >>>> I've got an error which occurs in ironpython but not in cpython. can >>>> anyone replicate? See attached. I'm using IPY 2.6. >>>> >>>> *<string>:1: DeprecationWarning: object.__init__() takes no parameters >>>>> for type _keyed_weakref >>>>> <string>:1: DeprecationWarning: object.__init__() takes no parameters >>>>> for type KeyedRef >>>>> <Movies object at 0x0000000000000034> >>>>> <Directors object at 0x0000000000000038> >>>>> caught exception 'NoneType' object has no attribute 'set' >>>>> Traceback (most recent call last): >>>>> File "D:\workspace\resolver\test_multitable.py", line 54, in <module> >>>>> mapper(MoviesAndDirectors,j)#ipy errors here >>>>> File "D:\workspace\resolver\sqlalchemy\orm\__init__.py", line 818, in >>>>> mapper >>>>> return Mapper(class_, local_table, *args, **params) >>>>> File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 210, in >>>>> __init__ >>>>> self._configure_properties() >>>>> File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 563, in >>>>> _configure_properties >>>>> self._configure_property(column_key, >>>>> File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 755, in >>>>> _configure_property >>>>> prop.instrument_class(self) >>>>> File "D:\workspace\resolver\sqlalchemy\orm\properties.py", line 87, in >>>>> instrument_class >>>>> attributes.register_descriptor( >>>>> File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1424, >>>>> in register_descriptor >>>>> manager.instrument_attribute(key, descriptor) >>>>> File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1012, >>>>> in instrument_attribute >>>>> self.install_descriptor(key, inst) >>>>> File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1054, >>>>> in install_descriptor >>>>> setattr(self.class_, key, inst) >>>>> File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 151, >>>>> in __set__ >>>>> self.impl.set(instance_state(instance), instance_dict(instance), >>>>> value, None) >>>>> AttributeError: 'NoneType' object has no attribute 'set' >>>>> * >>>> >>>> >>>> >>>> >>>> does this look like a bug with ironpython? if so, I'll report it to the >>>> developers, but i need a little more help tracking down exactly what's >>>> going >>>> wrong... >>>> >>>> >>>> its likely some slightly different behavior in ironpython regarding >>>> descriptors. If you don't have a lot of SQLA experience, it would be >>>> extremely difficult to get SQLA running with a new Python interpreter. >>>> Getting it to run on Jython took a huge amount of effort and weeks/months >>>> of >>>> bughunting, both in SQLA and Jython itself. We currently don't have any >>>> resources to get it to work on IronPython as well. >>>> >>>> >>>> >>>> For bonus points: In the attached database, there's a many-to-many >>>> relationship between 'movies' and 'directors' via a simple joining table. >>>> How come SQLA isn't able to figure this out on its own and let me just >>>> join(movies_table, directors_table)? It seems unneccesary to have to >>>> specify >>>> the extra join(movies_table,md_table).join(directors_table)... >>>> >>>> >>>> I don't generally open full zipfiled applications, so if you want to >>>> attach a succinct, single-file code example that would help. If you have >>>> relationships between two classes, the relationship() function is used to >>>> establish that, which would allow query.join(Movie.directors) to generate >>>> the joins automatically. >>>> >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sqlalchemy" group. >>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com> >>>> . >>>> For more options, visit this group at >>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>> >>> >>> >>> >>> -- >>> ------------------------------ >>> Harry J.W. Percival >>> ------------------------------ >>> Italy Mobile: +39 389 095 8959 >>> UK Mobile: +44 (0) 78877 02511 (may be turned off) >>> Skype: harry.percival >>> Email: harry.perci...@gmail.com >>> >> >> >> >> -- >> ------------------------------ >> Harry J.W. Percival >> ------------------------------ >> Italy Mobile: +39 389 095 8959 >> UK Mobile: +44 (0) 78877 02511 (may be turned off) >> Skype: harry.percival >> Email: harry.perci...@gmail.com >> > > > > -- > ------------------------------ > Harry J.W. Percival > ------------------------------ > Italy Mobile: +39 389 095 8959 > UK Mobile: +44 (0) 78877 02511 > Skype: harry dot percival > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- ------------------------------ Harry J.W. Percival ------------------------------ Italy Mobile: +39 389 095 8959 UK Mobile: +44 (0) 78877 02511 Skype: harry dot percival -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.