[Fixed]-PyDev in Eclipse does not recognize db.add_column from South

4👍

One (far from ideal) solution is to put #@PydevCodeAnalysisIgnore in all of your migrations. If you only have a few so far, you can do this manually. I had heaps, so I ran the following shell command, which will add the comment in as the second line of each file:

find . | grep '^.\/[a-z]*\/migrations\/.*\.py$' | xargs -I FILE sed -i '
1 a\
#@PydevCodeAnalysisIgnore
' FILE 

(Note: You should probably run find . | grep '^.\/[a-z]*\/migrations\/.*\.py$' to see which files sed will alter, before running the whole command. You can also run the whole command without the -i flag to see the changes themselves.)

19👍

Or, if you don’t want to mess changing south source files or retouching all your migration files, you can consider south specific methods as globals in pydev code analysis.
You can change this in:

Preferences > PyDev > Editor > Code Analysis > Undefined

My exceptions list are:

_,tr,create_table,send_create_signal,delete_table,add_column,delete_column,alter_column,create_unique,create_index,delete_index,delete_unique,shorten_name,rename_column,execute

3👍

Here’s a workaround if you want to edit south/db/__init__.py:

--- db/__init__.py.original 2010-12-02 03:00:26.000000000 +1300
+++ db/__init__.py  2011-05-02 14:07:19.353636710 +1200
@@ -72,5 +72,9 @@
     )
     sys.exit(1)

-# Finally, to make old migrations work, keep 'db' around as the default database
+# Finally, to make old migrations work, keep 'db' around as the default
+# database. We're setting it explicitly to the generic operations first to
+# avoid pydev errors.
+from south.db import generic
+db = generic.DatabaseOperations(DEFAULT_DB_ALIAS)
 db = dbs[DEFAULT_DB_ALIAS]

Leave a comment