From ae94b6dcb3f4662d32a9f250d309ed4939d1bfc2 Mon Sep 17 00:00:00 2001 From: zhangguoqing Date: Mon, 5 Sep 2016 19:02:48 +0800 Subject: [PATCH] The qty's type should be more precision in storage tables If qty's type is Numeric means only Numeric(10, 0), the network.bw.in and network.bw.out always are not accuratly. So the patch alter it to Numeric(10, 5) to improve precision. Change-Id: Icd74c3bfd9f9fb7eb86e9fa58577c2fe9a258463 --- .../307430ab38bc_improve_qty_precision.py | 35 +++++++++++++++++++ cloudkitty/storage/sqlalchemy/models.py | 2 +- cloudkitty/transformer/format.py | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 cloudkitty/storage/sqlalchemy/alembic/versions/307430ab38bc_improve_qty_precision.py diff --git a/cloudkitty/storage/sqlalchemy/alembic/versions/307430ab38bc_improve_qty_precision.py b/cloudkitty/storage/sqlalchemy/alembic/versions/307430ab38bc_improve_qty_precision.py new file mode 100644 index 00000000..3feaa87f --- /dev/null +++ b/cloudkitty/storage/sqlalchemy/alembic/versions/307430ab38bc_improve_qty_precision.py @@ -0,0 +1,35 @@ +# +# 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. + +"""improve qty precision + +Revision ID: 307430ab38bc +Revises: 792b438b663 +Create Date: 2016-09-05 18:37:26.714065 + +""" + +# revision identifiers, used by Alembic. +revision = '307430ab38bc' +down_revision = '792b438b663' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + with op.batch_alter_table('rated_data_frames') as batch_op: + batch_op.alter_column( + 'qty', + type_=sa.Numeric(10, 5), + existing_type=sa.Numeric()) diff --git a/cloudkitty/storage/sqlalchemy/models.py b/cloudkitty/storage/sqlalchemy/models.py index 5be55ad9..e4d092c3 100644 --- a/cloudkitty/storage/sqlalchemy/models.py +++ b/cloudkitty/storage/sqlalchemy/models.py @@ -44,7 +44,7 @@ class RatedDataFrame(Base, models.ModelBase): nullable=False) unit = sqlalchemy.Column(sqlalchemy.String(255), nullable=False) - qty = sqlalchemy.Column(sqlalchemy.Numeric(), + qty = sqlalchemy.Column(sqlalchemy.Numeric(10, 5), nullable=False) res_type = sqlalchemy.Column(sqlalchemy.String(255), nullable=False) diff --git a/cloudkitty/transformer/format.py b/cloudkitty/transformer/format.py index 44a7fd9b..a124f13a 100644 --- a/cloudkitty/transformer/format.py +++ b/cloudkitty/transformer/format.py @@ -19,7 +19,7 @@ from cloudkitty import transformer class CloudKittyFormatTransformer(transformer.BaseTransformer): - def format_item(self, desc, unit, qty=1): + def format_item(self, desc, unit, qty=1.0): data = {} data['desc'] = desc data['vol'] = {'unit': unit, 'qty': qty}