tacker/tacker/db/types.py
Kanagaraj Manickam bccb1eb313 db schema improvements: blob to json text
Tacker does consider auth, placement_attr and similar
Objects as python dict but its stored as blob object
in db, which increases the storage space as well while
Debugging, these values can't be understandable as
its in binary format. So this patch stores all these
Objects in json string format, which enables readability
and reduces the size required to stored the object.

Closes-bug: #1587579

Change-Id: Idaee81028d40f60b70db12c5ae6ba78cb19f1992
2016-06-10 08:46:25 +05:30

50 lines
1.4 KiB
Python

# -*- coding: utf-8 -*-
# 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 json
import uuid
from sqlalchemy.types import String
from sqlalchemy.types import Text
from sqlalchemy.types import TypeDecorator
class Uuid(TypeDecorator):
impl = String(36)
def process_bind_param(self, value, dialect):
if value is not None:
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
def process_bind_param(self, value, dialect):
return json.dumps(value)
def process_result_value(self, value, dialect):
if value is None:
return None
return json.loads(value)