Okay, I have one test failed for automap : 

~/sqlalchemy $ ./sqla_nose.py test.ext.test_automap
.....E......
======================================================================
ERROR: 
test.ext.test_automap.AutomapTest.test_relationship_explicit_override_m2o
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/pi/sqlalchemy/test/ext/test_automap.py", line 55, in 
test_relationship_explicit_override_m2o
    Base.prepare()
  File "/home/pi/sqlalchemy/lib/sqlalchemy/ext/automap.py", line 777, in 
prepare
    generate_relationship)
  File "/home/pi/sqlalchemy/lib/sqlalchemy/ext/automap.py", line 956, in 
_relationships_for_fks
    util.warn(msg)
  File "/home/pi/sqlalchemy/lib/sqlalchemy/util/langhelpers.py", line 1292, 
in warn
    warnings.warn(msg, exc.SAWarning, stacklevel=2)
SAWarning: Address relationship name conflict: users

----------------------------------------------------------------------
Ran 12 tests in 27.450s

FAILED (errors=1)

Le lundi 4 janvier 2016 01:06:42 UTC+2, Michael Bayer a écrit :
>
>
>
> On 01/03/2016 02:43 PM, yoch....@gmail.com <javascript:> wrote: 
> > I've added theses lines here 
> > <
> https://bitbucket.org/zzzeek/sqlalchemy/src/c7d6c667b53d96a65e0dedcb83c098e03d4c7453/lib/sqlalchemy/ext/automap.py?at=master&fileviewer=file-view-default#automap.py-953>
>  
>
> > : 
> > 
> > | 
> >                     ifrelationship_name inmap_config.properties: 
> >                         msg ="%s relationship name conflict: 
> > %s"%(local_cls.__name__,relationship_name) 
> >                         util.warn(msg) 
> > | 
> > 
> > and it produces warnings as excepted : 
> > 
> >>>> from dbmodels import * 
> > /usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/automap.py:961: 
> > SAWarning: *thermostats relationship name conflict: dispositif_ref* 
> >   util.warn(msg) 
> > 
> > Whats wrong with this approach ? Is there any case that overwrite 
> > relationship_name in map_config.properties is correct ? 
>
> please run the test suite and observe the tests that fail with this 
> approach, specifically those which test the behavior of being able to 
> specify an explicit mapping with existing relationships. 
>
>
>
>
> > 
> > 
> > Le dimanche 3 janvier 2016 19:09:04 UTC+2, Michael Bayer a écrit : 
> > 
> > 
> > 
> >     On 01/03/2016 07:00 AM, yoch....@gmail.com <javascript:> wrote: 
> >     > OK, thanks you. 
> >     > 
> >     > I think it's a good idea to issue a warning in such cases. 
> > 
> >     unfortunately this is a difficult situation to detect since it is a 
> >     valid use case to present a mapped class that already has 
> relationships 
> >     present on it, which will not be overridden.   Additional 
> bookkeeping 
> >     would need to be added to the automap process to track all those 
> class/ 
> >     name combinations that were locally added without coming up with 
> false 
> >     positives. 
> > 
> > 
> > 
> >     > 
> >     > Best regards 
> >     > 
> >     > Le samedi 2 janvier 2016 19:18:12 UTC+2, Michael Bayer a écrit : 
> >     > 
> >     > 
> >     > 
> >     >     On 01/02/2016 11:38 AM, yoch....@gmail.com <javascript:> 
> wrote: 
> >     >     > Thank you. 
> >     >     > 
> >     >     > I hesitate between using this way, or explicitly specify the 
> >     >     relationship 
> >     >     > (is this a good idea? In my test I found 3 relations after 
> >     >     prepare()) : 
> >     > 
> >     >     it's fine to do that.  Automap is still building its own 
> >     >     relationship as 
> >     >     well which is why you end up with three of them.  The 
> >     >     generate_relationship hook can be used to return None in those 
> >     cases 
> >     >     where you don't want automap to generate a relationship: 
> >     >     
> >     
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship>
>  
>
> > 
> >     >     
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship>>
>  
>
> > 
> >     > 
> >     > 
> >     > 
> >     >     > 
> >     >     > | 
> >     >     > classThermostat(Base): 
> >     >     >     __tablename__ ='thermostats' 
> >     >     >     idbuiltin =Column(Integer,ForeignKey('device.id 
> >     <http://device.id> 
> >     >     <http://device.id>')) 
> >     >     >     idthermometer =Column(Integer,ForeignKey('device.id 
> >     <http://device.id> 
> >     >     <http://device.id>')) 
> >     >     >     thermometer 
> >     =relationship(Dispositif,foreign_keys=idthermometer) 
> >     >     >     builtin =relationship(Dispositif,foreign_keys=idbuiltin) 
> >     >     > | 
> >     >     > 
> >     >     > 
> >     >     > Another interesting point is how to detect this error to 
> >     warn. I 
> >     >     tried 
> >     >     > to use name_for_scalar_relationship() for that, but I don't 
> kow 
> >     >     how to 
> >     >     > get the relationships mapper. 
> >     >     > 
> >     >     > Best regards 
> >     >     > 
> >     >     > Le vendredi 1 janvier 2016 18:27:14 UTC+2, Michael Bayer a 
> >     écrit : 
> >     >     > 
> >     >     >     you need to use the name generation functions 
> >     >     >     name_for_scalar_relationship() and/or 
> >     >     >     name_for_collection_relationship() 
> >     >     >     to produce different names in each case.  The 
> "constraint" 
> >     >     parameter 
> >     >     >     passed as we see in 
> >     >     >     
> >     >     
> >     
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>
>  
>
> > 
> >     >     
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>>
>  
>
> > 
> >     > 
> >     >     >     
> >     >     
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>
>  
>
> > 
> >     >     
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>  
> >     <
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>>>
>  
>
> > 
> >     > 
> >     >     > 
> >     >     >     is a ForeignKeyConstraint object, you can look inside of 
> >     >     >     constraint.column_keys to see if it is ['idbuiltin'] or 
> >     >     >     ['idthermometer'] and use that to generate a name. 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     >     On 01/01/2016 04:16 AM, yoch....@gmail.com 
> <javascript:> 
> >     wrote: 
> >     >     >     > Hi all, 
> >     >     >     > 
> >     >     >     > I use automap with database reflection to import 
> >     schema with 
> >     >     >     sqlalchemy. 
> >     >     >     > 
> >     >     >     > In case I have two relationships on same foreign key 
> >     in some 
> >     >     >     table, only 
> >     >     >     > one relationship is created by prepare(), the second 
> >     one seems 
> >     >     >     overwrited. 
> >     >     >     > 
> >     >     >     > My table looks like : 
> >     >     >     > 
> >     >     >     > | 
> >     >     >     > Table('thermostat', 
> >     >     >     >     Base.metadata, 
> >     >     >     >     
> >     Column('id',INTEGER(),primary_key=True,nullable=False), 
> >     >     >     >     Column('idbuiltin',INTEGER(),ForeignKey('device.id 
> >     <http://device.id> 
> >     >     <http://device.id> 
> >     >     >     <http://device.id>')), 
> >     >     >     >     
> >     Column('idthermometer',INTEGER(),ForeignKey('device.id 
> >     <http://device.id> 
> >     >     <http://device.id> 
> >     >     >     <http://device.id>'))) 
> >     >     >     > | 
> >     >     >     > 
> >     >     >     > How to control relationship creation to produce two 
> >     distinct 
> >     >     >     relationships ? 
> >     >     >     > 
> >     >     >     > Thank you and Happy New Year ! 
> >     >     >     > 
> >     >     >     > -- 
> >     >     >     > 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+...@googlegroups.com 
> <javascript:> 
> >     >     >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com 
> <javascript:> 
> >     <javascript:> 
> >     >     <javascript:> <javascript:>>. 
> >     >     >     > To post to this group, send email to 
> >     sqlal...@googlegroups.com 
> >     >     >     <javascript:> 
> >     >     >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> >     >     >     > Visit this group at 
> >     >     https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy> 
> >     >     <https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>> 
> >     >     >     <https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy> 
> >     >     <https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>>>. 
> >     >     >     > For more options, visit 
> >     https://groups.google.com/d/optout <
> https://groups.google.com/d/optout> 
> >     >     <https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>> 
> >     >     >     <https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout> 
> >     >     <https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>>>. 
> >     >     > 
> >     >     > -- 
> >     >     > 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+...@googlegroups.com <javascript:> 
> >     >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com 
> <javascript:> 
> >     <javascript:> <javascript:>>. 
> >     >     > To post to this group, send email to 
> sqlal...@googlegroups.com 
> >     >     <javascript:> 
> >     >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> >     >     > Visit this group at 
> >     https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy> 
> >     >     <https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>>. 
> >     >     > For more options, visit https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout> 
> >     >     <https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>>. 
> >     > 
> >     > -- 
> >     > 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+...@googlegroups.com <javascript:> 
> >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:> 
> <javascript:>>. 
> >     > To post to this group, send email to sqlal...@googlegroups.com 
> >     <javascript:> 
> >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> >     > Visit this group at https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>. 
> >     > For more options, visit https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>. 
> > 
> > -- 
> > 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+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to