]> git.decadent.org.uk Git - dak.git/commitdiff
Work with newer SQLAlchemy versions
authorAnsgar Burchardt <ansgar@debian.org>
Sun, 1 May 2016 14:48:22 +0000 (16:48 +0200)
committerAnsgar Burchardt <ansgar@debian.org>
Sun, 1 May 2016 14:48:22 +0000 (16:48 +0200)
Newer SQLAlchemy versions seem to track the `binary` attribute of
`BinaryMetadata`.  This means the association proxy in `DBBinary`
would first create a `BinaryMetadata` with `binary` set to `None`,
flush this to the database and then set the actual value of `binary`
we want.  However the flush fails, as `NULL` is not allowed for the
`binary_id` column.

The problem can be avoided by not setting `binary` to `None`.  This is
treated as an "undefined value" by SQLAlchemy and changing it later
means the database row never sees `NULL`.

The same applies to the `source` attribute of `SourceMetadata`.

daklib/dbconn.py

index 3a7f55bbe942df3db4807865dd28a7bf2203627a..3d3561f59618b3c03154a31826f8e9d02ad0d7eb 100755 (executable)
@@ -2158,7 +2158,8 @@ class BinaryMetadata(ORMObject):
     def __init__(self, key = None, value = None, binary = None):
         self.key = key
         self.value = value
-        self.binary = binary
+        if binary is not None:
+            self.binary = binary
 
     def properties(self):
         return ['binary', 'key', 'value']
@@ -2174,7 +2175,8 @@ class SourceMetadata(ORMObject):
     def __init__(self, key = None, value = None, source = None):
         self.key = key
         self.value = value
-        self.source = source
+        if source is not None:
+            self.source = source
 
     def properties(self):
         return ['source', 'key', 'value']