mirror of https://gitlab.com/pamhyr/pamhyr2
93 lines
2.3 KiB
Python
93 lines
2.3 KiB
Python
# PamhyrID.py -- Pamhyr
|
|
# Copyright (C) 2024 INRAE
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
from tools import trace, timer
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
|
class PamhyrID(object):
|
|
_pamhyr_id_cnt = 0
|
|
|
|
def __init__(self, id: int = -1):
|
|
super(PamhyrID, self).__init__()
|
|
|
|
self._pamhyr_id = self.get_new_pamhyr_id(id)
|
|
|
|
@classmethod
|
|
def get_new_pamhyr_id(cls, id):
|
|
pid = id
|
|
|
|
if pid < 0:
|
|
pid = PamhyrID._pamhyr_id_cnt
|
|
|
|
PamhyrID._pamhyr_id_cnt = max(
|
|
id + 1,
|
|
PamhyrID._pamhyr_id_cnt + 1
|
|
)
|
|
|
|
return pid
|
|
|
|
@property
|
|
def pamhyr_id(self):
|
|
return self._pamhyr_id
|
|
|
|
@classmethod
|
|
def update_db_add_pamhyr_id(cls, execute, table,
|
|
data=None):
|
|
execute(
|
|
f"ALTER TABLE {table} " +
|
|
f"ADD COLUMN pamhyr_id INTEGER NOT NULL DEFAULT -1"
|
|
)
|
|
|
|
id2pid = cls.update_db_add_pamhyr_id_init_id2pid(table, data)
|
|
rows = execute(f"SELECT id FROM {table}")
|
|
|
|
for row in rows:
|
|
id = row[0]
|
|
pid = cls.get_new_pamhyr_id(-1)
|
|
|
|
id2pid[table][id] = pid
|
|
|
|
execute(
|
|
f"UPDATE {table} " +
|
|
f"SET pamhyr_id = {pid} " +
|
|
f"WHERE id = {id}"
|
|
)
|
|
|
|
return True
|
|
|
|
@classmethod
|
|
def update_db_add_pamhyr_id_init_id2pid(cls, table, data):
|
|
id2pid = {}
|
|
if "id2pid" in data:
|
|
id2pid = data["id2pid"]
|
|
else:
|
|
data["id2pid"] = id2pid
|
|
|
|
if table not in id2pid:
|
|
id2pid[table] = {}
|
|
|
|
return id2pid
|
|
|
|
@classmethod
|
|
def create_db_add_pamhyr_id(cls):
|
|
return "pamhyr_id INTEGER NOT NULL"
|