1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- from contextlib import closing
- from json import loads, dumps
- class Model:
- """
- database class for label providers
- """
- def __init__(self, database, row):
- self.database = database
- self.identifier = row[0]
- self.name = row[1]
- self.description = row[2]
- self.root_folder = row[3]
- self.supports = loads(row[4])
- def copy_to(self, name: str, root_folder: str):
- """
- copies the models database entry while changing name and root_folder
- :param name: copy name
- :param root_folder: copy root folder
- :return: copy
- """
- supports = dumps(self.supports)
- with closing(self.database.con.cursor()) as cursor:
- cursor.execute('''
- INSERT INTO models (name, description, root_folder, supports)
- VALUES (?, ?, ?, ?)
- ON CONFLICT (root_folder)
- DO UPDATE SET name = ?, description = ?, supports = ?
- ''', (name, self.description, root_folder, supports, name, self.description, supports))
- # lastrowid is 0 if on conflict clause applies.
- # If this is the case we do an extra query to receive the row id.
- if cursor.lastrowid > 0:
- row_id = cursor.lastrowid
- insert = True
- else:
- cursor.execute('SELECT id FROM models WHERE root_folder = ?', [root_folder])
- row_id = cursor.fetchone()[0]
- insert = False
- return self.database.model(row_id), insert
- def remove(self):
- """
- remove this model from the database
- :return:
- """
- with closing(self.database.con.cursor()) as cursor:
- cursor.execute('DELETE FROM models WHERE id = ?', [self.identifier])
|