bccb1eb313
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
50 lines
1.4 KiB
Python
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)
|