зеркало из https://github.com/Azure/pykusto.git
Move code to _src for better of externally-facing names
This commit is contained in:
Родитель
a6f51bc937
Коммит
b5532d5c20
|
@ -14,8 +14,7 @@ pip install pykusto
|
||||||
### Usage
|
### Usage
|
||||||
```python
|
```python
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from pykusto.client import PyKustoClient
|
from pykusto import PyKustoClient, Query
|
||||||
from pykusto.query import Query
|
|
||||||
|
|
||||||
# Connect to cluster with AAD device authentication
|
# Connect to cluster with AAD device authentication
|
||||||
# Databases, tables, and columns are auto-retrieved
|
# Databases, tables, and columns are auto-retrieved
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
# Also allows for a convenient list of all externally-facing classes as the autocomplete of "import pykusto."
|
# Also allows for a convenient list of all externally-facing classes as the autocomplete of "import pykusto."
|
||||||
# "import *" does not import names which start with an underscore
|
# "import *" does not import names which start with an underscore
|
||||||
|
|
||||||
from pykusto.client import *
|
from ._src.client import *
|
||||||
from pykusto.enums import *
|
from ._src.enums import *
|
||||||
from pykusto.expressions import *
|
from ._src.expressions import *
|
||||||
from pykusto.functions import *
|
from ._src.functions import *
|
||||||
from pykusto.query import *
|
from ._src.query import *
|
||||||
|
|
||||||
name = "pykusto"
|
name = "pykusto"
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,11 @@ from azure.kusto.data.response import KustoResponseDataSet
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
from azure.kusto.data.security import _get_azure_cli_auth_token
|
from azure.kusto.data.security import _get_azure_cli_auth_token
|
||||||
|
|
||||||
from pykusto.expressions import BaseColumn, _AnyTypeColumn
|
from .expressions import BaseColumn, _AnyTypeColumn
|
||||||
from pykusto.item_fetcher import _ItemFetcher
|
from .item_fetcher import _ItemFetcher
|
||||||
from pykusto.kql_converters import KQL
|
from .kql_converters import KQL
|
||||||
from pykusto.logger import _logger
|
from .logger import _logger
|
||||||
from pykusto.type_utils import _INTERNAL_NAME_TO_TYPE, _typed_column, _DOT_NAME_TO_TYPE
|
from .type_utils import _INTERNAL_NAME_TO_TYPE, _typed_column, _DOT_NAME_TO_TYPE
|
||||||
|
|
||||||
|
|
||||||
class KustoResponse:
|
class KustoResponse:
|
|
@ -2,9 +2,9 @@ from datetime import datetime, timedelta
|
||||||
from typing import Any, List, Tuple, Mapping, Optional
|
from typing import Any, List, Tuple, Mapping, Optional
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from pykusto.keywords import _KUSTO_KEYWORDS
|
from .keywords import _KUSTO_KEYWORDS
|
||||||
from pykusto.kql_converters import KQL
|
from .kql_converters import KQL
|
||||||
from pykusto.type_utils import _plain_expression, _aggregation_expression, PythonTypes, _kql_converter, _KustoType, _typed_column, _TypeRegistrar, _get_base_types, _NUMBER_TYPES
|
from .type_utils import _plain_expression, _aggregation_expression, PythonTypes, _kql_converter, _KustoType, _typed_column, _TypeRegistrar, _get_base_types, _NUMBER_TYPES
|
||||||
|
|
||||||
_ExpressionType = Union[PythonTypes, 'BaseExpression']
|
_ExpressionType = Union[PythonTypes, 'BaseExpression']
|
||||||
_StringType = Union[str, '_StringExpression']
|
_StringType = Union[str, '_StringExpression']
|
|
@ -1,21 +1,21 @@
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from pykusto.enums import Kind
|
from .enums import Kind
|
||||||
from pykusto.expressions import _AnyTypeColumn, _NumberType, _NumberExpression, _TimespanType, \
|
from .expressions import _AnyTypeColumn, _NumberType, _NumberExpression, _TimespanType, \
|
||||||
_DatetimeExpression, _TimespanExpression, _ArrayType, _DynamicType, _DatetimeType, BaseExpression, _BooleanType, \
|
_DatetimeExpression, _TimespanExpression, _ArrayType, _DynamicType, _DatetimeType, BaseExpression, _BooleanType, \
|
||||||
_ExpressionType, _StringType, _StringExpression, _BooleanExpression, \
|
_ExpressionType, _StringType, _StringExpression, _BooleanExpression, \
|
||||||
_NumberAggregationExpression, _MappingAggregationExpression, _ArrayAggregationExpression, _to_kql, _DynamicExpression, \
|
_NumberAggregationExpression, _MappingAggregationExpression, _ArrayAggregationExpression, _to_kql, _DynamicExpression, \
|
||||||
_ArrayExpression, _ColumnToType, BaseColumn, AnyExpression, _AnyAggregationExpression, _MappingExpression
|
_ArrayExpression, _ColumnToType, BaseColumn, AnyExpression, _AnyAggregationExpression, _MappingExpression
|
||||||
from pykusto.kql_converters import KQL
|
from .kql_converters import KQL
|
||||||
from pykusto.logger import _logger
|
from .logger import _logger
|
||||||
from pykusto.type_utils import _plain_expression, _KustoType
|
from .type_utils import _plain_expression, _KustoType
|
||||||
|
|
||||||
|
|
||||||
class Functions:
|
class Functions:
|
||||||
"""
|
"""
|
||||||
Recommended import style:\n
|
Recommended import style:\n
|
||||||
`from pykusto.functions import Functions as f`
|
`from pykusto import Functions as f`
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Scalar functions
|
# Scalar functions
|
|
@ -4,7 +4,7 @@ from itertools import chain
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
from typing import NewType, Union, Mapping, List, Tuple
|
from typing import NewType, Union, Mapping, List, Tuple
|
||||||
|
|
||||||
from pykusto.type_utils import _kql_converter, _KustoType, _NUMBER_TYPES
|
from .type_utils import _kql_converter, _KustoType, _NUMBER_TYPES
|
||||||
|
|
||||||
KQL = NewType('KQL', str)
|
KQL = NewType('KQL', str)
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ def _build_dynamic(d: Union[Mapping, List, Tuple]) -> KQL:
|
||||||
return KQL(f"pack({', '.join(map(_build_dynamic, chain(*d.items())))})")
|
return KQL(f"pack({', '.join(map(_build_dynamic, chain(*d.items())))})")
|
||||||
if isinstance(d, (List, Tuple)):
|
if isinstance(d, (List, Tuple)):
|
||||||
return KQL(f"pack_array({', '.join(map(_build_dynamic, d))})")
|
return KQL(f"pack_array({', '.join(map(_build_dynamic, d))})")
|
||||||
from pykusto.expressions import _to_kql
|
from .expressions import _to_kql
|
||||||
return _to_kql(d)
|
return _to_kql(d)
|
||||||
|
|
||||||
|
|
|
@ -5,17 +5,17 @@ from os import linesep
|
||||||
from types import FunctionType
|
from types import FunctionType
|
||||||
from typing import Tuple, List, Union, Optional
|
from typing import Tuple, List, Union, Optional
|
||||||
|
|
||||||
from pykusto.client import _Table, KustoResponse
|
from .client import _Table, KustoResponse
|
||||||
from pykusto.enums import Order, Nulls, JoinKind, Distribution, BagExpansion
|
from .enums import Order, Nulls, JoinKind, Distribution, BagExpansion
|
||||||
from pykusto.expressions import _BooleanType, _ExpressionType, AggregationExpression, _OrderedType, \
|
from .expressions import _BooleanType, _ExpressionType, AggregationExpression, _OrderedType, \
|
||||||
_StringType, _AssignmentBase, _AssignmentFromAggregationToColumn, _AssignmentToSingleColumn, _AnyTypeColumn, \
|
_StringType, _AssignmentBase, _AssignmentFromAggregationToColumn, _AssignmentToSingleColumn, _AnyTypeColumn, \
|
||||||
BaseExpression, \
|
BaseExpression, \
|
||||||
_AssignmentFromColumnToColumn, AnyExpression, _to_kql, _expression_to_type, BaseColumn, _NumberType
|
_AssignmentFromColumnToColumn, AnyExpression, _to_kql, _expression_to_type, BaseColumn, _NumberType
|
||||||
from pykusto.functions import Functions as f
|
from .functions import Functions as f
|
||||||
from pykusto.kql_converters import KQL
|
from .kql_converters import KQL
|
||||||
from pykusto.logger import _logger
|
from .logger import _logger
|
||||||
from pykusto.type_utils import _KustoType, _typed_column, _plain_expression
|
from .type_utils import _KustoType, _typed_column, _plain_expression
|
||||||
from pykusto.udf import _stringify_python_func
|
from .udf import _stringify_python_func
|
||||||
|
|
||||||
|
|
||||||
class Query:
|
class Query:
|
|
@ -12,10 +12,12 @@ from azure.kusto.data import KustoClient, ClientRequestProperties
|
||||||
from azure.kusto.data._models import KustoResultTable, KustoResultRow
|
from azure.kusto.data._models import KustoResultTable, KustoResultRow
|
||||||
from azure.kusto.data.response import KustoResponseDataSet
|
from azure.kusto.data.response import KustoResponseDataSet
|
||||||
|
|
||||||
from pykusto.client import _Table
|
# noinspection PyProtectedMember
|
||||||
from pykusto.expressions import _NumberColumn, _BooleanColumn, _ArrayColumn, _MappingColumn, _StringColumn, _DatetimeColumn, _TimespanColumn, _DynamicColumn
|
from pykusto._src.client import _Table
|
||||||
from pykusto.logger import _logger
|
# noinspection PyProtectedMember
|
||||||
from pykusto.type_utils import _KustoType
|
from pykusto._src.expressions import _NumberColumn, _BooleanColumn, _ArrayColumn, _MappingColumn, _StringColumn, _DatetimeColumn, _TimespanColumn, _DynamicColumn
|
||||||
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.type_utils import _KustoType
|
||||||
|
|
||||||
# Naming this variable "test_table" triggers the following bug: https://github.com/pytest-dev/pytest/issues/7378
|
# Naming this variable "test_table" triggers the following bug: https://github.com/pytest-dev/pytest/issues/7378
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
|
@ -40,7 +42,7 @@ class TestBase(TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
_logger.info("Running test: " + self._testMethodName)
|
test_logger.info("Running test: " + self._testMethodName)
|
||||||
|
|
||||||
def assertRaises(self, expected_exception: BaseException, test_callable: Callable, *args, **kwargs):
|
def assertRaises(self, expected_exception: BaseException, test_callable: Callable, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -191,3 +193,6 @@ class MockKustoClient(KustoClient):
|
||||||
if self.record_metadata or not metadata_query:
|
if self.record_metadata or not metadata_query:
|
||||||
self.recorded_queries.append(recorded_query)
|
self.recorded_queries.append(recorded_query)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
test_logger = logging.getLogger("pykusto_test")
|
||||||
|
|
|
@ -3,10 +3,9 @@ from unittest.mock import patch
|
||||||
|
|
||||||
from azure.kusto.data import KustoClient
|
from azure.kusto.data import KustoClient
|
||||||
|
|
||||||
from pykusto.client import PyKustoClient
|
from pykusto import PyKustoClient, column_generator as col, Query
|
||||||
from pykusto.expressions import column_generator as col
|
# noinspection PyProtectedMember
|
||||||
from pykusto.logger import _logger
|
from pykusto._src.logger import _logger
|
||||||
from pykusto.query import Query
|
|
||||||
from test.test_base import TestBase, MockKustoClient, RecordedQuery
|
from test.test_base import TestBase, MockKustoClient, RecordedQuery
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +73,7 @@ class TestClient(TestBase):
|
||||||
|
|
||||||
def test_default_authentication(self):
|
def test_default_authentication(self):
|
||||||
mock_kusto_client = MockKustoClient()
|
mock_kusto_client = MockKustoClient()
|
||||||
with patch('pykusto.client.PyKustoClient._get_client_for_cluster', lambda s, cluster: mock_kusto_client):
|
with patch('pykusto._src.client.PyKustoClient._get_client_for_cluster', lambda s, cluster: mock_kusto_client):
|
||||||
table = PyKustoClient('https://help.kusto.windows.net/')['test_db']['mock_table']
|
table = PyKustoClient('https://help.kusto.windows.net/')['test_db']['mock_table']
|
||||||
Query().take(5).execute(table)
|
Query().take(5).execute(table)
|
||||||
self.assertIs(
|
self.assertIs(
|
||||||
|
@ -87,7 +86,7 @@ class TestClient(TestBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_client_instances(self):
|
def test_client_instances(self):
|
||||||
with patch('pykusto.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
with patch('pykusto._src.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
||||||
client_1 = PyKustoClient('https://help.kusto.windows.net/')
|
client_1 = PyKustoClient('https://help.kusto.windows.net/')
|
||||||
client_2 = PyKustoClient('https://help.kusto.windows.net/')
|
client_2 = PyKustoClient('https://help.kusto.windows.net/')
|
||||||
|
|
||||||
|
@ -97,7 +96,7 @@ class TestClient(TestBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_client_instances_cached(self):
|
def test_client_instances_cached(self):
|
||||||
with patch('pykusto.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
with patch('pykusto._src.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
||||||
client_1 = PyKustoClient('https://help.kusto.windows.net/', use_global_cache=True)
|
client_1 = PyKustoClient('https://help.kusto.windows.net/', use_global_cache=True)
|
||||||
client_2 = PyKustoClient('https://help.kusto.windows.net/', use_global_cache=True)
|
client_2 = PyKustoClient('https://help.kusto.windows.net/', use_global_cache=True)
|
||||||
|
|
||||||
|
@ -107,7 +106,7 @@ class TestClient(TestBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_client_instances_cached_distinct(self):
|
def test_client_instances_cached_distinct(self):
|
||||||
with patch('pykusto.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
with patch('pykusto._src.client.PyKustoClient._get_client_for_cluster', MockKustoClient):
|
||||||
client_1 = PyKustoClient('https://help1.kusto.windows.net/', use_global_cache=True)
|
client_1 = PyKustoClient('https://help1.kusto.windows.net/', use_global_cache=True)
|
||||||
client_2 = PyKustoClient('https://help2.kusto.windows.net/', use_global_cache=True)
|
client_2 = PyKustoClient('https://help2.kusto.windows.net/', use_global_cache=True)
|
||||||
|
|
||||||
|
@ -154,14 +153,14 @@ class TestClient(TestBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_client_for_cluster_with_azure_cli_auth(self):
|
def test_client_for_cluster_with_azure_cli_auth(self):
|
||||||
with patch('pykusto.client._get_azure_cli_auth_token', lambda: "MOCK_TOKEN"), self.assertLogs(_logger, logging.INFO) as cm:
|
with patch('pykusto._src.client._get_azure_cli_auth_token', lambda: "MOCK_TOKEN"), self.assertLogs(_logger, logging.INFO) as cm:
|
||||||
client = PyKustoClient('https://help.kusto.windows.net', fetch_by_default=False)
|
client = PyKustoClient('https://help.kusto.windows.net', fetch_by_default=False)
|
||||||
self.assertIsInstance(client._PyKustoClient__client, KustoClient)
|
self.assertIsInstance(client._PyKustoClient__client, KustoClient)
|
||||||
self.assertEqual('https://help.kusto.windows.net', client.get_cluster_name())
|
self.assertEqual('https://help.kusto.windows.net', client.get_cluster_name())
|
||||||
self.assertEqual([], cm.output)
|
self.assertEqual([], cm.output)
|
||||||
|
|
||||||
def test_client_for_cluster_fallback_to_aad_device_auth(self):
|
def test_client_for_cluster_fallback_to_aad_device_auth(self):
|
||||||
with patch('pykusto.client._get_azure_cli_auth_token', lambda: None), self.assertLogs(_logger, logging.INFO) as cm:
|
with patch('pykusto._src.client._get_azure_cli_auth_token', lambda: None), self.assertLogs(_logger, logging.INFO) as cm:
|
||||||
client = PyKustoClient('https://help.kusto.windows.net', fetch_by_default=False)
|
client = PyKustoClient('https://help.kusto.windows.net', fetch_by_default=False)
|
||||||
self.assertIsInstance(client._PyKustoClient__client, KustoClient)
|
self.assertIsInstance(client._PyKustoClient__client, KustoClient)
|
||||||
self.assertEqual('https://help.kusto.windows.net', client.get_cluster_name())
|
self.assertEqual('https://help.kusto.windows.net', client.get_cluster_name())
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
from concurrent.futures import Future
|
from concurrent.futures import Future
|
||||||
from threading import Thread, Lock
|
from threading import Thread, Lock
|
||||||
|
|
||||||
from pykusto.client import PyKustoClient, _Database
|
from pykusto import PyKustoClient, Query
|
||||||
from pykusto.expressions import _StringColumn, _NumberColumn, _AnyTypeColumn, _BooleanColumn
|
# noinspection PyProtectedMember
|
||||||
from pykusto.query import Query
|
from pykusto._src.client import _Database
|
||||||
from pykusto.type_utils import _KustoType
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.expressions import _StringColumn, _NumberColumn, _AnyTypeColumn, _BooleanColumn
|
||||||
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.type_utils import _KustoType
|
||||||
from test.test_base import TestBase, MockKustoClient, mock_columns_response, RecordedQuery, mock_tables_response, mock_getschema_response, mock_databases_response
|
from test.test_base import TestBase, MockKustoClient, mock_columns_response, RecordedQuery, mock_tables_response, mock_getschema_response, mock_databases_response
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from datetime import timedelta, datetime
|
from datetime import timedelta, datetime
|
||||||
|
|
||||||
from pykusto.expressions import column_generator as col, _AnyTypeColumn
|
from pykusto import Functions as f
|
||||||
from pykusto.functions import Functions as f
|
from pykusto import column_generator as col, Query
|
||||||
from pykusto.query import Query
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.expressions import _AnyTypeColumn
|
||||||
from test.test_base import TestBase, mock_table as t
|
from test.test_base import TestBase, mock_table as t
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from pykusto.expressions import column_generator as col
|
from pykusto import column_generator as col, Functions as f, Query
|
||||||
from pykusto.functions import Functions as f
|
# noinspection PyProtectedMember
|
||||||
from pykusto.logger import _logger
|
from pykusto._src.logger import _logger
|
||||||
from pykusto.query import Query
|
from test.test_base import TestBase, test_logger
|
||||||
from test.test_base import TestBase
|
|
||||||
from test.test_base import mock_table as t
|
from test.test_base import mock_table as t
|
||||||
|
|
||||||
|
|
||||||
|
@ -814,7 +813,7 @@ class TestFunction(TestBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_iff_ambiguous_type(self):
|
def test_iff_ambiguous_type(self):
|
||||||
with self.assertLogs(_logger, logging.WARN) as cm:
|
with self.assertLogs(test_logger, logging.WARN) as cm:
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
" | project foo = iff(boolField, time(3.0:0:0.0), foo - bar)",
|
" | project foo = iff(boolField, time(3.0:0:0.0), foo - bar)",
|
||||||
Query().project(foo=f.iff(t.boolField, timedelta(3), col.foo - col.bar)).render()
|
Query().project(foo=f.iff(t.boolField, timedelta(3), col.foo - col.bar)).render()
|
||||||
|
|
|
@ -2,12 +2,9 @@ from os import linesep
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from pykusto.client import PyKustoClient
|
from pykusto import PyKustoClient, Order, Nulls, JoinKind, Distribution, BagExpansion, column_generator as col, Functions as f, Query, JoinException
|
||||||
from pykusto.enums import Order, Nulls, JoinKind, Distribution, BagExpansion
|
# noinspection PyProtectedMember
|
||||||
from pykusto.expressions import column_generator as col
|
from pykusto._src.type_utils import _KustoType
|
||||||
from pykusto.functions import Functions as f
|
|
||||||
from pykusto.query import Query, JoinException
|
|
||||||
from pykusto.type_utils import _KustoType
|
|
||||||
from test.test_base import TestBase, mock_databases_response, MockKustoClient, mock_response
|
from test.test_base import TestBase, mock_databases_response, MockKustoClient, mock_response
|
||||||
from test.test_base import mock_table as t, mock_columns_response
|
from test.test_base import mock_table as t, mock_columns_response
|
||||||
from test.udf import func, STRINGIFIED
|
from test.udf import func, STRINGIFIED
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
from pykusto.expressions import _to_kql
|
# noinspection PyProtectedMember
|
||||||
from pykusto.kql_converters import KQL
|
from pykusto._src.expressions import _to_kql
|
||||||
from pykusto.type_utils import _TypeRegistrar, _KustoType
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.kql_converters import KQL
|
||||||
|
# noinspection PyProtectedMember
|
||||||
|
from pykusto._src.type_utils import _TypeRegistrar, _KustoType
|
||||||
from test.test_base import TestBase
|
from test.test_base import TestBase
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче