2010-10-31 8 views
12

Ho un'app Pylons che sto usando per i modelli dichiarativi di SqlAlchemy. Per rendere il codice un po 'più pulito, aggiungo una .query alla Base SA e eredito tutti i miei modelli da quella.problemi con l'invio di pylint per trovare metodi ereditati su piloni/modelli SA

Così nel mio app.model.meta devo

Base = declarative_base() 
metadata = Base.metadata 
Session = scoped_session(sessionmaker()) 

Base.query = Session.query_property(Query) 

penso che ereditano questo in app.model.mymodel e dichiararla come figlio di meta.Base. Questo mi permette di scrivere le mie domande come

mymodel.query.filter(mymodel.id == 3).all() 

Il guaio è che pylint non vede .query come un attributo valido dei miei modelli.

E:102:JobCounter.reset_count: Class 'JobCounter' has no 'query' member 

Ovviamente questo errore è dappertutto poiché si verifica su qualsiasi modello che esegue una query. Non voglio saltare l'errore perché potrebbe indicare qualcosa in giro per le classi non-orm, ma per questo devo perdere qualcosa per poterlo accettare.

Eventuali suggerimenti?

risposta

9

La cosa migliore che ho trovato per questo è passare un elenco di classi per ignorare questo controllo. Sarà ancora fare altri controlli per queste classi, dovrete semplicemente per mantenere un elenco di questi da qualche parte:

pylint --ignored-classes=MyModel1,MyModel2 myfile.py

io so che non è l'ideale, ma c'è qualcosa nel modo che sqlalchemy imposta la modelli che confondono il colpevole. Almeno con questo si ottiene comunque il controllo per le classi non orm.

+2

Sono giunto alla stessa conclusione, ma quello che ho fatto è stato usare la bandiera dei membri generati a pylint. Alla fine ho creato un pylintrc che è stato controllato in git con ogni progetto e aggiunto come: generate-members = commit, query, add, delete – Rick

Problemi correlati