Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit 3f29d7d

Browse files
Sergey Vasilyevdlawin
authored andcommitted
Initialise mutable fields of dataclasses safely for reuse
1 parent 9e9a9a1 commit 3f29d7d

File tree

5 files changed

+14
-10
lines changed

5 files changed

+14
-10
lines changed

data_diff/diff_tables.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import re
55
import time
66
from abc import ABC, abstractmethod
7+
from dataclasses import field
78
from enum import Enum
89
from contextlib import contextmanager
910
from operator import methodcaller
@@ -88,7 +89,7 @@ class DiffResultWrapper:
8889
diff: iter # DiffResult
8990
info_tree: InfoTree
9091
stats: dict
91-
result_list: list = []
92+
result_list: list = field(default_factory=list)
9293

9394
def __iter__(self):
9495
yield from self.result_list

data_diff/hashdiff_tables.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from dataclasses import field
23
from numbers import Number
34
import logging
45
from collections import defaultdict
@@ -75,7 +76,7 @@ class HashDiffer(TableDiffer):
7576
bisection_factor: int = DEFAULT_BISECTION_FACTOR
7677
bisection_threshold: Number = DEFAULT_BISECTION_THRESHOLD # Accepts inf for tests
7778

78-
stats: dict = {}
79+
stats: dict = field(default_factory=dict)
7980

8081
def __post_init__(self):
8182
# Validate options

data_diff/info_tree.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from dataclasses import field
12
from typing import List, Dict, Optional, Any, Tuple, Union
23

34
from runtype import dataclass
@@ -14,7 +15,7 @@ class SegmentInfo:
1415
is_diff: bool = None
1516
diff_count: int = None
1617

17-
rowcounts: Dict[int, int] = {}
18+
rowcounts: Dict[int, int] = field(default_factory=dict)
1819
max_rows: int = None
1920

2021
def set_diff(self, diff: List[Union[Tuple[Any, ...], List[Any]]], schema: Optional[Tuple[Tuple[str, type]]] = None):
@@ -42,7 +43,7 @@ def update_from_children(self, child_infos):
4243
@dataclass
4344
class InfoTree:
4445
info: SegmentInfo
45-
children: List["InfoTree"] = []
46+
children: List["InfoTree"] = field(default_factory=list)
4647

4748
def add_node(self, table1: TableSegment, table2: TableSegment, max_rows: int = None):
4849
node = InfoTree(SegmentInfo([table1, table2], max_rows=max_rows))

data_diff/joindiff_tables.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Provides classes for performing a table diff using JOIN
22
33
"""
4-
4+
from dataclasses import field
55
from decimal import Decimal
66
from functools import partial
77
import logging
@@ -148,7 +148,7 @@ class JoinDiffer(TableDiffer):
148148
table_write_limit: int = TABLE_WRITE_LIMIT
149149
skip_null_keys: bool = False
150150

151-
stats: dict = {}
151+
stats: dict = field(default_factory=dict)
152152

153153
def _diff_tables_root(self, table1: TableSegment, table2: TableSegment, info_tree: InfoTree) -> DiffResult:
154154
db = table1.database

data_diff/sqeleton/queries/compiler.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import random
2+
from dataclasses import field
23
from datetime import datetime
34
from typing import Any, Dict, Sequence, List
45

@@ -23,15 +24,15 @@ class Root:
2324
@dataclass
2425
class Compiler(AbstractCompiler):
2526
database: AbstractDatabase
26-
params: dict = {}
27+
params: dict = field(default_factory=dict)
2728
in_select: bool = False # Compilation runtime flag
2829
in_join: bool = False # Compilation runtime flag
2930

30-
_table_context: List = [] # List[ITable]
31-
_subqueries: Dict[str, Any] = {} # XXX not thread-safe
31+
_table_context: List = field(default_factory=list) # List[ITable]
32+
_subqueries: Dict[str, Any] = field(default_factory=dict) # XXX not thread-safe
3233
root: bool = True
3334

34-
_counter: List = [0]
35+
_counter: List = field(default_factory=lambda: [0])
3536

3637
@property
3738
def dialect(self) -> AbstractDialect:

0 commit comments

Comments
 (0)