From ab7817389272e80947a1e5709c952a80b1384927 Mon Sep 17 00:00:00 2001 From: Mikhail Ivanov <mikhail.ivanov8@gmail.com> Date: Thu, 26 Sep 2019 03:42:02 +0400 Subject: [PATCH] Improve table & columns description formatting (#98) (#79) * Improve table & columns description formatting (#98) * Improve table & columns description formatting (#98) * Improve table & columns description formatting (#98) --- metadata/metadata_service/__init__.py | 6 ++--- metadata/metadata_service/api/column.py | 20 ++++++++-------- metadata/metadata_service/api/table.py | 14 +++++------ metadata/setup.py | 3 ++- .../api/test_redshit_disable_comment_edit.py | 23 +++++++++---------- 5 files changed, 31 insertions(+), 35 deletions(-) diff --git a/metadata/metadata_service/__init__.py b/metadata/metadata_service/__init__.py index f70b10af0b..48c280e073 100644 --- a/metadata/metadata_service/__init__.py +++ b/metadata/metadata_service/__init__.py @@ -71,16 +71,14 @@ def create_app(*, config_module_class: str) -> Flask: api.add_resource(PopularTablesAPI, '/popular_tables/') api.add_resource(TableDetailAPI, '/table/<path:table_uri>') api.add_resource(TableDescriptionAPI, - '/table/<path:table_uri>/description', - '/table/<path:table_uri>/description/<path:description_val>') + '/table/<path:table_uri>/description') api.add_resource(TableTagAPI, '/table/<path:table_uri>/tag', '/table/<path:table_uri>/tag/<tag>') api.add_resource(TableOwnerAPI, '/table/<path:table_uri>/owner/<owner>') api.add_resource(ColumnDescriptionAPI, - '/table/<path:table_uri>/column/<column_name>/description', - '/table/<path:table_uri>/column/<column_name>/description/<path:description_val>') + '/table/<path:table_uri>/column/<column_name>/description') api.add_resource(Neo4jDetailAPI, '/latest_updated_ts') api.add_resource(TagAPI, diff --git a/metadata/metadata_service/api/column.py b/metadata/metadata_service/api/column.py index 6cba66cf88..df602014a6 100644 --- a/metadata/metadata_service/api/column.py +++ b/metadata/metadata_service/api/column.py @@ -1,7 +1,9 @@ +import json from http import HTTPStatus from typing import Iterable, Union -from flask_restful import Resource, reqparse +from flask import request +from flask_restful import Resource from metadata_service.exception import NotFoundException from metadata_service.proxy import get_proxy_client @@ -13,24 +15,22 @@ class ColumnDescriptionAPI(Resource): """ def __init__(self) -> None: self.client = get_proxy_client() - - self.parser = reqparse.RequestParser() - self.parser.add_argument('description', type=str, location='json') - super(ColumnDescriptionAPI, self).__init__() def put(self, table_uri: str, - column_name: str, - description_val: str) -> Iterable[Union[dict, tuple, int, None]]: + column_name: str) -> Iterable[Union[dict, tuple, int, None]]: """ - Updates column description + Updates column description (passed as a request body) + :param table_uri: + :param column_name: + :return: """ try: + description = json.loads(request.json).get('description') self.client.put_column_description(table_uri=table_uri, column_name=column_name, - description=description_val) - + description=description) return None, HTTPStatus.OK except NotFoundException: diff --git a/metadata/metadata_service/api/table.py b/metadata/metadata_service/api/table.py index 3b6f48759e..61a19864a3 100644 --- a/metadata/metadata_service/api/table.py +++ b/metadata/metadata_service/api/table.py @@ -1,6 +1,8 @@ +import json from http import HTTPStatus from typing import Iterable, Mapping, Union, Any +from flask import request from flask_restful import Resource, fields, reqparse, marshal from metadata_service.exception import NotFoundException @@ -135,10 +137,6 @@ class TableDescriptionAPI(Resource): """ def __init__(self) -> None: self.client = get_proxy_client() - - self.parser = reqparse.RequestParser() - self.parser.add_argument('description', type=str, location='json') - super(TableDescriptionAPI, self).__init__() def get(self, table_uri: str) -> Iterable[Any]: @@ -155,15 +153,15 @@ def get(self, table_uri: str) -> Iterable[Any]: except Exception: return {'message': 'Internal server error!'}, HTTPStatus.INTERNAL_SERVER_ERROR - def put(self, table_uri: str, description_val: str) -> Iterable[Any]: + def put(self, table_uri: str) -> Iterable[Any]: """ - Updates table description + Updates table description (passed as a request body) :param table_uri: - :param description_val: :return: """ try: - self.client.put_table_description(table_uri=table_uri, description=description_val) + description = json.loads(request.json).get('description') + self.client.put_table_description(table_uri=table_uri, description=description) return None, HTTPStatus.OK except NotFoundException: diff --git a/metadata/setup.py b/metadata/setup.py index b7fc8842b3..9a71b8ae7c 100644 --- a/metadata/setup.py +++ b/metadata/setup.py @@ -2,7 +2,8 @@ from setuptools import setup, find_packages -__version__ = '1.1.0' +__version__ = '1.1.1' + requirements_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'requirements.txt') with open(requirements_path) as requirements_file: diff --git a/metadata/tests/unit/api/test_redshit_disable_comment_edit.py b/metadata/tests/unit/api/test_redshit_disable_comment_edit.py index 1da2c39921..f0208cb202 100644 --- a/metadata/tests/unit/api/test_redshit_disable_comment_edit.py +++ b/metadata/tests/unit/api/test_redshit_disable_comment_edit.py @@ -1,27 +1,26 @@ +import json import unittest from http import HTTPStatus - from mock import patch -from metadata_service.api.table import TableDescriptionAPI -from metadata_service.api.column import ColumnDescriptionAPI +from tests.unit.test_basics import BasicTestCase + +class RedshiftCommentEditDisableTest(BasicTestCase): -class RedshiftCommentEditDisableTest(unittest.TestCase): def test_table_comment_edit(self) -> None: with patch('metadata_service.api.table.get_proxy_client'): - tbl_dscrpt_api = TableDescriptionAPI() - table_uri = 'hive://gold.test_schema/test_table' - response = tbl_dscrpt_api.put(table_uri=table_uri, description_val='test') - self.assertEqual(list(response)[1], HTTPStatus.OK) + url = '/table/' + table_uri + '/description' + response = self.app.test_client().put(url, json=json.dumps({'description': 'test table'})) + self.assertEqual(response.status_code, HTTPStatus.OK) def test_column_comment_edit(self) -> None: with patch('metadata_service.api.column.get_proxy_client'): - col_dscrpt_api = ColumnDescriptionAPI() - table_uri = 'hive://gold.test_schema/test_table' - response = col_dscrpt_api.put(table_uri=table_uri, column_name='foo', description_val='test') - self.assertEqual(list(response)[1], HTTPStatus.OK) + column_name = 'foo' + url = '/table/' + table_uri + '/column/' + column_name + '/description' + response = self.app.test_client().put(url, json=json.dumps({'description': 'test column'})) + self.assertEqual(response.status_code, HTTPStatus.OK) if __name__ == '__main__':