Add author column to photos
This commit is contained in:
		
							parent
							
								
									f53b089b79
								
							
						
					
					
						commit
						232f8231e0
					
				
					 4 changed files with 26 additions and 2 deletions
				
			
		|  | @ -48,6 +48,7 @@ SQL_PHOTO_COLUMNS = [ | ||||||
|     'created', |     'created', | ||||||
|     'thumbnail', |     'thumbnail', | ||||||
|     'tagged_at', |     'tagged_at', | ||||||
|  |     'author_id', | ||||||
| ] | ] | ||||||
| SQL_TAG_COLUMNS = [ | SQL_TAG_COLUMNS = [ | ||||||
|     'id', |     'id', | ||||||
|  |  | ||||||
|  | @ -31,6 +31,13 @@ def upgrade_2_to_3(sql): | ||||||
|     cur.execute('CREATE INDEX IF NOT EXISTS index_user_id ON users(id)') |     cur.execute('CREATE INDEX IF NOT EXISTS index_user_id ON users(id)') | ||||||
|     cur.execute('CREATE INDEX IF NOT EXISTS index_user_username ON users(username COLLATE NOCASE)') |     cur.execute('CREATE INDEX IF NOT EXISTS index_user_username ON users(username COLLATE NOCASE)') | ||||||
| 
 | 
 | ||||||
|  | def upgrade_3_to_4(sql): | ||||||
|  |     ''' | ||||||
|  |     Add an `author_id` column to Photos. | ||||||
|  |     ''' | ||||||
|  |     cur = sql.cursor() | ||||||
|  |     cur.execute('ALTER TABLE photos ADD COLUMN author_id TEXT') | ||||||
|  |     cur.execute('CREATE INDEX IF NOT EXISTS index_photo_author on photos(author_id)') | ||||||
| 
 | 
 | ||||||
| def upgrade_all(database_filename): | def upgrade_all(database_filename): | ||||||
|     ''' |     ''' | ||||||
|  |  | ||||||
|  | @ -287,6 +287,7 @@ class Photo(ObjectBase): | ||||||
|         self.created = row_tuple['created'] |         self.created = row_tuple['created'] | ||||||
|         self.thumbnail = row_tuple['thumbnail'] |         self.thumbnail = row_tuple['thumbnail'] | ||||||
|         self.tagged_at = row_tuple['tagged_at'] |         self.tagged_at = row_tuple['tagged_at'] | ||||||
|  |         self.author_id = row_tuple['author_id'] | ||||||
| 
 | 
 | ||||||
|     def __reinit__(self): |     def __reinit__(self): | ||||||
|         ''' |         ''' | ||||||
|  | @ -336,6 +337,9 @@ class Photo(ObjectBase): | ||||||
|         albums = [self.photodb.get_album(f[0]) for f in fetch] |         albums = [self.photodb.get_album(f[0]) for f in fetch] | ||||||
|         return albums |         return albums | ||||||
| 
 | 
 | ||||||
|  |     def author(self): | ||||||
|  |         return self.photodb.get_user(id=self.author_id) | ||||||
|  | 
 | ||||||
|     def bytestring(self): |     def bytestring(self): | ||||||
|         return bytestring.bytestring(self.bytes) |         return bytestring.bytestring(self.bytes) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ logging.getLogger('PIL.PngImagePlugin').setLevel(logging.WARNING) | ||||||
| # Note: Setting user_version pragma in init sequence is safe because it only | # Note: Setting user_version pragma in init sequence is safe because it only | ||||||
| # happens after the out-of-date check occurs, so no chance of accidentally | # happens after the out-of-date check occurs, so no chance of accidentally | ||||||
| # overwriting it. | # overwriting it. | ||||||
| DATABASE_VERSION = 3 | DATABASE_VERSION = 4 | ||||||
| DB_INIT = ''' | DB_INIT = ''' | ||||||
| PRAGMA count_changes = OFF; | PRAGMA count_changes = OFF; | ||||||
| PRAGMA cache_size = 10000; | PRAGMA cache_size = 10000; | ||||||
|  | @ -52,7 +52,8 @@ CREATE TABLE IF NOT EXISTS photos( | ||||||
|     bytes INT, |     bytes INT, | ||||||
|     created INT, |     created INT, | ||||||
|     thumbnail TEXT, |     thumbnail TEXT, | ||||||
|     tagged_at INT |     tagged_at INT, | ||||||
|  |     author_id TEXT | ||||||
| ); | ); | ||||||
| CREATE TABLE IF NOT EXISTS tags( | CREATE TABLE IF NOT EXISTS tags( | ||||||
|     id TEXT, |     id TEXT, | ||||||
|  | @ -96,6 +97,7 @@ CREATE INDEX IF NOT EXISTS index_photo_path on photos(filepath COLLATE NOCASE); | ||||||
| CREATE INDEX IF NOT EXISTS index_photo_fakepath on photos(override_filename COLLATE NOCASE); | CREATE INDEX IF NOT EXISTS index_photo_fakepath on photos(override_filename COLLATE NOCASE); | ||||||
| CREATE INDEX IF NOT EXISTS index_photo_created on photos(created); | CREATE INDEX IF NOT EXISTS index_photo_created on photos(created); | ||||||
| CREATE INDEX IF NOT EXISTS index_photo_extension on photos(extension); | CREATE INDEX IF NOT EXISTS index_photo_extension on photos(extension); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photo_author on photos(author_id); | ||||||
| 
 | 
 | ||||||
| -- Tag | -- Tag | ||||||
| CREATE INDEX IF NOT EXISTS index_tag_id on tags(id); | CREATE INDEX IF NOT EXISTS index_tag_id on tags(id); | ||||||
|  | @ -435,6 +437,7 @@ class PDBPhotoMixin: | ||||||
|             filename, |             filename, | ||||||
|             *, |             *, | ||||||
|             allow_duplicates=False, |             allow_duplicates=False, | ||||||
|  |             author=None, | ||||||
|             commit=True, |             commit=True, | ||||||
|             do_metadata=True, |             do_metadata=True, | ||||||
|             do_thumbnail=True, |             do_thumbnail=True, | ||||||
|  | @ -461,6 +464,14 @@ class PDBPhotoMixin: | ||||||
|                 exc.photo = existing |                 exc.photo = existing | ||||||
|                 raise exc |                 raise exc | ||||||
| 
 | 
 | ||||||
|  |         if isinstance(author, objects.User): | ||||||
|  |             if author.photodb != self: | ||||||
|  |                 raise ValueError('That user does not belong to this photodb') | ||||||
|  |             author_id = author.id | ||||||
|  |         elif author is not None: | ||||||
|  |             # Just to confirm | ||||||
|  |             author_id = self.get_user(id=author).id | ||||||
|  | 
 | ||||||
|         extension = os.path.splitext(filename)[1] |         extension = os.path.splitext(filename)[1] | ||||||
|         extension = extension.replace('.', '') |         extension = extension.replace('.', '') | ||||||
|         extension = self.normalize_tagname(extension) |         extension = self.normalize_tagname(extension) | ||||||
|  | @ -474,6 +485,7 @@ class PDBPhotoMixin: | ||||||
|             'extension': extension, |             'extension': extension, | ||||||
|             'created': created, |             'created': created, | ||||||
|             'tagged_at': None, |             'tagged_at': None, | ||||||
|  |             'author_id': author_id, | ||||||
|             # These will be filled in during the metadata stage. |             # These will be filled in during the metadata stage. | ||||||
|             'bytes': None, |             'bytes': None, | ||||||
|             'width': None, |             'width': None, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue