Replacing httpx as the underlying request library

This commit is contained in:
sswest 2022-06-01 12:13:56 +08:00
parent ef2e6e166e
commit b62c08747f
8 changed files with 27 additions and 24 deletions

View File

@ -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"]

View File

@ -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

View File

@ -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):

View File

@ -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:

View File

@ -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)

View File

@ -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):

View File

@ -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):

View File

@ -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