This is driving me insane so any hints will be greatly appreciated ...
Thanks
Mike
Here is the entire unedited test sequence plus failing code ...
Python: 3.4
Django: 1.6.9
SQLite3: memory
Creating test database for alias 'default'...
.E.E...
======================================================================
ERROR: test_checkreference_exp
(substance.tests.test_substance.TestSubstance)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"C:\Users\mike\env\xxdx3\ssds\substance\tests\test_substance.py", line
57, in test_checkreference_exp
self.assertEqual(subst.checkreference('1'), True)
File "C:\Users\mike\env\xxdx3\ssds\substance\models\substance.py",
line 449, in checkreference
if checkit(self, ref):
File "C:\Users\mike\env\xxdx3\ssds\substance\models\substance.py",
line 441, in checkit
val = u"{0}".format(obj.__dict__[field])
TypeError: __str__ returned non-string (type bytes)
======================================================================
ERROR: testcheckreference_gas (substance.tests.test_substance.TestSubstance)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"C:\Users\mike\env\xxdx3\ssds\substance\tests\test_substance.py", line
75, in test_checkreference_gas
self.assertEqual(subst.checkreference('1'.encode('utf-8')), True)
File "C:\Users\mike\env\xxdx3\ssds\substance\models\substance.py",
line 449, in checkreference
if checkit(self, ref):
File "C:\Users\mike\env\xxdx3\ssds\substance\models\substance.py",
line 441, in checkit
val = u"{0}".format(obj.__dict__[field])
TypeError: __str__ returned non-string (type bytes)
----------------------------------------------------------------------
Ran 7 tests in 1.281s
FAILED (errors=2)
Destroying test database for alias 'default'...
So here is the method in the substance model. The idea is that we check
to see if the user included a bracketed reference in any field of
substance or any field of a related object. I'll chop out the middle of
the method to save space.
def checkreference(self, ref):
"""Check all potential char fields for ref in square brackets
eg [1]
Give up as soon as it is found. Otherwise raise validation error.
"""
def checkit(obj, ref):
"""Return True immediately but don't return False unless all
fields have been checked."""
for field in obj.__dict__:
val = u"{0}".format(obj.__dict__[field])
if ref in val:
return True
assert(ref)
ref = "[{0}]".format(ref)
# first check self - the substance itself
if checkit(self, ref):
return True
# now each of the 1:1 and 1:n objects
try:
obj = Solid.objects.get(substance=self)
if checkit(obj, ref):
return True
except Solid.DoesNotExist:
pass
<snip lots of similar try/except blocks>
raise ValidationError("Reference {0} does not appear in any "
"field".format(ref))
... and here is one of the tests (line 57 in the traceback) in error ...
def test_checkreference_exp(self):
subst = Substance.objects.get(name="Hazsub")
exp, c = Explosive.objects.get_or_create(substance=subst)
exp.compatibility = '[1]'
exp.save()
self.assertEqual(subst.checkreference('1'), True)
--
You received this message because you are subscribed to the Google Groups "Django
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/54ED50A5.3030909%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.