#29293: valid UUID is not a valid UUID
-------------------------------------+-------------------------------------
               Reporter:  alfaro28   |          Owner:  nobody
                   Type:             |         Status:  new
  Cleanup/optimization               |
              Component:  Database   |        Version:  1.11
  layer (models, ORM)                |       Keywords:  UUIDField,
               Severity:  Normal     |  postgresql, uuid
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 When using UUIDField with postgresql sometimes the field initialization
 will fail, seems like postgresql sometimes returns some kind of UUID value
 that fails the


 {{{
 isinstance(value, uuid.UUID)
 }}}


 validation and causes an exception, I don't really know how to reproduce,
 because for a time it happened to me almost every day (randomly), but it's
 been 7-8 months since the last time. I also want to clarify, once this
 problem "starts", it will fail every single time until you restart the
 server, after the restart everything works as it should (for a time
 aparently). I'm pretty sure it's not django's fault but it should be
 fairly easy to protect against this scenario. I think adding str() around
 value should fix this, it would look like this:


 {{{
     def to_python(self, value):
         if value is not None and not isinstance(value, uuid.UUID):
             try:
                 return uuid.UUID(str(value))
             except (AttributeError, ValueError):
                 raise exceptions.ValidationError(
                     self.error_messages['invalid'],
                     code='invalid',
                     params={'value': value},
                 )
         return value
 }}}

 Since django already is using the "hex" parameter for the UUID constructor
 and hex asumes a string, this makes sense to me

 Link with aditional info:
 [https://stackoverflow.com/questions/45990550/valid-uuid-is-not-a-valid-
 uuid]

-- 
Ticket URL: <https://code.djangoproject.com/ticket/29293>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.c00a2395ff692f7eb9c75e8d2860b0f4%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to