mirror of
https://github.com/Infinidat/infi.clickhouse_orm.git
synced 2025-08-02 19:20:14 +03:00
Replacing httpx as the underlying request library
This commit is contained in:
parent
ef2e6e166e
commit
b62c08747f
|
@ -15,12 +15,12 @@ classifiers = [
|
||||||
"Topic :: Database"
|
"Topic :: Database"
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"requests",
|
"httpx >= 0.18.0",
|
||||||
"pytz",
|
"pytz",
|
||||||
"iso8601 >= 0.1.12",
|
"iso8601 >= 0.1.12",
|
||||||
"setuptools"
|
"setuptools"
|
||||||
]
|
]
|
||||||
version = "0.0.3"
|
version = "0.0.4"
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
where = ["src"]
|
where = ["src"]
|
||||||
|
|
|
@ -8,7 +8,7 @@ from collections import namedtuple
|
||||||
from typing import Type, Optional, Generator, Union, Any
|
from typing import Type, Optional, Generator, Union, Any
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
import requests
|
import httpx
|
||||||
|
|
||||||
from .models import ModelBase, MODEL
|
from .models import ModelBase, MODEL
|
||||||
from .utils import parse_tsv, import_submodules
|
from .utils import parse_tsv, import_submodules
|
||||||
|
@ -88,7 +88,7 @@ class Database(object):
|
||||||
inserting data and other operations.
|
inserting data and other operations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, db_name, db_url='http://localhost:8123/',
|
def __init__(self, db_name, db_url='http://localhost:18123/',
|
||||||
username=None, password=None, readonly=False, autocreate=True,
|
username=None, password=None, readonly=False, autocreate=True,
|
||||||
timeout=60, verify_ssl_cert=True, log_statements=False):
|
timeout=60, verify_ssl_cert=True, log_statements=False):
|
||||||
"""
|
"""
|
||||||
|
@ -109,8 +109,7 @@ class Database(object):
|
||||||
self.db_url = db_url
|
self.db_url = db_url
|
||||||
self.readonly = False
|
self.readonly = False
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.request_session = requests.Session()
|
self.request_session = httpx.Client(verify=verify_ssl_cert)
|
||||||
self.request_session.verify = verify_ssl_cert
|
|
||||||
if username:
|
if username:
|
||||||
self.request_session.auth = (username, password or '')
|
self.request_session.auth = (username, password or '')
|
||||||
self.log_statements = log_statements
|
self.log_statements = log_statements
|
||||||
|
@ -295,14 +294,17 @@ class Database(object):
|
||||||
query += ' FORMAT TabSeparatedWithNamesAndTypes'
|
query += ' FORMAT TabSeparatedWithNamesAndTypes'
|
||||||
query = self._substitute(query, model_class)
|
query = self._substitute(query, model_class)
|
||||||
r = self._send(query, settings, True)
|
r = self._send(query, settings, True)
|
||||||
lines = r.iter_lines()
|
try:
|
||||||
field_names = parse_tsv(next(lines))
|
lines = r.iter_lines()
|
||||||
field_types = parse_tsv(next(lines))
|
field_names = parse_tsv(next(lines))
|
||||||
model_class = model_class or ModelBase.create_ad_hoc_model(zip(field_names, field_types))
|
field_types = parse_tsv(next(lines))
|
||||||
for line in lines:
|
model_class = model_class or ModelBase.create_ad_hoc_model(zip(field_names, field_types))
|
||||||
# skip blank line left by WITH TOTALS modifier
|
for line in lines:
|
||||||
if line:
|
# skip blank line left by WITH TOTALS modifier
|
||||||
yield model_class.from_tsv(line, field_names, self.server_timezone, self)
|
if line:
|
||||||
|
yield model_class.from_tsv(line, field_names, self.server_timezone, self)
|
||||||
|
finally:
|
||||||
|
r.close()
|
||||||
|
|
||||||
def raw(self, query: str, settings: Optional[dict] = None, stream: bool = False) -> str:
|
def raw(self, query: str, settings: Optional[dict] = None, stream: bool = False) -> str:
|
||||||
"""
|
"""
|
||||||
|
@ -409,10 +411,11 @@ class Database(object):
|
||||||
if self.log_statements:
|
if self.log_statements:
|
||||||
logger.info(data)
|
logger.info(data)
|
||||||
params = self._build_params(settings)
|
params = self._build_params(settings)
|
||||||
r = self.request_session.post(
|
request = self.request_session.build_request(
|
||||||
self.db_url, params=params, data=data, stream=stream, timeout=self.timeout
|
method='POST', url=self.db_url, data=data, params=params
|
||||||
)
|
)
|
||||||
if r.status_code != 200:
|
r = self.request_session.send(request, stream=stream)
|
||||||
|
if isinstance(r, httpx.Response) and r.status_code != 200:
|
||||||
raise ServerError(r.text)
|
raise ServerError(r.text)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from infi.clickhouse_orm import *
|
from clickhouse_orm import *
|
||||||
from .base_test_with_data import Person
|
from tests.base_test_with_data import Person
|
||||||
|
|
||||||
|
|
||||||
class ConstraintsTest(unittest.TestCase):
|
class ConstraintsTest(unittest.TestCase):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from infi.clickhouse_orm import *
|
from clickhouse_orm import *
|
||||||
|
|
||||||
|
|
||||||
class DictionaryTestMixin:
|
class DictionaryTestMixin:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from infi.clickhouse_orm import *
|
from clickhouse_orm import *
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logging.getLogger("requests").setLevel(logging.WARNING)
|
logging.getLogger("requests").setLevel(logging.WARNING)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from infi.clickhouse_orm import *
|
from clickhouse_orm import *
|
||||||
|
|
||||||
|
|
||||||
class IndexesTest(unittest.TestCase):
|
class IndexesTest(unittest.TestCase):
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from infi.clickhouse_orm import database, engines, fields, models
|
from clickhouse_orm import database, engines, fields, models
|
||||||
|
|
||||||
|
|
||||||
class JoinTest(unittest.TestCase):
|
class JoinTest(unittest.TestCase):
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import unittest
|
import unittest
|
||||||
from infi.clickhouse_orm import F
|
from clickhouse_orm import F
|
||||||
from .base_test_with_data import *
|
from .base_test_with_data import *
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user