Files
tacker/tacker/db/types.py
Tetsuro Kaneko 33ca6ad556 Support tacker-db-manage for Multi DB backend
The current Tacker implementation does not support PostgreSQL,
and differences between the MySQL and PostgreSQL implementations can
cause errors in practice.
This patch implements PostgreSQL support through Tacker
and tacker-db-manage.

Note that UT/FT is not added because conventional tests can cover
this patch.

Implements: blueprint support-multidb-backend
Change-Id: Ide07befdb26f6b173d1185fe0dbcf59f8f3dbf81
2023-02-24 00:03:12 +00:00

61 lines
1.7 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import uuid
from oslo_serialization import jsonutils
from sqlalchemy.types import String
from sqlalchemy.types import Text
from sqlalchemy.types import TypeDecorator
class Uuid(TypeDecorator):
impl = String(36)
cache_ok = True
def process_bind_param(self, value, dialect):
if value is not None:
# If value is typed as List, only use first element.
if isinstance(value, list):
value = value[0]
try:
uuid.UUID(value, version=4)
except ValueError:
raise ValueError(
"Invalid format. It should be in UUID v4 format")
return value
def process_result_value(self, value, dialect):
return value
class Json(TypeDecorator):
impl = Text
cache_ok = False
def process_bind_param(self, value, dialect):
if dialect.name == 'postgresql':
return jsonutils.dumps(value)
else:
return jsonutils.dump_as_bytes(value)
def process_result_value(self, value, dialect):
if value is None:
return None
if isinstance(value, dict):
return value
return jsonutils.loads(value)