Reformat imports with isort (#3123)

Besides that:
1. Introduce `setup.py isort` for quick check
2. Introduce GH actions to check imports
This commit is contained in:
Alexander Kukushkin
2024-08-13 17:53:59 +02:00
committed by GitHub
parent c931da1eb3
commit 93eb4edbe6
88 changed files with 447 additions and 287 deletions
+17
View File
@@ -211,3 +211,20 @@ jobs:
- name: Generate documentation - name: Generate documentation
run: tox -m docs run: tox -m docs
isort:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: 3.12
cache: pip
- name: isort
uses: isort/isort-action@master
with:
requirementsFiles: "requirements.txt requirements.dev.txt requirements.docs.txt"
sort-paths: "patroni tests features setup.py"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
import os
import argparse import argparse
import os
import shutil import shutil
if __name__ == "__main__": if __name__ == "__main__":
+1
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
with open("data/{0}/{0}_cb.log".format(sys.argv[1]), "a+") as log: with open("data/{0}/{0}_cb.log".format(sys.argv[1]), "a+") as log:
log.write(" ".join(sys.argv[-3:]) + "\n") log.write(" ".join(sys.argv[-3:]) + "\n")
+6 -3
View File
@@ -1,9 +1,8 @@
import abc import abc
import datetime import datetime
import glob import glob
import os
import json import json
import psutil import os
import re import re
import shutil import shutil
import signal import signal
@@ -13,11 +12,14 @@ import sys
import tempfile import tempfile
import threading import threading
import time import time
from http.server import BaseHTTPRequestHandler, HTTPServer
import psutil
import yaml import yaml
import patroni.psycopg as psycopg import patroni.psycopg as psycopg
from http.server import BaseHTTPRequestHandler, HTTPServer
from patroni.request import PatroniRequest from patroni.request import PatroniRequest
@@ -498,6 +500,7 @@ class AbstractEtcdController(AbstractDcsController):
def _is_running(self): def _is_running(self):
from patroni.dcs.etcd import DnsCachingResolver from patroni.dcs.etcd import DnsCachingResolver
# if etcd is running, but we didn't start it # if etcd is running, but we didn't start it
try: try:
self._client = self._client_cls({'host': 'localhost', 'port': 2379, 'retry_timeout': 30, self._client = self._client_cls({'host': 'localhost', 'port': 2379, 'retry_timeout': 30,
+4 -2
View File
@@ -1,8 +1,10 @@
import json import json
import patroni.psycopg as pg
from time import sleep, time
from behave import step, then from behave import step, then
from time import sleep, time
import patroni.psycopg as pg
@step('I start {name:w}') @step('I start {name:w}')
+4 -3
View File
@@ -1,11 +1,12 @@
import json import json
import time import time
from behave import step, then
from dateutil import tz
from datetime import datetime from datetime import datetime
from functools import partial from functools import partial
from threading import Thread, Event from threading import Event, Thread
from behave import step, then
from dateutil import tz
tzutc = tz.tzutc() tzutc = tz.tzutc()
+4 -2
View File
@@ -1,14 +1,16 @@
import json import json
import parse
import shlex import shlex
import subprocess import subprocess
import sys import sys
import time import time
from datetime import datetime, timedelta
import parse
import yaml import yaml
from behave import register_type, step, then from behave import register_type, step, then
from dateutil import tz from dateutil import tz
from datetime import datetime, timedelta
tzutc = tz.tzutc() tzutc = tz.tzutc()
+1
View File
@@ -2,6 +2,7 @@ import json
import time import time
from behave import step, then from behave import step, then
import patroni.psycopg as pg import patroni.psycopg as pg
+2 -1
View File
@@ -1,6 +1,7 @@
from behave import step, then
import time import time
from behave import step, then
def polling_loop(timeout, interval=1): def polling_loop(timeout, interval=1):
"""Returns an iterator that returns values until timeout has passed. Timeout is measured from start of iteration.""" """Returns an iterator that returns values until timeout has passed. Timeout is measured from start of iteration."""
+2 -2
View File
@@ -13,7 +13,7 @@ from argparse import Namespace
from typing import Any, Dict, List, Optional, TYPE_CHECKING from typing import Any, Dict, List, Optional, TYPE_CHECKING
from patroni import MIN_PSYCOPG2, MIN_PSYCOPG3, parse_version from patroni import MIN_PSYCOPG2, MIN_PSYCOPG3, parse_version
from patroni.daemon import AbstractPatroniDaemon, abstract_main, get_base_arg_parser from patroni.daemon import abstract_main, AbstractPatroniDaemon, get_base_arg_parser
from patroni.tags import Tags from patroni.tags import Tags
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
@@ -268,8 +268,8 @@ def process_arguments() -> Namespace:
generate_config(args.configfile, False, args.dsn) generate_config(args.configfile, False, args.dsn)
sys.exit(0) sys.exit(0)
elif args.validate_config: elif args.validate_config:
from patroni.validator import schema
from patroni.config import Config, ConfigParseError from patroni.config import Config, ConfigParseError
from patroni.validator import schema
try: try:
Config(args.configfile, validator=schema) Config(args.configfile, validator=schema)
+8 -8
View File
@@ -7,32 +7,32 @@ utilises the API to perform these functions.
""" """
import base64 import base64
import datetime
import hmac import hmac
import json import json
import logging import logging
import time
import traceback
import dateutil.parser
import datetime
import os import os
import socket import socket
import sys import sys
import time
import traceback
from http.server import BaseHTTPRequestHandler, HTTPServer from http.server import BaseHTTPRequestHandler, HTTPServer
from ipaddress import ip_address, ip_network, IPv4Network, IPv6Network from ipaddress import ip_address, ip_network, IPv4Network, IPv6Network
from socketserver import ThreadingMixIn from socketserver import ThreadingMixIn
from threading import Thread from threading import Thread
from urllib.parse import urlparse, parse_qs
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union
from urllib.parse import parse_qs, urlparse
import dateutil.parser
from . import global_config, psycopg from . import global_config, psycopg
from .__main__ import Patroni from .__main__ import Patroni
from .dcs import Cluster from .dcs import Cluster
from .exceptions import PostgresConnectionException, PostgresException from .exceptions import PostgresConnectionException, PostgresException
from .postgresql.misc import postgres_version_to_int from .postgresql.misc import postgres_version_to_int
from .utils import deep_compare, enable_keepalive, parse_bool, patch_config, Retry, \ from .utils import cluster_as_json, deep_compare, enable_keepalive, parse_bool, \
RetryFailedError, parse_int, split_host_port, tzutc, uri, cluster_as_json parse_int, patch_config, Retry, RetryFailedError, split_host_port, tzutc, uri
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+5 -4
View File
@@ -1,15 +1,16 @@
"""Facilities related to Patroni configuration.""" """Facilities related to Patroni configuration."""
import re
import json import json
import logging import logging
import os import os
import re
import shutil import shutil
import tempfile import tempfile
import yaml
from collections import defaultdict from collections import defaultdict
from copy import deepcopy from copy import deepcopy
from typing import Any, Callable, Collection, Dict, List, Optional, Union, TYPE_CHECKING from typing import Any, Callable, Collection, Dict, List, Optional, TYPE_CHECKING, Union
import yaml
from . import PATRONI_ENV_PREFIX from . import PATRONI_ENV_PREFIX
from .collections import CaseInsensitiveDict, EMPTY_DICT from .collections import CaseInsensitiveDict, EMPTY_DICT
@@ -17,8 +18,8 @@ from .dcs import ClusterConfig
from .exceptions import ConfigParseError from .exceptions import ConfigParseError
from .file_perm import pg_perm from .file_perm import pg_perm
from .postgresql.config import ConfigHandler from .postgresql.config import ConfigHandler
from .validator import IntValidator
from .utils import deep_compare, parse_bool, parse_int, patch_config from .utils import deep_compare, parse_bool, parse_int, patch_config
from .validator import IntValidator
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+6 -5
View File
@@ -2,14 +2,16 @@
import abc import abc
import logging import logging
import os import os
import psutil
import socket import socket
import sys import sys
from contextlib import contextmanager
from getpass import getpass, getuser
from typing import Any, Dict, Iterator, List, Optional, TextIO, Tuple, TYPE_CHECKING, Union
import psutil
import yaml import yaml
from getpass import getuser, getpass
from contextlib import contextmanager
from typing import Any, Dict, Iterator, List, Optional, TextIO, Tuple, TYPE_CHECKING, Union
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Cursor from psycopg import Cursor
from psycopg2 import cursor from psycopg2 import cursor
@@ -23,7 +25,6 @@ from .postgresql.config import ConfigHandler, parse_dsn
from .postgresql.misc import postgres_major_version_to_int from .postgresql.misc import postgres_major_version_to_int
from .utils import get_major_version, parse_bool, patch_config, read_stripped from .utils import get_major_version, parse_bool, patch_config, read_stripped
# Mapping between the libpq connection parameters and the environment variables. # Mapping between the libpq connection parameters and the environment variables.
# This dict should be kept in sync with `patroni.utils._AUTH_ALLOWED_PARAMETERS` # This dict should be kept in sync with `patroni.utils._AUTH_ALLOWED_PARAMETERS`
# (we use "username" in the Patroni config for some reason, other parameter names are the same). # (we use "username" in the Patroni config for some reason, other parameter names are the same).
+12 -9
View File
@@ -12,12 +12,9 @@
If it is also missing in the configuration file we assume that this is just a normal Patroni cluster (not Citus). If it is also missing in the configuration file we assume that this is just a normal Patroni cluster (not Citus).
""" """
import click
import codecs import codecs
import copy import copy
import datetime import datetime
import dateutil.parser
import dateutil.tz
import difflib import difflib
import io import io
import json import json
@@ -28,15 +25,21 @@ import shutil
import subprocess import subprocess
import sys import sys
import tempfile import tempfile
import urllib3
import time import time
import yaml
from collections import defaultdict from collections import defaultdict
from contextlib import contextmanager from contextlib import contextmanager
from prettytable import ALL, FRAME, PrettyTable from typing import Any, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union
from urllib.parse import urlparse from urllib.parse import urlparse
from typing import Any, Dict, Iterator, List, Optional, Union, Tuple, TYPE_CHECKING
import click
import dateutil.parser
import dateutil.tz
import urllib3
import yaml
from prettytable import ALL, FRAME, PrettyTable
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Cursor from psycopg import Cursor
from psycopg2 import cursor from psycopg2 import cursor
@@ -52,12 +55,12 @@ except ImportError: # pragma: no cover
from . import global_config from . import global_config
from .config import Config from .config import Config
from .dcs import get_dcs as _get_dcs, AbstractDCS, Cluster, Member from .dcs import AbstractDCS, Cluster, get_dcs as _get_dcs, Member
from .exceptions import PatroniException from .exceptions import PatroniException
from .postgresql.misc import postgres_version_to_int from .postgresql.misc import postgres_version_to_int
from .postgresql.mpp import get_mpp from .postgresql.mpp import get_mpp
from .utils import cluster_as_json, patch_config, polling_loop
from .request import PatroniRequest from .request import PatroniRequest
from .utils import cluster_as_json, patch_config, polling_loop
from .version import __version__ from .version import __version__
CONFIG_DIR_PATH = click.get_app_dir('patroni') CONFIG_DIR_PATH = click.get_app_dir('patroni')
+3 -3
View File
@@ -5,22 +5,22 @@ import json
import logging import logging
import re import re
import time import time
from collections import defaultdict from collections import defaultdict
from copy import deepcopy from copy import deepcopy
from random import randint from random import randint
from threading import Event, Lock from threading import Event, Lock
from typing import Any, Callable, Collection, Dict, Iterator, List, \ from typing import Any, Callable, Collection, Dict, Iterator, List, \
NamedTuple, Optional, Set, Tuple, Type, TYPE_CHECKING, Union NamedTuple, Optional, Set, Tuple, Type, TYPE_CHECKING, Union
from urllib.parse import urlparse, urlunparse, parse_qsl from urllib.parse import parse_qsl, urlparse, urlunparse
import dateutil.parser import dateutil.parser
from .. import global_config from .. import global_config
from ..dynamic_loader import iter_classes, iter_modules from ..dynamic_loader import iter_classes, iter_modules
from ..exceptions import PatroniFatalException from ..exceptions import PatroniFatalException
from ..utils import deep_compare, uri
from ..tags import Tags from ..tags import Tags
from ..utils import parse_int from ..utils import deep_compare, parse_int, uri
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+10 -6
View File
@@ -1,4 +1,5 @@
from __future__ import absolute_import from __future__ import absolute_import
import json import json
import logging import logging
import os import os
@@ -6,20 +7,23 @@ import re
import socket import socket
import ssl import ssl
import time import time
import urllib3
from collections import defaultdict from collections import defaultdict
from consul import ConsulException, NotFound, base
from http.client import HTTPException from http.client import HTTPException
from typing import Any, Callable, Dict, List, Mapping, NamedTuple, Optional, Tuple, TYPE_CHECKING, Union
from urllib.parse import quote, urlencode, urlparse
import urllib3
from consul import base, ConsulException, NotFound
from urllib3.exceptions import HTTPError from urllib3.exceptions import HTTPError
from urllib.parse import urlencode, urlparse, quote
from typing import Any, Callable, Dict, List, Mapping, NamedTuple, Optional, Union, Tuple, TYPE_CHECKING
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, \
TimelineHistory, ReturnFalseException, catch_return_false_exception
from ..exceptions import DCSError from ..exceptions import DCSError
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..utils import deep_compare, parse_bool, Retry, RetryFailedError, split_host_port, uri, USER_AGENT from ..utils import deep_compare, parse_bool, Retry, RetryFailedError, split_host_port, uri, USER_AGENT
from . import AbstractDCS, catch_return_false_exception, Cluster, ClusterConfig, \
Failover, Leader, Member, ReturnFalseException, Status, SyncState, TimelineHistory
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+13 -9
View File
@@ -1,32 +1,36 @@
from __future__ import absolute_import from __future__ import absolute_import
import abc import abc
import etcd
import json import json
import logging import logging
import os import os
import urllib3.util.connection
import random import random
import socket import socket
import time import time
from collections import defaultdict from collections import defaultdict
from copy import deepcopy from copy import deepcopy
from dns.exception import DNSException
from dns import resolver
from http.client import HTTPException from http.client import HTTPException
from queue import Queue from queue import Queue
from threading import Thread from threading import Thread
from typing import Any, Callable, Collection, Dict, List, Optional, Union, Tuple, Type, TYPE_CHECKING from typing import Any, Callable, Collection, Dict, List, Optional, Tuple, Type, TYPE_CHECKING, Union
from urllib.parse import urlparse from urllib.parse import urlparse
from urllib3 import Timeout
from urllib3.exceptions import HTTPError, ReadTimeoutError, ProtocolError
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, \ import etcd
TimelineHistory, ReturnFalseException, catch_return_false_exception import urllib3.util.connection
from dns import resolver
from dns.exception import DNSException
from urllib3 import Timeout
from urllib3.exceptions import HTTPError, ProtocolError, ReadTimeoutError
from ..exceptions import DCSError from ..exceptions import DCSError
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..request import get as requests_get from ..request import get as requests_get
from ..utils import Retry, RetryFailedError, split_host_port, uri, USER_AGENT from ..utils import Retry, RetryFailedError, split_host_port, uri, USER_AGENT
from . import AbstractDCS, catch_return_false_exception, Cluster, ClusterConfig, \
Failover, Leader, Member, ReturnFalseException, Status, SyncState, TimelineHistory
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+9 -6
View File
@@ -1,26 +1,29 @@
from __future__ import absolute_import from __future__ import absolute_import
import base64 import base64
import etcd
import json import json
import logging import logging
import os import os
import socket import socket
import sys import sys
import time import time
import urllib3
from collections import defaultdict from collections import defaultdict
from enum import IntEnum from enum import IntEnum
from urllib3.exceptions import ReadTimeoutError, ProtocolError
from threading import Condition, Lock, Thread from threading import Condition, Lock, Thread
from typing import Any, Callable, Collection, Dict, Iterator, List, Optional, Tuple, Type, TYPE_CHECKING, Union from typing import Any, Callable, Collection, Dict, Iterator, List, Optional, Tuple, Type, TYPE_CHECKING, Union
from . import ClusterConfig, Cluster, Failover, Leader, Member, Status, SyncState, \ import etcd
TimelineHistory, catch_return_false_exception import urllib3
from .etcd import AbstractEtcdClientWithFailover, AbstractEtcd, catch_etcd_errors, DnsCachingResolver, Retry
from urllib3.exceptions import ProtocolError, ReadTimeoutError
from ..exceptions import DCSError, PatroniException from ..exceptions import DCSError, PatroniException
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..utils import deep_compare, enable_keepalive, iter_response_objects, RetryFailedError, USER_AGENT from ..utils import deep_compare, enable_keepalive, iter_response_objects, RetryFailedError, USER_AGENT
from . import catch_return_false_exception, Cluster, ClusterConfig, \
Failover, Leader, Member, Status, SyncState, TimelineHistory
from .etcd import AbstractEtcd, AbstractEtcdClientWithFailover, catch_etcd_errors, DnsCachingResolver, Retry
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+2 -2
View File
@@ -5,11 +5,11 @@ import time
from typing import Any, Callable, Dict, List, Union from typing import Any, Callable, Dict, List, Union
from . import Cluster
from .zookeeper import ZooKeeper
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..request import get as requests_get from ..request import get as requests_get
from ..utils import uri from ..utils import uri
from . import Cluster
from .zookeeper import ZooKeeper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+10 -7
View File
@@ -9,22 +9,25 @@ import random
import socket import socket
import tempfile import tempfile
import time import time
import urllib3
import yaml
from collections import defaultdict from collections import defaultdict
from copy import deepcopy from copy import deepcopy
from http.client import HTTPException from http.client import HTTPException
from urllib3.exceptions import HTTPError
from threading import Condition, Lock, Thread from threading import Condition, Lock, Thread
from typing import Any, Callable, Collection, Dict, List, Optional, Tuple, Type, Union, TYPE_CHECKING from typing import Any, Callable, Collection, Dict, List, Optional, Tuple, Type, TYPE_CHECKING, Union
import urllib3
import yaml
from urllib3.exceptions import HTTPError
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, TimelineHistory
from ..collections import EMPTY_DICT from ..collections import EMPTY_DICT
from ..exceptions import DCSError from ..exceptions import DCSError
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..utils import deep_compare, iter_response_objects, keepalive_socket_options, \ from ..utils import deep_compare, iter_response_objects, \
Retry, RetryFailedError, tzutc, uri, USER_AGENT keepalive_socket_options, Retry, RetryFailedError, tzutc, uri, USER_AGENT
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, TimelineHistory
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+6 -4
View File
@@ -5,17 +5,19 @@ import threading
import time import time
from collections import defaultdict from collections import defaultdict
from pysyncobj import SyncObj, SyncObjConf, replicated, FAIL_REASON from typing import Any, Callable, Collection, Dict, List, Optional, Set, TYPE_CHECKING, Union
from pysyncobj import FAIL_REASON, replicated, SyncObj, SyncObjConf
from pysyncobj.dns_resolver import globalDnsResolver from pysyncobj.dns_resolver import globalDnsResolver
from pysyncobj.node import TCPNode from pysyncobj.node import TCPNode
from pysyncobj.transport import TCPTransport, CONNECTION_STATE from pysyncobj.transport import CONNECTION_STATE, TCPTransport
from pysyncobj.utility import TcpUtility from pysyncobj.utility import TcpUtility
from typing import Any, Callable, Collection, Dict, List, Optional, Set, Union, TYPE_CHECKING
from . import AbstractDCS, ClusterConfig, Cluster, Failover, Leader, Member, Status, SyncState, TimelineHistory
from ..exceptions import DCSError from ..exceptions import DCSError
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..utils import validate_directory from ..utils import validate_directory
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, TimelineHistory
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+6 -4
View File
@@ -4,18 +4,20 @@ import select
import socket import socket
import time import time
from kazoo.client import KazooClient, KazooState, KazooRetry from typing import Any, Callable, Dict, List, Optional, Tuple, TYPE_CHECKING, Union
from kazoo.exceptions import ConnectionClosedError, NoNodeError, NodeExistsError, SessionExpiredError
from kazoo.client import KazooClient, KazooRetry, KazooState
from kazoo.exceptions import ConnectionClosedError, NodeExistsError, NoNodeError, SessionExpiredError
from kazoo.handlers.threading import AsyncResult, SequentialThreadingHandler from kazoo.handlers.threading import AsyncResult, SequentialThreadingHandler
from kazoo.protocol.states import KeeperState, WatchedEvent, ZnodeStat from kazoo.protocol.states import KeeperState, WatchedEvent, ZnodeStat
from kazoo.retry import RetryFailedError from kazoo.retry import RetryFailedError
from kazoo.security import ACL, make_acl from kazoo.security import ACL, make_acl
from typing import Any, Callable, Dict, List, Optional, Union, Tuple, TYPE_CHECKING
from . import AbstractDCS, ClusterConfig, Cluster, Failover, Leader, Member, Status, SyncState, TimelineHistory
from ..exceptions import DCSError from ..exceptions import DCSError
from ..postgresql.mpp import AbstractMPP from ..postgresql.mpp import AbstractMPP
from ..utils import deep_compare from ..utils import deep_compare
from . import AbstractDCS, Cluster, ClusterConfig, Failover, Leader, Member, Status, SyncState, TimelineHistory
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from ..config import Config from ..config import Config
+2 -2
View File
@@ -5,9 +5,9 @@ import logging
import os import os
import pkgutil import pkgutil
import sys import sys
from types import ModuleType
from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, TYPE_CHECKING, Type, TypeVar, Union from types import ModuleType
from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Type, TYPE_CHECKING, TypeVar, Union
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .config import Config from .config import Config
+1 -1
View File
@@ -8,7 +8,7 @@ import sys
import types import types
from copy import deepcopy from copy import deepcopy
from typing import Any, Dict, List, Optional, Union, TYPE_CHECKING from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union
from .collections import EMPTY_DICT from .collections import EMPTY_DICT
from .utils import parse_bool, parse_int from .utils import parse_bool, parse_int
+3 -3
View File
@@ -8,14 +8,14 @@ import uuid
from multiprocessing.pool import ThreadPool from multiprocessing.pool import ThreadPool
from threading import RLock from threading import RLock
from typing import Any, Callable, Collection, Dict, List, NamedTuple, Optional, Union, Tuple, TYPE_CHECKING from typing import Any, Callable, Collection, Dict, List, NamedTuple, Optional, Tuple, TYPE_CHECKING, Union
from . import global_config, psycopg from . import global_config, psycopg
from .__main__ import Patroni from .__main__ import Patroni
from .async_executor import AsyncExecutor, CriticalTask from .async_executor import AsyncExecutor, CriticalTask
from .collections import CaseInsensitiveSet from .collections import CaseInsensitiveSet
from .dcs import AbstractDCS, Cluster, Leader, Member, RemoteMember, Status, SyncState, slot_name_from_member_name from .dcs import AbstractDCS, Cluster, Leader, Member, RemoteMember, slot_name_from_member_name, Status, SyncState
from .exceptions import DCSError, PostgresConnectionException, PatroniFatalException from .exceptions import DCSError, PatroniFatalException, PostgresConnectionException
from .postgresql.callback_executor import CallbackAction from .postgresql.callback_executor import CallbackAction
from .postgresql.misc import postgres_version_to_int from .postgresql.misc import postgres_version_to_int
from .postgresql.postmaster import PostmasterProcess from .postgresql.postmaster import PostmasterProcess
+4 -5
View File
@@ -8,12 +8,11 @@ import os
import sys import sys
from copy import deepcopy from copy import deepcopy
from logging.handlers import RotatingFileHandler
from queue import Queue, Full
from threading import Lock, Thread
from io import TextIOWrapper from io import TextIOWrapper
from typing import Any, Dict, List, Optional, Union, TYPE_CHECKING from logging.handlers import RotatingFileHandler
from queue import Full, Queue
from threading import Lock, Thread
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union
from .file_perm import pg_perm from .file_perm import pg_perm
from .utils import deep_compare, parse_int from .utils import deep_compare, parse_int
+10 -9
View File
@@ -9,11 +9,19 @@ import time
from contextlib import contextmanager from contextlib import contextmanager
from copy import deepcopy from copy import deepcopy
from datetime import datetime from datetime import datetime
from threading import current_thread, Lock
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union
from dateutil import tz from dateutil import tz
from psutil import TimeoutExpired from psutil import TimeoutExpired
from threading import current_thread, Lock
from typing import Any, Callable, Dict, Iterator, List, Optional, Union, Tuple, TYPE_CHECKING
from .. import global_config, psycopg
from ..async_executor import CriticalTask
from ..collections import CaseInsensitiveDict, CaseInsensitiveSet, EMPTY_DICT
from ..dcs import Cluster, Leader, Member
from ..exceptions import PostgresConnectionException
from ..tags import Tags
from ..utils import data_directory_is_empty, parse_int, polling_loop, Retry, RetryFailedError
from .bootstrap import Bootstrap from .bootstrap import Bootstrap
from .callback_executor import CallbackAction, CallbackExecutor from .callback_executor import CallbackAction, CallbackExecutor
from .cancellable import CancellableSubprocess from .cancellable import CancellableSubprocess
@@ -24,13 +32,6 @@ from .mpp import AbstractMPP
from .postmaster import PostmasterProcess from .postmaster import PostmasterProcess
from .slots import SlotsHandler from .slots import SlotsHandler
from .sync import SyncHandler from .sync import SyncHandler
from .. import global_config, psycopg
from ..async_executor import CriticalTask
from ..collections import CaseInsensitiveSet, CaseInsensitiveDict, EMPTY_DICT
from ..dcs import Cluster, Leader, Member
from ..exceptions import PostgresConnectionException
from ..utils import Retry, RetryFailedError, polling_loop, data_directory_is_empty, parse_int
from ..tags import Tags
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Connection as Connection3, Cursor from psycopg import Connection as Connection3, Cursor
+1 -1
View File
@@ -4,7 +4,7 @@ import shlex
import tempfile import tempfile
import time import time
from typing import Any, Callable, Dict, List, Optional, Union, Tuple, TYPE_CHECKING from typing import Any, Callable, Dict, List, Optional, Tuple, TYPE_CHECKING, Union
from ..async_executor import CriticalTask from ..async_executor import CriticalTask
from ..collections import EMPTY_DICT from ..collections import EMPTY_DICT
+5 -3
View File
@@ -1,11 +1,13 @@
import logging import logging
import psutil
import subprocess import subprocess
from threading import Lock
from typing import Any, Dict, List, Optional, Union
import psutil
from patroni.exceptions import PostgresException from patroni.exceptions import PostgresException
from patroni.utils import polling_loop from patroni.utils import polling_loop
from threading import Lock
from typing import Any, Dict, List, Optional, Union
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+6 -6
View File
@@ -7,19 +7,19 @@ import stat
import time import time
from contextlib import contextmanager from contextlib import contextmanager
from urllib.parse import urlparse, parse_qsl, unquote
from types import TracebackType from types import TracebackType
from typing import Any, Callable, Collection, Dict, Iterator, List, Optional, Union, Tuple, Type, TYPE_CHECKING from typing import Any, Callable, Collection, Dict, Iterator, List, Optional, Tuple, Type, TYPE_CHECKING, Union
from urllib.parse import parse_qsl, unquote, urlparse
from .validator import recovery_parameters, transform_postgresql_parameter_value, transform_recovery_parameter_value
from .. import global_config from .. import global_config
from ..collections import CaseInsensitiveDict, CaseInsensitiveSet, EMPTY_DICT from ..collections import CaseInsensitiveDict, CaseInsensitiveSet, EMPTY_DICT
from ..dcs import Leader, Member, RemoteMember, slot_name_from_member_name from ..dcs import Leader, Member, RemoteMember, slot_name_from_member_name
from ..exceptions import PatroniFatalException, PostgresConnectionException from ..exceptions import PatroniFatalException, PostgresConnectionException
from ..file_perm import pg_perm from ..file_perm import pg_perm
from ..utils import (compare_values, maybe_convert_from_base_unit, parse_bool, parse_int, from ..utils import compare_values, is_subpath, maybe_convert_from_base_unit, \
split_host_port, uri, validate_directory, is_subpath) parse_bool, parse_int, split_host_port, uri, validate_directory
from ..validator import IntValidator, EnumValidator from ..validator import EnumValidator, IntValidator
from .validator import recovery_parameters, transform_postgresql_parameter_value, transform_recovery_parameter_value
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from . import Postgresql from . import Postgresql
+2 -1
View File
@@ -2,7 +2,8 @@ import logging
from contextlib import contextmanager from contextlib import contextmanager
from threading import Lock from threading import Lock
from typing import Any, Dict, Iterator, List, Optional, Union, Tuple, TYPE_CHECKING from typing import Any, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Connection, Cursor from psycopg import Connection, Cursor
from psycopg2 import connection, cursor from psycopg2 import connection, cursor
+2 -2
View File
@@ -5,15 +5,15 @@ supported MPP cluster. However, we may consider adapting other databases such as
""" """
import abc import abc
from typing import Any, Dict, Iterator, Optional, Union, Tuple, Type, TYPE_CHECKING from typing import Any, Dict, Iterator, Optional, Tuple, Type, TYPE_CHECKING, Union
from ...dcs import Cluster from ...dcs import Cluster
from ...dynamic_loader import iter_classes from ...dynamic_loader import iter_classes
from ...exceptions import PatroniException from ...exceptions import PatroniException
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .. import Postgresql
from ...config import Config from ...config import Config
from .. import Postgresql
class AbstractMPP(abc.ABC): class AbstractMPP(abc.ABC):
+3 -3
View File
@@ -3,13 +3,13 @@ import re
import time import time
from threading import Condition, Event, Thread from threading import Condition, Event, Thread
from typing import Any, Collection, Dict, Iterator, List, Optional, Set, Tuple, TYPE_CHECKING, Union
from urllib.parse import urlparse from urllib.parse import urlparse
from typing import Any, Collection, Dict, Iterator, List, Optional, Union, Set, Tuple, TYPE_CHECKING
from . import AbstractMPP, AbstractMPPHandler
from ...dcs import Cluster from ...dcs import Cluster
from ...psycopg import connect, quote_ident, ProgrammingError from ...psycopg import connect, ProgrammingError, quote_ident
from ...utils import parse_int from ...utils import parse_int
from . import AbstractMPP, AbstractMPPHandler
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .. import Postgresql from .. import Postgresql
+4 -3
View File
@@ -1,16 +1,17 @@
import logging import logging
import multiprocessing import multiprocessing
import os import os
import psutil
import re import re
import signal import signal
import subprocess import subprocess
import sys import sys
from multiprocessing.connection import Connection from multiprocessing.connection import Connection
from typing import Dict, Optional, List from typing import Dict, List, Optional
from patroni import PATRONI_ENV_PREFIX, KUBERNETES_ENV_PREFIX import psutil
from patroni import KUBERNETES_ENV_PREFIX, PATRONI_ENV_PREFIX
# avoid spawning the resource tracker process # avoid spawning the resource tracker process
if sys.version_info >= (3, 8): # pragma: no cover if sys.version_info >= (3, 8): # pragma: no cover
+4 -4
View File
@@ -7,14 +7,14 @@ import subprocess
from enum import IntEnum from enum import IntEnum
from threading import Lock, Thread from threading import Lock, Thread
from typing import Any, Callable, Dict, List, Optional, Union, Tuple from typing import Any, Callable, Dict, List, Optional, Tuple, Union
from . import Postgresql
from .connection import get_connection_cursor
from .misc import format_lsn, fsync_dir, parse_history, parse_lsn
from ..async_executor import CriticalTask from ..async_executor import CriticalTask
from ..collections import EMPTY_DICT from ..collections import EMPTY_DICT
from ..dcs import Leader, RemoteMember from ..dcs import Leader, RemoteMember
from . import Postgresql
from .connection import get_connection_cursor
from .misc import format_lsn, fsync_dir, parse_history, parse_lsn
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+5 -3
View File
@@ -6,22 +6,24 @@ Provides classes for the creation, monitoring, management and synchronisation of
import logging import logging
import os import os
import shutil import shutil
from collections import defaultdict from collections import defaultdict
from contextlib import contextmanager from contextlib import contextmanager
from threading import Condition, Thread from threading import Condition, Thread
from typing import Any, Dict, Iterator, List, Optional, Union, Tuple, TYPE_CHECKING, Collection from typing import Any, Collection, Dict, Iterator, List, Optional, Tuple, TYPE_CHECKING, Union
from .connection import get_connection_cursor
from .misc import format_lsn, fsync_dir
from .. import global_config from .. import global_config
from ..dcs import Cluster, Leader from ..dcs import Cluster, Leader
from ..file_perm import pg_perm from ..file_perm import pg_perm
from ..psycopg import OperationalError from ..psycopg import OperationalError
from ..tags import Tags from ..tags import Tags
from .connection import get_connection_cursor
from .misc import format_lsn, fsync_dir
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Cursor from psycopg import Cursor
from psycopg2 import cursor from psycopg2 import cursor
from . import Postgresql from . import Postgresql
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+1
View File
@@ -9,6 +9,7 @@ from .. import global_config
from ..collections import CaseInsensitiveDict, CaseInsensitiveSet from ..collections import CaseInsensitiveDict, CaseInsensitiveSet
from ..dcs import Cluster from ..dcs import Cluster
from ..psycopg import quote_ident as _quote_ident from ..psycopg import quote_ident as _quote_ident
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from . import Postgresql from . import Postgresql
+4 -3
View File
@@ -1,14 +1,15 @@
import abc import abc
from copy import deepcopy
import logging import logging
import yaml
from copy import deepcopy
from typing import Any, Dict, Iterator, List, MutableMapping, Optional, Tuple, Type, Union from typing import Any, Dict, Iterator, List, MutableMapping, Optional, Tuple, Type, Union
from .available_parameters import get_validator_files, PathLikeObj import yaml
from ..collections import CaseInsensitiveDict, CaseInsensitiveSet from ..collections import CaseInsensitiveDict, CaseInsensitiveSet
from ..exceptions import PatroniException from ..exceptions import PatroniException
from ..utils import parse_bool, parse_int, parse_real from ..utils import parse_bool, parse_int, parse_real
from .available_parameters import get_validator_files, PathLikeObj
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+5 -2
View File
@@ -5,6 +5,7 @@ This module is able to handle both :mod:`pyscopg2` and :mod:`psycopg`, and it ex
``2.5.4``. ``2.5.4``.
""" """
from typing import Any, Optional, TYPE_CHECKING, Union from typing import Any, Optional, TYPE_CHECKING, Union
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from psycopg import Connection from psycopg import Connection
from psycopg2 import connection, cursor from psycopg2 import connection, cursor
@@ -14,10 +15,11 @@ __all__ = ['connect', 'quote_ident', 'quote_literal', 'DatabaseError', 'Error',
_legacy = False _legacy = False
try: try:
from psycopg2 import __version__ from psycopg2 import __version__
from . import MIN_PSYCOPG2, parse_version from . import MIN_PSYCOPG2, parse_version
if parse_version(__version__) < MIN_PSYCOPG2: if parse_version(__version__) < MIN_PSYCOPG2:
raise ImportError raise ImportError
from psycopg2 import connect as _connect, Error, DatabaseError, OperationalError, ProgrammingError from psycopg2 import connect as _connect, DatabaseError, Error, OperationalError, ProgrammingError
from psycopg2.extensions import adapt from psycopg2.extensions import adapt
try: try:
@@ -44,8 +46,9 @@ try:
except ImportError: except ImportError:
import types import types
from psycopg import DatabaseError, Error, OperationalError, ProgrammingError, sql
# isort: off
from psycopg import connect as __connect # pyright: ignore [reportUnknownVariableType] from psycopg import connect as __connect # pyright: ignore [reportUnknownVariableType]
from psycopg import sql, Error, DatabaseError, OperationalError, ProgrammingError
def __get_parameter_status(self: 'Connection[Any]', param_name: str) -> Optional[str]: def __get_parameter_status(self: 'Connection[Any]', param_name: str) -> Optional[str]:
"""Helper function to be injected into :class:`Connection` object. """Helper function to be injected into :class:`Connection` object.
+1 -1
View File
@@ -1,7 +1,7 @@
import logging import logging
from .config import Config from .config import Config
from .daemon import AbstractPatroniDaemon, abstract_main, get_base_arg_parser from .daemon import abstract_main, AbstractPatroniDaemon, get_base_arg_parser
from .dcs.raft import KVStoreTTL from .dcs.raft import KVStoreTTL
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+2 -2
View File
@@ -1,11 +1,11 @@
"""Facilities for handling communication with Patroni's REST API.""" """Facilities for handling communication with Patroni's REST API."""
import json import json
import urllib3
from typing import Any, Dict, Optional, Union from typing import Any, Dict, Optional, Union
from urllib.parse import urlparse, urlunparse from urllib.parse import urlparse, urlunparse
import urllib3
from .config import Config from .config import Config
from .dcs import Member from .dcs import Member
from .utils import USER_AGENT from .utils import USER_AGENT
+3 -2
View File
@@ -3,13 +3,14 @@
import json import json
import logging import logging
import sys import sys
from typing import Any, Optional
import boto3 import boto3
from botocore.exceptions import ClientError from botocore.exceptions import ClientError
from botocore.utils import IMDSFetcher from botocore.utils import IMDSFetcher
from typing import Any, Optional
from ..utils import Retry, RetryFailedError from ..utils import Retry, RetryFailedError
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+3 -2
View File
@@ -9,11 +9,12 @@ builds the CLI that makes an interface with the actual commands.
See :class:ExitCode` for possible exit codes of this main script. See :class:ExitCode` for possible exit codes of this main script.
""" """
from argparse import ArgumentParser
from enum import IntEnum
import logging import logging
import sys import sys
from argparse import ArgumentParser
from enum import IntEnum
from .config_switch import run_barman_config_switch from .config_switch import run_barman_config_switch
from .recover import run_barman_recover from .recover import run_barman_recover
from .utils import ApiNotOk, PgBackupApi, set_up_logging from .utils import ApiNotOk, PgBackupApi, set_up_logging
+3 -3
View File
@@ -14,15 +14,15 @@ the same host as Barman.
Refer to :class:`ExitCode` for possible exit codes of this sub-command. Refer to :class:`ExitCode` for possible exit codes of this sub-command.
""" """
from argparse import Namespace
from enum import IntEnum
import logging import logging
import time import time
from argparse import Namespace
from enum import IntEnum
from typing import Optional, TYPE_CHECKING from typing import Optional, TYPE_CHECKING
from .utils import OperationStatus, RetriesExceeded from .utils import OperationStatus, RetriesExceeded
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .utils import PgBackupApi from .utils import PgBackupApi
+3 -3
View File
@@ -14,15 +14,15 @@ have ``pg-backup-api`` configured and running in the same host as Barman.
Refer to :class:`ExitCode` for possible exit codes of this sub-command. Refer to :class:`ExitCode` for possible exit codes of this sub-command.
""" """
from argparse import Namespace
from enum import IntEnum
import logging import logging
import time import time
from argparse import Namespace
from enum import IntEnum
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from .utils import OperationStatus, RetriesExceeded from .utils import OperationStatus, RetriesExceeded
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .utils import PgBackupApi from .utils import PgBackupApi
+3 -2
View File
@@ -2,11 +2,12 @@
"""Utilitary stuff to be used by Barman related scripts.""" """Utilitary stuff to be used by Barman related scripts."""
from enum import IntEnum
import json import json
import logging import logging
from typing import Any, Callable, Dict, Optional, Tuple, Type, Union
import time import time
from enum import IntEnum
from typing import Any, Callable, Dict, Optional, Tuple, Type, Union
from urllib.parse import urljoin from urllib.parse import urljoin
from urllib3 import PoolManager from urllib3 import PoolManager
+1 -1
View File
@@ -3,7 +3,7 @@ import abc
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
from patroni.utils import parse_int, parse_bool from patroni.utils import parse_bool, parse_int
class Tags(abc.ABC): class Tags(abc.ABC):
+4 -4
View File
@@ -21,13 +21,13 @@ import subprocess
import sys import sys
import tempfile import tempfile
import time import time
from shlex import split
from typing import Any, Callable, Dict, Iterator, List, Optional, Union, Tuple, Type, TYPE_CHECKING
from collections import OrderedDict from collections import OrderedDict
from dateutil import tz
from json import JSONDecoder from json import JSONDecoder
from shlex import split
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Type, TYPE_CHECKING, Union
from dateutil import tz
from urllib3.response import HTTPResponse from urllib3.response import HTTPResponse
from .exceptions import PatroniException from .exceptions import PatroniException
+2 -2
View File
@@ -9,13 +9,13 @@ import os
import shutil import shutil
import socket import socket
from typing import Any, Dict, Union, Iterator, List, Optional as OptionalType, Tuple, TYPE_CHECKING from typing import Any, Dict, Iterator, List, Optional as OptionalType, Tuple, TYPE_CHECKING, Union
from .collections import CaseInsensitiveSet, EMPTY_DICT from .collections import CaseInsensitiveSet, EMPTY_DICT
from .dcs import dcs_modules from .dcs import dcs_modules
from .exceptions import ConfigParseError from .exceptions import ConfigParseError
from .utils import parse_int, split_host_port, data_directory_is_empty, get_major_version
from .log import type_logformat from .log import type_logformat
from .utils import data_directory_is_empty, get_major_version, parse_int, split_host_port
def validate_log_field(field: Union[str, Dict[str, Any], Any]) -> bool: def validate_log_field(field: Union[str, Dict[str, Any], Any]) -> bool:
+2 -1
View File
@@ -1,2 +1,3 @@
from patroni.watchdog.base import WatchdogError, Watchdog from patroni.watchdog.base import Watchdog, WatchdogError
__all__ = ['WatchdogError', 'Watchdog'] __all__ = ['WatchdogError', 'Watchdog']
+1 -1
View File
@@ -2,8 +2,8 @@ import abc
import logging import logging
import platform import platform
import sys import sys
from threading import RLock
from threading import RLock
from typing import Any, Callable, Dict, Optional, Union from typing import Any, Callable, Dict, Optional, Union
from ..config import Config from ..config import Config
+55 -19
View File
@@ -4,6 +4,7 @@
Setup file for patroni Setup file for patroni
""" """
import glob
import inspect import inspect
import logging import logging
import os import os
@@ -47,6 +48,7 @@ CLASSIFIERS = [
'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: CPython',
] ]
@@ -68,33 +70,67 @@ class _Command(Command):
pass pass
class Flake8(_Command): class _Lint(_Command):
def package_files(self): def package_modules(self):
seen_package_directories = () package_dirs = self.distribution.package_dir or {}
directories = self.distribution.package_dir or {} for package in self.distribution.packages or []:
empty_directory_exists = "" in directories if package in package_dirs:
packages = self.distribution.packages or [] yield package_dirs[package]
for package in packages: elif '' in package_dirs:
if package in directories: yield os.path.join(package_dirs[''], package)
package_directory = directories[package]
elif empty_directory_exists:
package_directory = os.path.join(directories[""], package)
else: else:
package_directory = package yield package
if not package_directory.startswith(seen_package_directories): def package_directories(self):
seen_package_directories += (package_directory + ".",) for module in self.package_modules():
yield package_directory yield module.replace('.', os.path.sep)
def targets(self): def aux_directories(self):
return [package for package in self.package_files()] + ['tests', 'features', 'setup.py'] for dir_name in ('tests', 'features'):
for root, dirs, files in os.walk(dir_name):
for name in dirs:
yield os.path.join(root, name)
def dirs_to_check(self):
yield from self.package_directories()
yield from self.aux_directories()
def files_to_check(self):
for path in self.dirs_to_check():
for python_file in glob.iglob(os.path.join(path, '*.py')):
yield python_file
for filename in self.distribution.py_modules or []:
yield f'{filename}.py'
yield 'setup.py'
class Flake8(_Lint):
def run(self): def run(self):
from flake8.main.cli import main from flake8.main.cli import main
logging.getLogger().setLevel(logging.ERROR) logging.getLogger().setLevel(logging.ERROR)
raise SystemExit(main(self.targets())) raise SystemExit(main(list(self.files_to_check())))
class ISort(_Lint):
def run(self):
from isort import api
wrong_sorted_files = False
for python_file in self.files_to_check():
try:
if not api.check_file(python_file, settings_path=__location__, show_diff=True):
wrong_sorted_files = True
except OSError as error:
logging.warning('Unable to parse file %s due to %r', python_file, error)
wrong_sorted_files = True
if wrong_sorted_files:
sys.exit(1)
class PyTest(_Command): class PyTest(_Command):
@@ -177,7 +213,7 @@ def main():
]}, ]},
install_requires=install_requires, install_requires=install_requires,
extras_require=EXTRAS_REQUIRE, extras_require=EXTRAS_REQUIRE,
cmdclass={'test': PyTest, 'flake8': Flake8}, cmdclass={'test': PyTest, 'flake8': Flake8, 'isort': ISort},
entry_points={'console_scripts': CONSOLE_SCRIPTS}, entry_points={'console_scripts': CONSOLE_SCRIPTS},
) )
+2 -1
View File
@@ -2,7 +2,8 @@ import datetime
import os import os
import shutil import shutil
import unittest import unittest
from unittest.mock import Mock, PropertyMock, patch
from unittest.mock import Mock, patch, PropertyMock
import urllib3 import urllib3
+2 -3
View File
@@ -1,12 +1,12 @@
import datetime import datetime
import json import json
import unittest
import socket import socket
import unittest
from http.server import HTTPServer from http.server import HTTPServer
from io import BytesIO as IO from io import BytesIO as IO
from socketserver import ThreadingMixIn from socketserver import ThreadingMixIn
from unittest.mock import Mock, PropertyMock, patch from unittest.mock import Mock, patch, PropertyMock
from patroni import global_config from patroni import global_config
from patroni.api import RestApiHandler, RestApiServer from patroni.api import RestApiHandler, RestApiServer
@@ -20,7 +20,6 @@ from patroni.utils import RetryFailedError, tzutc
from . import MockConnect, psycopg_connect from . import MockConnect, psycopg_connect
from .test_ha import get_cluster_initialized_without_leader from .test_ha import get_cluster_initialized_without_leader
future_restart_time = datetime.datetime.now(tzutc) + datetime.timedelta(days=5) future_restart_time = datetime.datetime.now(tzutc) + datetime.timedelta(days=5)
postmaster_start_time = datetime.datetime.now(tzutc) postmaster_start_time = datetime.datetime.now(tzutc)
+2 -1
View File
@@ -1,8 +1,9 @@
import unittest import unittest
from threading import Thread
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from patroni.async_executor import AsyncExecutor, CriticalTask from patroni.async_executor import AsyncExecutor, CriticalTask
from threading import Thread
class TestAsyncExecutor(unittest.TestCase): class TestAsyncExecutor(unittest.TestCase):
+5 -3
View File
@@ -1,10 +1,12 @@
import botocore
import botocore.awsrequest
import sys import sys
import unittest import unittest
from unittest.mock import Mock, PropertyMock, patch
from collections import namedtuple from collections import namedtuple
from unittest.mock import Mock, patch, PropertyMock
import botocore
import botocore.awsrequest
from patroni.scripts.aws import AWSConnection, main as _main from patroni.scripts.aws import AWSConnection, main as _main
+5 -4
View File
@@ -1,16 +1,17 @@
import logging import logging
import unittest import unittest
from unittest import mock from unittest import mock
from unittest.mock import MagicMock, Mock, patch from unittest.mock import MagicMock, Mock, patch
from urllib3.exceptions import MaxRetryError from urllib3.exceptions import MaxRetryError
from patroni.scripts.barman.cli import main from patroni.scripts.barman.cli import main
from patroni.scripts.barman.config_switch import (ExitCode as BarmanConfigSwitchExitCode, _should_skip_switch, from patroni.scripts.barman.config_switch import _should_skip_switch, _switch_config, \
_switch_config, run_barman_config_switch) ExitCode as BarmanConfigSwitchExitCode, run_barman_config_switch
from patroni.scripts.barman.recover import ExitCode as BarmanRecoverExitCode, _restore_backup, run_barman_recover from patroni.scripts.barman.recover import _restore_backup, ExitCode as BarmanRecoverExitCode, run_barman_recover
from patroni.scripts.barman.utils import ApiNotOk, OperationStatus, PgBackupApi, RetriesExceeded, set_up_logging from patroni.scripts.barman.utils import ApiNotOk, OperationStatus, PgBackupApi, RetriesExceeded, set_up_logging
API_URL = "http://localhost:7480" API_URL = "http://localhost:7480"
BARMAN_SERVER = "my_server" BARMAN_SERVER = "my_server"
BARMAN_MODEL = "my_model" BARMAN_MODEL = "my_model"
+3 -2
View File
@@ -1,6 +1,7 @@
import os import os
import sys import sys
from unittest.mock import Mock, PropertyMock, patch
from unittest.mock import Mock, patch, PropertyMock
from patroni.async_executor import CriticalTask from patroni.async_executor import CriticalTask
from patroni.collections import CaseInsensitiveDict from patroni.collections import CaseInsensitiveDict
@@ -9,7 +10,7 @@ from patroni.postgresql.bootstrap import Bootstrap
from patroni.postgresql.cancellable import CancellableSubprocess from patroni.postgresql.cancellable import CancellableSubprocess
from patroni.postgresql.config import ConfigHandler, get_param_diff from patroni.postgresql.config import ConfigHandler, get_param_diff
from . import psycopg_connect, BaseTestPostgresql, mock_available_gucs from . import BaseTestPostgresql, mock_available_gucs, psycopg_connect
@patch('subprocess.call', Mock(return_value=0)) @patch('subprocess.call', Mock(return_value=0))
+3 -1
View File
@@ -1,7 +1,9 @@
import psutil
import unittest import unittest
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
import psutil
from patroni.postgresql.callback_executor import CallbackExecutor from patroni.postgresql.callback_executor import CallbackExecutor
+3 -1
View File
@@ -1,7 +1,9 @@
import psutil
import unittest import unittest
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
import psutil
from patroni.exceptions import PostgresException from patroni.exceptions import PostgresException
from patroni.postgresql.cancellable import CancellableSubprocess from patroni.postgresql.cancellable import CancellableSubprocess
+1 -1
View File
@@ -2,8 +2,8 @@ import time
import unittest import unittest
from copy import deepcopy from copy import deepcopy
from unittest.mock import Mock, patch, PropertyMock
from typing import List from typing import List
from unittest.mock import Mock, patch, PropertyMock
from patroni.postgresql.mpp.citus import CitusHandler, PgDistGroup, PgDistNode from patroni.postgresql.mpp.citus import CitusHandler, PgDistGroup, PgDistNode
from patroni.psycopg import ProgrammingError from patroni.psycopg import ProgrammingError
+1 -1
View File
@@ -1,7 +1,7 @@
import io
import os import os
import sys import sys
import unittest import unittest
import io
from copy import deepcopy from copy import deepcopy
from unittest.mock import MagicMock, Mock, patch from unittest.mock import MagicMock, Mock, patch
+6 -6
View File
@@ -1,19 +1,19 @@
import os import os
import psutil
import unittest import unittest
import yaml
from . import MockConnect, MockCursor
from copy import deepcopy from copy import deepcopy
from unittest.mock import MagicMock, Mock, PropertyMock, mock_open as _mock_open, patch from unittest.mock import MagicMock, Mock, mock_open as _mock_open, patch, PropertyMock
import psutil
import yaml
from patroni.__main__ import main as _main from patroni.__main__ import main as _main
from patroni.config import Config from patroni.config import Config
from patroni.config_generator import AbstractConfigGenerator, get_address, NO_VALUE_MSG from patroni.config_generator import AbstractConfigGenerator, get_address, NO_VALUE_MSG
from patroni.log import PatroniLogger from patroni.log import PatroniLogger
from patroni.utils import patch_config, parse_bool from patroni.utils import parse_bool, patch_config
from . import psycopg_connect from . import MockConnect, MockCursor, psycopg_connect
HOSTNAME = 'test_hostname' HOSTNAME = 'test_hostname'
IP = '1.9.8.4' IP = '1.9.8.4'
+8 -4
View File
@@ -1,12 +1,16 @@
import consul
import unittest import unittest
from unittest.mock import Mock, PropertyMock, patch
from unittest.mock import Mock, patch, PropertyMock
import consul
from consul import ConsulException, NotFound from consul import ConsulException, NotFound
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.consul import AbstractDCS, Cluster, Consul, ConsulInternalError, \ from patroni.dcs.consul import AbstractDCS, Cluster, Consul, ConsulClient, ConsulError, \
ConsulError, ConsulClient, HTTPClient, InvalidSessionTTL, InvalidSession, RetryFailedError ConsulInternalError, HTTPClient, InvalidSession, InvalidSessionTTL, RetryFailedError
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from . import SleepException from . import SleepException
+15 -12
View File
@@ -1,28 +1,31 @@
import click
import etcd
import os import os
import unittest import unittest
from click.testing import CliRunner
from datetime import datetime, timedelta from datetime import datetime, timedelta
from unittest import mock
from unittest.mock import Mock, patch, PropertyMock
import click
import etcd
from click.testing import CliRunner
from prettytable import ALL, PrettyTable
from urllib3 import PoolManager
from patroni import global_config from patroni import global_config
from patroni.ctl import ctl, load_config, output_members, get_dcs, parse_dcs, \ from patroni.ctl import apply_config_changes, CONFIG_FILE_PATH, ctl, format_config_for_editing, \
get_all_members, get_any_member, get_cursor, query_member, PatroniCtlException, apply_config_changes, \ format_pg_version, get_all_members, get_any_member, get_cursor, get_dcs, invoke_editor, load_config, \
format_config_for_editing, show_diff, invoke_editor, format_pg_version, CONFIG_FILE_PATH, PatronictlPrettyTable output_members, parse_dcs, PatroniCtlException, PatronictlPrettyTable, query_member, show_diff
from patroni.dcs import Cluster, Failover from patroni.dcs import Cluster, Failover
from patroni.postgresql.config import get_param_diff from patroni.postgresql.config import get_param_diff
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from patroni.psycopg import OperationalError from patroni.psycopg import OperationalError
from patroni.utils import tzutc from patroni.utils import tzutc
from prettytable import PrettyTable, ALL
from unittest import mock
from unittest.mock import patch, Mock, PropertyMock
from urllib3 import PoolManager
from . import MockConnect, MockCursor, MockResponse, psycopg_connect from . import MockConnect, MockCursor, MockResponse, psycopg_connect
from .test_etcd import etcd_read, socket_getaddrinfo from .test_etcd import etcd_read, socket_getaddrinfo
from .test_ha import get_cluster_initialized_without_leader, get_cluster_initialized_with_leader, \ from .test_ha import get_cluster, get_cluster_initialized_with_leader, get_cluster_initialized_with_only_leader, \
get_cluster_initialized_with_only_leader, get_cluster_not_initialized_without_leader, get_cluster, Member get_cluster_initialized_without_leader, get_cluster_not_initialized_without_leader, Member
def get_default_config(*args): def get_default_config(*args):
+9 -6
View File
@@ -1,18 +1,21 @@
import etcd
import urllib3.util.connection
import socket import socket
import unittest import unittest
from unittest.mock import Mock, patch, PropertyMock
import etcd
import urllib3.util.connection
from dns.exception import DNSException from dns.exception import DNSException
from urllib3.exceptions import ReadTimeoutError
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.etcd import AbstractDCS, EtcdClient, Cluster, Etcd, EtcdError, DnsCachingResolver from patroni.dcs.etcd import AbstractDCS, Cluster, DnsCachingResolver, Etcd, EtcdClient, EtcdError
from patroni.exceptions import DCSError from patroni.exceptions import DCSError
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from patroni.utils import Retry from patroni.utils import Retry
from unittest.mock import Mock, PropertyMock, patch
from urllib3.exceptions import ReadTimeoutError
from . import SleepException, MockResponse, requests_get from . import MockResponse, requests_get, SleepException
def etcd_watch(self, key, index=None, timeout=None, recursive=None): def etcd_watch(self, key, index=None, timeout=None, recursive=None):
+9 -7
View File
@@ -1,18 +1,20 @@
import etcd
import json import json
import unittest import unittest
from threading import Thread
from unittest.mock import Mock, patch, PropertyMock
import etcd
import urllib3 import urllib3
from unittest.mock import Mock, PropertyMock, patch
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.etcd import DnsCachingResolver from patroni.dcs.etcd import DnsCachingResolver
from patroni.dcs.etcd3 import PatroniEtcd3Client, Cluster, Etcd3, Etcd3Client, \ from patroni.dcs.etcd3 import AuthFailed, AuthOldRevision, base64_encode, Cluster, Etcd3, \
Etcd3Error, Etcd3ClientError, RetryFailedError, InvalidAuthToken, Unavailable, \ Etcd3Client, Etcd3ClientError, Etcd3Error, InvalidAuthToken, PatroniEtcd3Client, \
Unknown, UnsupportedEtcdVersion, UserEmpty, AuthFailed, AuthOldRevision, base64_encode RetryFailedError, Unavailable, Unknown, UnsupportedEtcdVersion, UserEmpty
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from threading import Thread
from . import SleepException, MockResponse from . import MockResponse, SleepException
def mock_urlopen(self, method, url, **kwargs): def mock_urlopen(self, method, url, **kwargs):
+5 -3
View File
@@ -1,12 +1,14 @@
import unittest import unittest
import urllib3
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
import urllib3
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.exhibitor import ExhibitorEnsembleProvider, Exhibitor from patroni.dcs.exhibitor import Exhibitor, ExhibitorEnsembleProvider
from patroni.dcs.zookeeper import ZooKeeperError from patroni.dcs.zookeeper import ZooKeeperError
from . import SleepException, requests_get from . import requests_get, SleepException
from .test_zookeeper import MockKazooClient from .test_zookeeper import MockKazooClient
+2 -1
View File
@@ -1,5 +1,6 @@
import unittest
import stat import stat
import unittest
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from patroni.file_perm import pg_perm from patroni.file_perm import pg_perm
+9 -7
View File
@@ -1,16 +1,18 @@
import datetime import datetime
import etcd
import os import os
import sys import sys
from unittest.mock import Mock, MagicMock, PropertyMock, patch, mock_open
from unittest.mock import MagicMock, Mock, mock_open, patch, PropertyMock
import etcd
from patroni import global_config from patroni import global_config
from patroni.collections import CaseInsensitiveSet from patroni.collections import CaseInsensitiveSet
from patroni.config import Config from patroni.config import Config
from patroni.dcs import Cluster, ClusterConfig, Failover, Leader, Member, get_dcs, Status, SyncState, TimelineHistory from patroni.dcs import Cluster, ClusterConfig, Failover, get_dcs, Leader, Member, Status, SyncState, TimelineHistory
from patroni.dcs.etcd import AbstractEtcdClientWithFailover from patroni.dcs.etcd import AbstractEtcdClientWithFailover
from patroni.exceptions import DCSError, PostgresConnectionException, PatroniFatalException from patroni.exceptions import DCSError, PatroniFatalException, PostgresConnectionException
from patroni.ha import Ha, _MemberStatus from patroni.ha import _MemberStatus, Ha
from patroni.postgresql import Postgresql from patroni.postgresql import Postgresql
from patroni.postgresql.bootstrap import Bootstrap from patroni.postgresql.bootstrap import Bootstrap
from patroni.postgresql.cancellable import CancellableSubprocess from patroni.postgresql.cancellable import CancellableSubprocess
@@ -22,8 +24,8 @@ from patroni.postgresql.sync import _SyncState
from patroni.utils import tzutc from patroni.utils import tzutc
from patroni.watchdog import Watchdog from patroni.watchdog import Watchdog
from . import PostgresInit, MockPostmaster, psycopg_connect, requests_get from . import MockPostmaster, PostgresInit, psycopg_connect, requests_get
from .test_etcd import socket_getaddrinfo, etcd_read, etcd_write from .test_etcd import etcd_read, etcd_write, socket_getaddrinfo
SYSID = '12345678901' SYSID = '12345678901'
+8 -5
View File
@@ -4,16 +4,19 @@ import json
import socket import socket
import time import time
import unittest import unittest
import urllib3
from threading import Thread
from unittest import mock from unittest import mock
from unittest.mock import Mock, PropertyMock, mock_open, patch from unittest.mock import Mock, mock_open, patch, PropertyMock
import urllib3
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.kubernetes import Cluster, k8s_client, k8s_config, K8sConfig, K8sConnectionFailed, \ from patroni.dcs.kubernetes import Cluster, k8s_client, k8s_config, K8sConfig, K8sConnectionFailed, \
K8sException, K8sObject, Kubernetes, KubernetesError, KubernetesRetriableException, \ K8sException, K8sObject, Kubernetes, KubernetesError, KubernetesRetriableException, Retry, \
Retry, RetryFailedError, SERVICE_HOST_ENV_NAME, SERVICE_PORT_ENV_NAME RetryFailedError, SERVICE_HOST_ENV_NAME, SERVICE_PORT_ENV_NAME
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from threading import Thread
from . import MockResponse, SleepException from . import MockResponse, SleepException
+4 -2
View File
@@ -2,11 +2,13 @@ import logging
import os import os
import sys import sys
import unittest import unittest
import yaml
from io import StringIO from io import StringIO
from queue import Queue, Full from queue import Full, Queue
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
import yaml
from patroni.config import Config from patroni.config import Config
from patroni.log import PatroniLogger from patroni.log import PatroniLogger
+1
View File
@@ -1,4 +1,5 @@
from typing import Any from typing import Any
from patroni.exceptions import PatroniException from patroni.exceptions import PatroniException
from patroni.postgresql.mpp import AbstractMPP, get_mpp, Null from patroni.postgresql.mpp import AbstractMPP, get_mpp, Null
+8 -5
View File
@@ -1,13 +1,18 @@
import etcd
import logging import logging
import os import os
import signal import signal
import time import time
import unittest import unittest
from unittest.mock import Mock, PropertyMock, patch
from http.server import HTTPServer
from threading import Thread
from unittest.mock import Mock, patch, PropertyMock
import etcd
import patroni.config as config import patroni.config as config
from http.server import HTTPServer
from patroni.__main__ import check_psycopg, main as _main, Patroni
from patroni.api import RestApiServer from patroni.api import RestApiServer
from patroni.async_executor import AsyncExecutor from patroni.async_executor import AsyncExecutor
from patroni.dcs import Cluster, Member from patroni.dcs import Cluster, Member
@@ -15,8 +20,6 @@ from patroni.dcs.etcd import AbstractEtcdClientWithFailover
from patroni.exceptions import DCSError from patroni.exceptions import DCSError
from patroni.postgresql import Postgresql from patroni.postgresql import Postgresql
from patroni.postgresql.config import ConfigHandler from patroni.postgresql.config import ConfigHandler
from patroni.__main__ import check_psycopg, Patroni, main as _main
from threading import Thread
from . import psycopg_connect, SleepException from . import psycopg_connect, SleepException
from .test_etcd import etcd_read, etcd_write from .test_etcd import etcd_read, etcd_write
+12 -13
View File
@@ -1,13 +1,15 @@
import datetime import datetime
import os import os
import psutil
import re import re
import subprocess import subprocess
import time import time
from copy import deepcopy from copy import deepcopy
from pathlib import Path from pathlib import Path
from unittest.mock import Mock, MagicMock, PropertyMock, patch, mock_open from threading import current_thread, Thread
from unittest.mock import MagicMock, Mock, mock_open, patch, PropertyMock
import psutil
import patroni.psycopg as psycopg import patroni.psycopg as psycopg
@@ -15,22 +17,19 @@ from patroni import global_config
from patroni.async_executor import CriticalTask from patroni.async_executor import CriticalTask
from patroni.collections import CaseInsensitiveDict, CaseInsensitiveSet from patroni.collections import CaseInsensitiveDict, CaseInsensitiveSet
from patroni.dcs import RemoteMember from patroni.dcs import RemoteMember
from patroni.exceptions import PostgresConnectionException, PatroniException from patroni.exceptions import PatroniException, PostgresConnectionException
from patroni.postgresql import Postgresql, STATE_REJECT, STATE_NO_RESPONSE from patroni.postgresql import Postgresql, STATE_NO_RESPONSE, STATE_REJECT
from patroni.postgresql.bootstrap import Bootstrap from patroni.postgresql.bootstrap import Bootstrap
from patroni.postgresql.callback_executor import CallbackAction from patroni.postgresql.callback_executor import CallbackAction
from patroni.postgresql.config import get_param_diff, _false_validator from patroni.postgresql.config import _false_validator, get_param_diff
from patroni.postgresql.postmaster import PostmasterProcess from patroni.postgresql.postmaster import PostmasterProcess
from patroni.postgresql.validator import (ValidatorFactoryNoType, ValidatorFactoryInvalidType, from patroni.postgresql.validator import _get_postgres_guc_validators, _load_postgres_gucs_validators, \
ValidatorFactoryInvalidSpec, ValidatorFactory, InvalidGucValidatorsFile, _read_postgres_gucs_validators_file, Bool, Enum, EnumBool, Integer, InvalidGucValidatorsFile, Real, String, \
_get_postgres_guc_validators, _read_postgres_gucs_validators_file, ValidatorFactory, ValidatorFactoryInvalidSpec, ValidatorFactoryInvalidType, ValidatorFactoryNoType
_load_postgres_gucs_validators, Bool, Integer, Real, Enum, EnumBool, String)
from patroni.utils import RetryFailedError from patroni.utils import RetryFailedError
from threading import Thread, current_thread
from . import (BaseTestPostgresql, MockCursor, MockPostmaster, psycopg_connect, mock_available_gucs,
GET_PG_SETTINGS_RESULT)
from . import BaseTestPostgresql, GET_PG_SETTINGS_RESULT, \
mock_available_gucs, MockCursor, MockPostmaster, psycopg_connect
mtime_ret = {} mtime_ret = {}
+4 -2
View File
@@ -1,7 +1,9 @@
import multiprocessing import multiprocessing
import psutil
import unittest import unittest
from unittest.mock import Mock, patch, mock_open
from unittest.mock import Mock, mock_open, patch
import psutil
from patroni.postgresql.postmaster import PostmasterProcess from patroni.postgresql.postmaster import PostmasterProcess
+1 -1
View File
@@ -2,7 +2,7 @@ import unittest
from typing import List, Set, Tuple from typing import List, Set, Tuple
from patroni.quorum import QuorumStateResolver, QuorumError from patroni.quorum import QuorumError, QuorumStateResolver
class QuorumTest(unittest.TestCase): class QuorumTest(unittest.TestCase):
+7 -5
View File
@@ -1,14 +1,16 @@
import os import os
import unittest
import tempfile import tempfile
import time import time
from unittest.mock import Mock, PropertyMock, patch import unittest
from unittest.mock import Mock, patch, PropertyMock
from pysyncobj import FAIL_REASON, SyncObjConf
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.raft import Cluster, DynMemberSyncObj, KVStoreTTL, \ from patroni.dcs.raft import _TCPTransport, Cluster, DynMemberSyncObj, \
Raft, RaftError, SyncObjUtility, TCPTransport, _TCPTransport KVStoreTTL, Raft, RaftError, SyncObjUtility, TCPTransport
from patroni.postgresql.mpp import get_mpp from patroni.postgresql.mpp import get_mpp
from pysyncobj import SyncObjConf, FAIL_REASON
def remove_files(prefix): def remove_files(prefix):
+3 -1
View File
@@ -1,11 +1,13 @@
import logging import logging
import os import os
import unittest import unittest
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from pysyncobj import SyncObj from pysyncobj import SyncObj
from patroni.config import Config from patroni.config import Config
from patroni.raft_controller import RaftController, main as _main from patroni.raft_controller import main as _main, RaftController
from . import SleepException from . import SleepException
from .test_raft import remove_files from .test_raft import remove_files
+1 -1
View File
@@ -1,4 +1,4 @@
from unittest.mock import Mock, PropertyMock, patch, mock_open from unittest.mock import Mock, mock_open, patch, PropertyMock
from patroni.postgresql import Postgresql from patroni.postgresql import Postgresql
from patroni.postgresql.cancellable import CancellableSubprocess from patroni.postgresql.cancellable import CancellableSubprocess
+3 -2
View File
@@ -1,8 +1,9 @@
import os import os
import unittest import unittest
from threading import Thread from threading import Thread
from unittest import mock from unittest import mock
from unittest.mock import Mock, PropertyMock, patch from unittest.mock import Mock, patch, PropertyMock
from patroni import global_config, psycopg from patroni import global_config, psycopg
from patroni.dcs import Cluster, ClusterConfig, Member, Status, SyncState from patroni.dcs import Cluster, ClusterConfig, Member, Status, SyncState
@@ -11,7 +12,7 @@ from patroni.postgresql.misc import fsync_dir
from patroni.postgresql.slots import SlotsAdvanceThread, SlotsHandler from patroni.postgresql.slots import SlotsAdvanceThread, SlotsHandler
from patroni.tags import Tags from patroni.tags import Tags
from . import BaseTestPostgresql, psycopg_connect, MockCursor from . import BaseTestPostgresql, MockCursor, psycopg_connect
class TestTags(Tags): class TestTags(Tags):
+1 -1
View File
@@ -7,7 +7,7 @@ from patroni.collections import CaseInsensitiveSet
from patroni.dcs import Cluster, ClusterConfig, Status, SyncState from patroni.dcs import Cluster, ClusterConfig, Status, SyncState
from patroni.postgresql import Postgresql from patroni.postgresql import Postgresql
from . import BaseTestPostgresql, psycopg_connect, mock_available_gucs from . import BaseTestPostgresql, mock_available_gucs, psycopg_connect
@patch('subprocess.call', Mock(return_value=0)) @patch('subprocess.call', Mock(return_value=0))
+2 -1
View File
@@ -1,8 +1,9 @@
import unittest import unittest
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from patroni.exceptions import PatroniException from patroni.exceptions import PatroniException
from patroni.utils import Retry, RetryFailedError, enable_keepalive, polling_loop, validate_directory, unquote from patroni.utils import enable_keepalive, polling_loop, Retry, RetryFailedError, unquote, validate_directory
class TestUtils(unittest.TestCase): class TestUtils(unittest.TestCase):
+3 -2
View File
@@ -5,9 +5,10 @@ import tempfile
import unittest import unittest
from io import StringIO from io import StringIO
from unittest.mock import Mock, patch, mock_open from unittest.mock import Mock, mock_open, patch
from patroni.dcs import dcs_modules from patroni.dcs import dcs_modules
from patroni.validator import schema, Directory, Schema from patroni.validator import Directory, schema, Schema
available_dcs = [m.split(".")[-1] for m in dcs_modules()] available_dcs = [m.split(".")[-1] for m in dcs_modules()]
config = { config = {
+4 -2
View File
@@ -1,11 +1,13 @@
import subprocess import subprocess
import unittest import unittest
from threading import current_thread from threading import current_thread
from unittest.mock import Mock, PropertyMock, patch, mock_open from unittest.mock import Mock, mock_open, patch, PropertyMock
import patroni.psycopg as psycopg import patroni.psycopg as psycopg
from patroni.scripts import wale_restore from patroni.scripts import wale_restore
from patroni.scripts.wale_restore import WALERestore, main as _main, get_major_version from patroni.scripts.wale_restore import get_major_version, main as _main, WALERestore
from . import MockConnect, psycopg_connect from . import MockConnect, psycopg_connect
+5 -3
View File
@@ -1,9 +1,11 @@
import ctypes import ctypes
import patroni.watchdog.linux as linuxwd import os
import sys import sys
import unittest import unittest
import os
from unittest.mock import patch, Mock, PropertyMock from unittest.mock import Mock, patch, PropertyMock
import patroni.watchdog.linux as linuxwd
from patroni.watchdog import Watchdog, WatchdogError from patroni.watchdog import Watchdog, WatchdogError
from patroni.watchdog.base import NullWatchdog from patroni.watchdog.base import NullWatchdog
+4 -2
View File
@@ -1,12 +1,14 @@
import select import select
import unittest import unittest
from unittest.mock import Mock, PropertyMock, patch
from unittest.mock import Mock, patch, PropertyMock
from kazoo.client import KazooClient from kazoo.client import KazooClient
from kazoo.exceptions import NoNodeError, NodeExistsError from kazoo.exceptions import NodeExistsError, NoNodeError
from kazoo.handlers.threading import SequentialThreadingHandler from kazoo.handlers.threading import SequentialThreadingHandler
from kazoo.protocol.states import KeeperState, WatchedEvent, ZnodeStat from kazoo.protocol.states import KeeperState, WatchedEvent, ZnodeStat
from kazoo.retry import RetryFailedError from kazoo.retry import RetryFailedError
from patroni.dcs import get_dcs from patroni.dcs import get_dcs
from patroni.dcs.zookeeper import Cluster, PatroniKazooClient, \ from patroni.dcs.zookeeper import Cluster, PatroniKazooClient, \
PatroniSequentialThreadingHandler, ZooKeeper, ZooKeeperError PatroniSequentialThreadingHandler, ZooKeeper, ZooKeeperError
+9
View File
@@ -241,3 +241,12 @@ change_dir = docs
[flake8] [flake8]
max-line-length = 120 max-line-length = 120
ignore = D401,W503 ignore = D401,W503
[isort]
line_length = 120
multi_line_output = 2
balanced_wrapping = true
combine_as_imports = true
force_alphabetical_sort_within_sections = true
lines_between_types = 1
known_third_party = consul