Add abstractmethod to Groupable methods that write; dunder methods.
The read-only methods like get_* and has_* don't need to be overridden, but for anything that writes I don't want to forget to override them with feature decorators etc.
This commit is contained in:
		
							parent
							
								
									2a89cf33d3
								
							
						
					
					
						commit
						a8f5f858b7
					
				
					 1 changed files with 11 additions and 6 deletions
				
			
		|  | @ -2,6 +2,7 @@ | ||||||
| This file provides the data objects that should not be instantiated directly, | This file provides the data objects that should not be instantiated directly, | ||||||
| but are returned by the PDB accesses. | but are returned by the PDB accesses. | ||||||
| ''' | ''' | ||||||
|  | import abc | ||||||
| import os | import os | ||||||
| import PIL.Image | import PIL.Image | ||||||
| import send2trash | import send2trash | ||||||
|  | @ -80,11 +81,11 @@ class ObjectBase: | ||||||
|             return None |             return None | ||||||
|         return self.photodb.get_user(id=self.author_id) |         return self.photodb.get_user(id=self.author_id) | ||||||
| 
 | 
 | ||||||
| class GroupableMixin: | class GroupableMixin(metaclass=abc.ABCMeta): | ||||||
|     group_getter_many = None |     group_getter_many = None | ||||||
|     group_table = None |     group_table = None | ||||||
| 
 | 
 | ||||||
|     def _lift_children(self): |     def __lift_children(self): | ||||||
|         ''' |         ''' | ||||||
|         If this object has parents, the parents adopt all of its children. |         If this object has parents, the parents adopt all of its children. | ||||||
|         Otherwise, this object is at the root level, so the parental |         Otherwise, this object is at the root level, so the parental | ||||||
|  | @ -100,7 +101,7 @@ class GroupableMixin: | ||||||
|         for parent in parents: |         for parent in parents: | ||||||
|             parent.add_children(children) |             parent.add_children(children) | ||||||
| 
 | 
 | ||||||
|     def _add_child(self, member): |     def __add_child(self, member): | ||||||
|         self.assert_same_type(member) |         self.assert_same_type(member) | ||||||
| 
 | 
 | ||||||
|         if member == self: |         if member == self: | ||||||
|  | @ -121,13 +122,15 @@ class GroupableMixin: | ||||||
|         } |         } | ||||||
|         self.photodb.sql_insert(table=self.group_table, data=data) |         self.photodb.sql_insert(table=self.group_table, data=data) | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def add_child(self, member): |     def add_child(self, member): | ||||||
|         return self._add_child(member) |         return self.__add_child(member) | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def add_children(self, members): |     def add_children(self, members): | ||||||
|         bail = True |         bail = True | ||||||
|         for member in members: |         for member in members: | ||||||
|             bail = bail and (self._add_child(member) is BAIL) |             bail = bail and (self.__add_child(member) is BAIL) | ||||||
|         if bail: |         if bail: | ||||||
|             return BAIL |             return BAIL | ||||||
| 
 | 
 | ||||||
|  | @ -137,6 +140,7 @@ class GroupableMixin: | ||||||
|         if self.photodb != other.photodb: |         if self.photodb != other.photodb: | ||||||
|             raise TypeError(f'Objects must belong to the same PhotoDB.') |             raise TypeError(f'Objects must belong to the same PhotoDB.') | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def delete(self, *, delete_children=False): |     def delete(self, *, delete_children=False): | ||||||
|         ''' |         ''' | ||||||
|         Delete this object's relationships to other groupables. |         Delete this object's relationships to other groupables. | ||||||
|  | @ -154,7 +158,7 @@ class GroupableMixin: | ||||||
|             for child in self.get_children(): |             for child in self.get_children(): | ||||||
|                 child.delete(delete_children=True) |                 child.delete(delete_children=True) | ||||||
|         else: |         else: | ||||||
|             self._lift_children() |             self.__lift_children() | ||||||
| 
 | 
 | ||||||
|         # Note that this part comes after the deletion of children to prevent |         # Note that this part comes after the deletion of children to prevent | ||||||
|         # issues of recursion. |         # issues of recursion. | ||||||
|  | @ -199,6 +203,7 @@ class GroupableMixin: | ||||||
|         row = self.photodb.sql_select_one(query, [self.id, member.id]) |         row = self.photodb.sql_select_one(query, [self.id, member.id]) | ||||||
|         return row is not None |         return row is not None | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def remove_child(self, member): |     def remove_child(self, member): | ||||||
|         if not self.has_child(member): |         if not self.has_child(member): | ||||||
|             return BAIL |             return BAIL | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue