Traceback (most recent call last): File "/Applications/web2pystable/gluon/restricted.py", line 205, in restricted exec ccode in environment File "/Applications/web2pystable/applications/myapp/controllers/default.py" <http://127.0.0.1:8000/admin/default/edit/movietooth/controllers/default.py>, line 199, in <module> File "/Applications/web2pystable/gluon/globals.py", line 173, in <lambda> self._caller = lambda f: f() File "/Applications/web2pystable/applications/myapp/controllers/default.py" <http://127.0.0.1:8000/admin/default/edit/movietooth/controllers/default.py>, line 44, in load_data rows = parse_and_load() File "/Applications/web2pystable/applications/myapp/models/movie.py" <http://127.0.0.1:8000/admin/default/edit/movietooth/models/movie.py>, line 246, in parse_and_load msg = db.movie.validate_and_insert(**movie) File "/Applications/web2pystable/gluon/dal.py", line 6836, in validate_and_insert value,error = self[key].validate(value) File "/Applications/web2pystable/gluon/dal.py", line 7434, in validate (value, error) = validator(value) File "/Applications/web2pystable/gluon/validators.py", line 484, in __call__ if not [x for x in values if not str(x) in self.theset]: TypeError: argument of type 'NoneType' is not iterable
On Wed, Aug 22, 2012 at 4:36 PM, Anthony <abasta...@gmail.com> wrote: > Can you show the actual traceback so we can see where the code is failing? > Perhaps the problem is in the field validator. > > Anthony > > > On Wednesday, August 22, 2012 4:10:40 PM UTC-4, Mike Girard wrote: >> >> Yeah, I get the references directly from the genre/person tables before >> inserting them in movie. I also test to make sure the item being inserted >> is a list with data. Printing contents after the error shows nothing odd. >> >> I have tested this in both Postgres and SQLlite. Same thing happens in >> both. >> >> >> >> On Wednesday, August 22, 2012 3:45:31 PM UTC-4, villas wrote: >>> >>> Did you try checking that all the references exist? >>> So, maybe it is a referential integrity problem. >>> You are prob not using Sqlite but a proper DB. >>> Just ideas, D >>> >>> >>> On Wednesday, August 22, 2012 8:23:23 PM UTC+1, Mike Girard wrote: >>>> >>>> Yeah. A result of switching it off and then back on. >>>> >>>> Good catch. >>>> >>>> On Wed, Aug 22, 2012 at 3:19 PM, Anthony <abas...@gmail.com> wrote: >>>> >>>>> I assume this is a typo too, but just to be sure: >>>>> >>>>> Field('genres','string','list:**reference genre', ... >>>>> >>>>> You have both 'string' and 'list:reference' there. >>>>> >>>>> Anthony >>>>> >>>>> >>>>> On Wednesday, August 22, 2012 2:49:29 PM UTC-4, Mike Girard wrote: >>>>> >>>>>> I have written a script to parse a large xml file and insert the >>>>>> contents in to my app db. I am using lxml. >>>>>> >>>>>> After about 10 records get inserted, the script fails with >>>>>> <type 'exceptions.TypeError'> argument of type 'NoneType' is not >>>>>> iterable >>>>>> >>>>>> Troubleshooting determined the following: >>>>>> >>>>>> 1. This error is associated with 3 list:reference fields. When I >>>>>> remove them from the script, the script executes uneventfully. If any one >>>>>> of them is included, it fails. >>>>>> 2. This only happens after 10 records have been successfully inserted. >>>>>> 3. There is no discernible difference between the records that get >>>>>> successfully added and those that don't. The error happens even when I >>>>>> hard >>>>>> code the lists for the list:reference field. It seems to be associated >>>>>> with >>>>>> number of records, rather than which records. >>>>>> 4. The script executes successfully when I change the field types >>>>>> from 'list:reference' to 'string' and insert strings instead of lists. >>>>>> You >>>>>> should not assume from this that there is a data issue. As I said, >>>>>> hardcoded lists get rejected also. I am 99% certain valid data is not the >>>>>> issue. >>>>>> 5. This happens in both SQLLite and Postgres >>>>>> >>>>>> Here is the model declaration for one of the three fields. They are >>>>>> all analogous: >>>>>> >>>>>> Field('genres','string','list:****reference genre', >>>>>> requires=IS_IN_DB(db, 'genre.id', '%(name)s [%(id)s]', >>>>>> multiple=True)) >>>>>> >>>>>> Here is how I update each new row in the the database: >>>>>> >>>>>> db.movies.validate_and_insert(******movie) (movie is a dict) >>>>>> >>>>>> Here is how I hardcoded values into the fields: movie['genre'] = >>>>>> {456, 368, 239] >>>>>> >>>>>> Now, if someone doesn't have a solution, can they tell me if I can >>>>>> >>>>>> 1.Programmatically remove the list:reference from the model prior to >>>>>> data updates and programmatically restore it afterwards? >>>>>> 2. Retain all the functionality of these fields by toggling this way? >>>>>> >>>>>> Seriously considering going the join table route and skipping the >>>>>> list reference fields. Are there any gotchas there? >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>> >>>>> >>>>> >>>>> >>>> >>>> -- > > > > --