Re: [sqlalchemy] Testing sqlalchemy applications :p:

2013-04-23 Thread Simon King
On Tue, Apr 23, 2013 at 2:08 PM, Paradox  wrote:
>
> On 04/23/2013 04:31 PM, Simon King wrote:
>>
>> On Tue, Apr 23, 2013 at 6:54 AM, Paradox  wrote:
>>>
>>> I have a question related to sqlalchemy and testing, not sure if this is
>>> the
>>> best place to ask so let me know if I am asking here in error.
>>>
>>> I am trying to learn to write and run tests using py.test. Currently I am
>>> working on a spreadsheet scrapper that gathers data from a directory tree
>>> of
>>> spreadsheets and puts them into an sqlite database to be manipulated from
>>> there.  In any function that has a session.query object however I get a
>>> "global name 'session' not defined" error when I run the tests.  Here is
>>> an
>>> example of the code:
>>>
>>> def get_list_of_filesprocessed():
>>>  '''Look in filesprocessed table and return list of all the values in
>>> the
>>> filename field''
>>>  return [r.filename for r in session.query(FilesProcessed).all()]
>>>
>>> if __name__ == '__main__':
>>>  engine = create_engine('sqlite:///scrapper.db', echo=True)
>>>  Base = declarative_base()
>>>  Session = sessionmaker(bind=engine)
>>>  session = Session()
>>>
>>> How can I make the session available to the tests when they are run?  I
>>> have
>>> tried creating a decorator in the test file to initialize the session to
>>> no
>>> avail.  Any hints are appreciated.
>>>
>>> thomas
>>>
>> I haven't used py.test, but it almost certainly doesn't run the "if
>> __name__ == '__main__':" block of your test file, so the session is
>> never being created.
>>
>> You could create the session in the test function itself, but another
>> option, particularly if you have the same repetitive steps to perform
>> for multiple tests, is to create a setup function. I see py.test has a
>> number of options for doing this:
>>
>>http://pytest.org/latest/xunit_setup.html#xunitsetup
>>
>>http://pytest.org/latest/fixture.html
>>
>> Hope that helps,
>>
>> Simon
>
> I appreciate the input.  I have put a setup fixture in the test file and
> that didn't work.  I had thought py.test ran the script like it was running
> from the command line but you are probably correct - it is only importing
> the specific function and not running the "if __name__" line at all.
>
> What do sqlalchemy users usually use for testing?  I am willing to learn
> other ways to do this that are more suited to the packages.
>
> thomas
>

When you say you created a setup fixture but it didn't work, what
didn't work exactly?

For example, if you just did something like this:

def setup():
engine = ...
Session = ...
session = Session()

...then that won't work because session is a local variable inside the
setup function. At a minimum you'd need to put something like "global
session" at the beginning of the function.

Simon

PS. In answer to your question I use nosetests, but I think both
packages are fairly similar.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Testing sqlalchemy applications :p:

2013-04-23 Thread Сергей Панов
What do sqlalchemy users usually use for testing?  I am willing to learn
other ways to do this that are more suited to the packages.

thomas

we use unittest
you can see how to setup session here
https://github.com/vice-versa/sacrud/blob/master/sacrud/tests/__init__.py


   
http://pytest.org/latest/**xunit_setup.html#xunitsetup
>>
>>
>> http://pytest.org/latest/**fixture.html
>
>
  but a think py.test can do all the same



-- 
Best Regards, Panov Sergey

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Testing sqlalchemy applications :p:

2013-04-23 Thread Paradox


On 04/23/2013 04:31 PM, Simon King wrote:

On Tue, Apr 23, 2013 at 6:54 AM, Paradox  wrote:

I have a question related to sqlalchemy and testing, not sure if this is the
best place to ask so let me know if I am asking here in error.

I am trying to learn to write and run tests using py.test. Currently I am
working on a spreadsheet scrapper that gathers data from a directory tree of
spreadsheets and puts them into an sqlite database to be manipulated from
there.  In any function that has a session.query object however I get a
"global name 'session' not defined" error when I run the tests.  Here is an
example of the code:

def get_list_of_filesprocessed():
 '''Look in filesprocessed table and return list of all the values in the
filename field''
 return [r.filename for r in session.query(FilesProcessed).all()]

if __name__ == '__main__':
 engine = create_engine('sqlite:///scrapper.db', echo=True)
 Base = declarative_base()
 Session = sessionmaker(bind=engine)
 session = Session()

How can I make the session available to the tests when they are run?  I have
tried creating a decorator in the test file to initialize the session to no
avail.  Any hints are appreciated.

thomas


I haven't used py.test, but it almost certainly doesn't run the "if
__name__ == '__main__':" block of your test file, so the session is
never being created.

You could create the session in the test function itself, but another
option, particularly if you have the same repetitive steps to perform
for multiple tests, is to create a setup function. I see py.test has a
number of options for doing this:

   http://pytest.org/latest/xunit_setup.html#xunitsetup

   http://pytest.org/latest/fixture.html

Hope that helps,

Simon
I appreciate the input.  I have put a setup fixture in the test file and 
that didn't work.  I had thought py.test ran the script like it was 
running from the command line but you are probably correct - it is only 
importing the specific function and not running the "if __name__" line 
at all.


What do sqlalchemy users usually use for testing?  I am willing to learn 
other ways to do this that are more suited to the packages.


thomas

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Testing sqlalchemy applications

2013-04-23 Thread Simon King
On Tue, Apr 23, 2013 at 6:54 AM, Paradox  wrote:
> I have a question related to sqlalchemy and testing, not sure if this is the
> best place to ask so let me know if I am asking here in error.
>
> I am trying to learn to write and run tests using py.test. Currently I am
> working on a spreadsheet scrapper that gathers data from a directory tree of
> spreadsheets and puts them into an sqlite database to be manipulated from
> there.  In any function that has a session.query object however I get a
> "global name 'session' not defined" error when I run the tests.  Here is an
> example of the code:
>
> def get_list_of_filesprocessed():
> '''Look in filesprocessed table and return list of all the values in the
> filename field''
> return [r.filename for r in session.query(FilesProcessed).all()]
>
> if __name__ == '__main__':
> engine = create_engine('sqlite:///scrapper.db', echo=True)
> Base = declarative_base()
> Session = sessionmaker(bind=engine)
> session = Session()
>
> How can I make the session available to the tests when they are run?  I have
> tried creating a decorator in the test file to initialize the session to no
> avail.  Any hints are appreciated.
>
> thomas
>

I haven't used py.test, but it almost certainly doesn't run the "if
__name__ == '__main__':" block of your test file, so the session is
never being created.

You could create the session in the test function itself, but another
option, particularly if you have the same repetitive steps to perform
for multiple tests, is to create a setup function. I see py.test has a
number of options for doing this:

  http://pytest.org/latest/xunit_setup.html#xunitsetup

  http://pytest.org/latest/fixture.html

Hope that helps,

Simon

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Getting the entity name, ideally the ORM class in the shard selector?

2013-04-23 Thread Rob Fowler
 

So anyone else who asks this knows, the following works:

A query with just a column:

qq = session.query(Configuration.name)

Normally I would loop, but in this case, taking just the first column:

yy = qq.column_descriptions[0]['expr']

yy.expression.table.name

gives: ''configurations”


 Configuration.__table__.name

gives: ''configurations”


 All good, so we can compare on the underlying table names.


 Sorry to keep asking questions. If we wanted to do this using the ORM 
objects, is there a way to get the 'Configuration' object to compare to and 
not compare the strings with the underlying tables?


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.