Skip to content

Commit 39aa104

Browse files
committed
refactor(settings): remove some calls to HathorSettings
1 parent 7e8ec09 commit 39aa104

18 files changed

+158
-200
lines changed

hathor/conf/settings.py

-4
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,6 @@ def GENESIS_TX2_TIMESTAMP(self) -> int:
395395
# Identifier used in metadata's voided_by to mark a tx as partially validated.
396396
PARTIALLY_VALIDATED_ID: bytes = b'pending-validation'
397397

398-
EVENT_API_DEFAULT_BATCH_SIZE: int = 100
399-
400-
EVENT_API_MAX_BATCH_SIZE: int = 1000
401-
402398
# Maximum number of sync running simultaneously.
403399
MAX_ENABLED_SYNC: int = 16
404400

hathor/event/resources/event.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919

2020
from hathor.api_util import Resource, set_cors
2121
from hathor.cli.openapi_files.register import register_resource
22-
from hathor.conf import HathorSettings
2322
from hathor.event import EventManager
2423
from hathor.event.model.base_event import BaseEvent
2524
from hathor.utils.api import ErrorResponse, QueryParams, Response
2625

27-
settings = HathorSettings()
26+
EVENT_API_DEFAULT_BATCH_SIZE: int = 100
27+
EVENT_API_MAX_BATCH_SIZE: int = 1000
2828

2929

3030
@register_resource
@@ -66,7 +66,7 @@ def render_GET(self, request):
6666

6767
class GetEventsParams(QueryParams):
6868
last_ack_event_id: Optional[NonNegativeInt]
69-
size: int = Field(default=settings.EVENT_API_DEFAULT_BATCH_SIZE, ge=0, le=settings.EVENT_API_MAX_BATCH_SIZE)
69+
size: int = Field(default=EVENT_API_DEFAULT_BATCH_SIZE, ge=0, le=EVENT_API_MAX_BATCH_SIZE)
7070

7171

7272
class GetEventsResponse(Response):

hathor/transaction/resources/graphviz.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,13 @@
2020

2121
from hathor.api_util import Resource, get_args, parse_int, set_cors, validate_tx_hash
2222
from hathor.cli.openapi_files.register import register_resource
23-
from hathor.conf import HathorSettings
23+
from hathor.conf.get_settings import get_global_settings
2424
from hathor.graphviz import GraphvizVisualizer
2525
from hathor.util import json_dumpb
2626

2727
if TYPE_CHECKING:
2828
from hathor.manager import HathorManager # noqa: F401
2929

30-
settings = HathorSettings()
31-
3230

3331
class FileFormat(Enum):
3432
PDF = 'pdf'
@@ -59,6 +57,7 @@ def __init__(self, manager: 'HathorManager', *, format: Union[FileFormat, str]):
5957
# Important to have the manager so we can know the tx_storage
6058
self.manager = manager
6159
self.format: FileFormat = FileFormat(format)
60+
self._settings = get_global_settings()
6261

6362
def render_GET(self, request):
6463
deferred = threads.deferToThread(self._render_GET_thread, request)
@@ -238,7 +237,7 @@ def _render_GET_thread(self, request: Request) -> bytes:
238237
return json_dumpb({'success': False, 'message': message})
239238

240239
graph_type = args[b'graph_type'][0].decode('utf-8')
241-
max_level = parse_int(args[b'max_level'][0], cap=settings.MAX_GRAPH_LEVEL)
240+
max_level = parse_int(args[b'max_level'][0], cap=self._settings.MAX_GRAPH_LEVEL)
242241
tx = tx_storage.get_transaction(bytes.fromhex(tx_hex))
243242

244243
graphviz = GraphvizVisualizer(tx_storage)
@@ -319,7 +318,7 @@ def _render_GET_thread(self, request: Request) -> bytes:
319318
'name': 'max_level',
320319
'in': 'query',
321320
'description': ('How many levels the neighbor can appear in the graph.'
322-
'Max level is {}'.format(settings.MAX_GRAPH_LEVEL)),
321+
'Max level is 3'),
323322
'required': True,
324323
'schema': {
325324
'type': 'int'

tests/resources/wallet/test_search_address.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from twisted.internet.defer import inlineCallbacks
22

3-
from hathor.conf import HathorSettings
43
from hathor.crypto.util import decode_address
54
from hathor.simulator.utils import add_new_blocks
65
from hathor.transaction.scripts import parse_address_script
@@ -9,8 +8,6 @@
98
from tests.resources.base_resource import StubSite, _BaseResourceTest
109
from tests.utils import add_blocks_unlock_reward, create_tokens
1110

12-
settings = HathorSettings()
13-
1411

1512
class BaseSearchAddressTest(_BaseResourceTest._ResourceTest):
1613
__test__ = False
@@ -108,12 +105,12 @@ def test_address_balance(self):
108105
data = response.json_value()
109106
self.assertTrue(data['success'])
110107
# Genesis - token deposit + blocks mined
111-
HTR_value = settings.GENESIS_TOKENS - 1 + (settings.INITIAL_TOKENS_PER_BLOCK * 5)
108+
HTR_value = self._settings.GENESIS_TOKENS - 1 + (self._settings.INITIAL_TOKENS_PER_BLOCK * 5)
112109
self.assertEqual(data['total_transactions'], 6) # 5 blocks mined + token creation tx
113-
self.assertIn(settings.HATHOR_TOKEN_UID.hex(), data['tokens_data'])
110+
self.assertIn(self._settings.HATHOR_TOKEN_UID.hex(), data['tokens_data'])
114111
self.assertIn(self.token_uid.hex(), data['tokens_data'])
115-
self.assertEqual(HTR_value, data['tokens_data'][settings.HATHOR_TOKEN_UID.hex()]['received'])
116-
self.assertEqual(0, data['tokens_data'][settings.HATHOR_TOKEN_UID.hex()]['spent'])
112+
self.assertEqual(HTR_value, data['tokens_data'][self._settings.HATHOR_TOKEN_UID.hex()]['received'])
113+
self.assertEqual(0, data['tokens_data'][self._settings.HATHOR_TOKEN_UID.hex()]['spent'])
117114
self.assertEqual(100, data['tokens_data'][self.token_uid.hex()]['received'])
118115
self.assertEqual(0, data['tokens_data'][self.token_uid.hex()]['spent'])
119116

tests/resources/wallet/test_thin_wallet.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from twisted.internet.defer import inlineCallbacks
44

5-
from hathor.conf import HathorSettings
65
from hathor.crypto.util import decode_address
76
from hathor.simulator.utils import add_new_blocks
87
from hathor.transaction import Transaction, TxInput, TxOutput
@@ -17,8 +16,6 @@
1716
from tests.resources.base_resource import StubSite, TestDummyRequest, _BaseResourceTest
1817
from tests.utils import add_blocks_unlock_reward, add_new_tx, create_tokens
1918

20-
settings = HathorSettings()
21-
2219

2320
class BaseSendTokensTest(_BaseResourceTest._ResourceTest):
2421
__test__ = False
@@ -44,7 +41,7 @@ def test_post(self):
4441
add_blocks_unlock_reward(self.manager)
4542
blocks_tokens = [sum(txout.value for txout in blk.outputs) for blk in blocks]
4643

47-
self.assertEqual(self.manager.wallet.balance[settings.HATHOR_TOKEN_UID].available, sum(blocks_tokens))
44+
self.assertEqual(self.manager.wallet.balance[self._settings.HATHOR_TOKEN_UID].available, sum(blocks_tokens))
4845

4946
# Options
5047
yield self.web.options('thin_wallet/send_tokens')
@@ -116,7 +113,10 @@ def test_post(self):
116113
self.clock.advance(5)
117114

118115
# Check if tokens were really sent
119-
self.assertEqual(self.manager.wallet.balance[settings.HATHOR_TOKEN_UID].available, sum(blocks_tokens[:-1]))
116+
self.assertEqual(
117+
self.manager.wallet.balance[self._settings.HATHOR_TOKEN_UID].available,
118+
sum(blocks_tokens[:-1])
119+
)
120120

121121
response_history = yield self.web_address_history.get(
122122
'thin_wallet/address_history', {
@@ -151,7 +151,7 @@ def test_post(self):
151151
#
152152
# # Making pow threads full
153153
# deferreds = []
154-
# for x in range(settings.MAX_POW_THREADS):
154+
# for x in range(self._settings.MAX_POW_THREADS):
155155
# d = self.web.post('thin_wallet/send_tokens', {'tx_hex': get_new_tx_struct(50)})
156156
# d.addErrback(lambda err: None)
157157
# deferreds.append(d)
@@ -208,7 +208,7 @@ def test_history_paginate(self):
208208

209209
new_blocks = add_new_blocks(
210210
self.manager,
211-
settings.MAX_TX_ADDRESSES_HISTORY,
211+
self._settings.MAX_TX_ADDRESSES_HISTORY,
212212
advance_clock=1,
213213
address=address_bytes
214214
)
@@ -222,16 +222,16 @@ def test_history_paginate(self):
222222
)
223223

224224
response_data = response_history.json_value()
225-
self.assertEqual(len(response_data['history']), settings.MAX_TX_ADDRESSES_HISTORY)
225+
self.assertEqual(len(response_data['history']), self._settings.MAX_TX_ADDRESSES_HISTORY)
226226
self.assertTrue(response_data['has_more'])
227227
self.assertEqual(response_data['first_address'], address)
228228

229229
# Test paginate with big txs
230-
tx_count = math.ceil(settings.MAX_INPUTS_OUTPUTS_ADDRESS_HISTORY / settings.MAX_NUM_INPUTS)
230+
tx_count = math.ceil(self._settings.MAX_INPUTS_OUTPUTS_ADDRESS_HISTORY / self._settings.MAX_NUM_INPUTS)
231231
blocks.extend(new_blocks)
232232
new_blocks = add_new_blocks(
233233
self.manager,
234-
tx_count*settings.MAX_NUM_INPUTS - len(blocks),
234+
tx_count*self._settings.MAX_NUM_INPUTS - len(blocks),
235235
advance_clock=1,
236236
address=address_bytes
237237
)
@@ -240,8 +240,8 @@ def test_history_paginate(self):
240240
add_blocks_unlock_reward(self.manager)
241241

242242
for i in range(tx_count):
243-
start_index = i*settings.MAX_NUM_INPUTS
244-
end_index = start_index + settings.MAX_NUM_INPUTS
243+
start_index = i*self._settings.MAX_NUM_INPUTS
244+
end_index = start_index + self._settings.MAX_NUM_INPUTS
245245
amount = sum([b.outputs[0].value for b in blocks[start_index:end_index]])
246246
add_new_tx(self.manager, random_address, amount, advance_clock=1)
247247

tests/tx/test_blockchain.py

+27-26
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
from itertools import chain
22

3-
from hathor.conf import HathorSettings
43
from hathor.daa import DifficultyAdjustmentAlgorithm, TestMode
54
from hathor.simulator.utils import add_new_blocks
65
from hathor.transaction import sum_weights
76
from hathor.transaction.storage import TransactionMemoryStorage
87
from tests import unittest
98
from tests.utils import add_new_transactions
109

11-
settings = HathorSettings()
12-
1310

1411
class BaseBlockchainTestCase(unittest.TestCase):
1512
__test__ = False
@@ -31,7 +28,7 @@ def setUp(self):
3128
self.genesis = self.tx_storage.get_all_genesis()
3229
self.genesis_blocks = [tx for tx in self.genesis if tx.is_block]
3330
self.genesis_txs = [tx for tx in self.genesis if not tx.is_block]
34-
self.daa = DifficultyAdjustmentAlgorithm(settings=settings)
31+
self.daa = DifficultyAdjustmentAlgorithm(settings=self._settings)
3532

3633
def test_single_chain(self):
3734
""" All new blocks belong to case (i).
@@ -358,20 +355,20 @@ def test_block_height(self):
358355
def test_tokens_issued_per_block(self):
359356
manager = self.create_peer('testnet', tx_storage=self.tx_storage)
360357
# this test is pretty dumb in that it test every possible height until halving has long stopped
361-
initial_reward = settings.INITIAL_TOKENS_PER_BLOCK
362-
final_reward = settings.MINIMUM_TOKENS_PER_BLOCK
358+
initial_reward = self._settings.INITIAL_TOKENS_PER_BLOCK
359+
final_reward = self._settings.MINIMUM_TOKENS_PER_BLOCK
363360
expected_reward = initial_reward
364361
height = 1
365362
# check that there are BLOCKS_PER_HALVING with each reward, starting at the first rewardable block (height=1)
366-
for _i_halving in range(0, settings.MAXIMUM_NUMBER_OF_HALVINGS):
367-
for _i_block in range(0, settings.BLOCKS_PER_HALVING):
363+
for _i_halving in range(0, self._settings.MAXIMUM_NUMBER_OF_HALVINGS):
364+
for _i_block in range(0, self._settings.BLOCKS_PER_HALVING):
368365
reward = manager.get_tokens_issued_per_block(height)
369366
self.assertEqual(reward, expected_reward, f'reward at height {height}')
370367
height += 1
371368
expected_reward /= 2
372369
self.assertEqual(expected_reward, final_reward)
373370
# check that halving stops, for at least two "halving rounds"
374-
for _i_block in range(0, 2 * settings.BLOCKS_PER_HALVING):
371+
for _i_block in range(0, 2 * self._settings.BLOCKS_PER_HALVING):
375372
reward = manager.get_tokens_issued_per_block(height)
376373
self.assertEqual(reward, expected_reward, f'reward at height {height}')
377374
height += 1
@@ -380,7 +377,7 @@ def test_block_rewards(self):
380377
# even dumber test that only check if manager.get_tokens_issued_per_block was used correctly for a really large
381378
# number of blocks, probably not worth running all the time
382379
manager = self.create_peer('testnet', tx_storage=self.tx_storage)
383-
block_count = (settings.MAXIMUM_NUMBER_OF_HALVINGS + 1) * settings.BLOCKS_PER_HALVING
380+
block_count = (self._settings.MAXIMUM_NUMBER_OF_HALVINGS + 1) * self._settings.BLOCKS_PER_HALVING
384381
blocks = add_new_blocks(manager, block_count, advance_clock=block_count * 30)
385382
for block in blocks:
386383
outputs = block.outputs
@@ -393,8 +390,8 @@ def test_daa_sanity(self):
393390
# sanity test the DAA
394391
manager = self.create_peer('testnet', tx_storage=self.tx_storage)
395392
manager.daa.TEST_MODE = TestMode.DISABLED
396-
N = settings.BLOCK_DIFFICULTY_N_BLOCKS
397-
T = settings.AVG_TIME_BETWEEN_BLOCKS
393+
N = self._settings.BLOCK_DIFFICULTY_N_BLOCKS
394+
T = self._settings.AVG_TIME_BETWEEN_BLOCKS
398395
manager.avg_time_between_blocks = T
399396
# stabilize weight on 2 and lower the minimum to 1, so it can vary around 2
400397
manager.min_block_weight = 2
@@ -419,52 +416,56 @@ def test_daa_sanity(self):
419416

420417
def test_daa_weight_decay_amount(self):
421418
self.daa.TEST_MODE = TestMode.DISABLED
422-
amount = settings.WEIGHT_DECAY_AMOUNT
419+
amount = self._settings.WEIGHT_DECAY_AMOUNT
423420

424-
for distance in range(0, settings.WEIGHT_DECAY_ACTIVATE_DISTANCE, 10):
421+
for distance in range(0, self._settings.WEIGHT_DECAY_ACTIVATE_DISTANCE, 10):
425422
self.assertEqual(self.daa.get_weight_decay_amount(distance), 0)
426423

427-
distance = settings.WEIGHT_DECAY_ACTIVATE_DISTANCE - 1
424+
distance = self._settings.WEIGHT_DECAY_ACTIVATE_DISTANCE - 1
428425
self.assertAlmostEqual(self.daa.get_weight_decay_amount(distance), 0)
429426

430-
distance = settings.WEIGHT_DECAY_ACTIVATE_DISTANCE
427+
distance = self._settings.WEIGHT_DECAY_ACTIVATE_DISTANCE
431428
for k in range(1, 11):
432-
for _ in range(settings.WEIGHT_DECAY_WINDOW_SIZE):
429+
for _ in range(self._settings.WEIGHT_DECAY_WINDOW_SIZE):
433430
self.assertAlmostEqual(self.daa.get_weight_decay_amount(distance), k * amount)
434431
distance += 1
435432
self.assertAlmostEqual(self.daa.get_weight_decay_amount(distance), 11 * amount)
436433

437434
def test_daa_weight_decay_blocks(self):
438435
manager = self.create_peer('testnet', tx_storage=self.tx_storage)
439436
manager.daa.TEST_MODE = TestMode.DISABLED
440-
amount = settings.WEIGHT_DECAY_AMOUNT
437+
amount = self._settings.WEIGHT_DECAY_AMOUNT
441438

442-
manager.daa.AVG_TIME_BETWEEN_BLOCKS = settings.AVG_TIME_BETWEEN_BLOCKS
443-
manager.daa.MIN_BLOCK_WEIGHT = 2 + 2 * settings.WEIGHT_DECAY_AMOUNT
444-
add_new_blocks(manager, 2 * settings.BLOCK_DIFFICULTY_N_BLOCKS, advance_clock=settings.AVG_TIME_BETWEEN_BLOCKS)
439+
manager.daa.AVG_TIME_BETWEEN_BLOCKS = self._settings.AVG_TIME_BETWEEN_BLOCKS
440+
manager.daa.MIN_BLOCK_WEIGHT = 2 + 2 * self._settings.WEIGHT_DECAY_AMOUNT
441+
add_new_blocks(
442+
manager,
443+
2 * self._settings.BLOCK_DIFFICULTY_N_BLOCKS,
444+
advance_clock=self._settings.AVG_TIME_BETWEEN_BLOCKS
445+
)
445446

446447
manager.daa.MIN_BLOCK_WEIGHT = 1
447448
base_weight = manager.generate_mining_block().weight
448449
self.assertGreater(base_weight, manager.daa.MIN_BLOCK_WEIGHT)
449450

450-
add_new_blocks(manager, 20, advance_clock=settings.AVG_TIME_BETWEEN_BLOCKS)
451+
add_new_blocks(manager, 20, advance_clock=self._settings.AVG_TIME_BETWEEN_BLOCKS)
451452

452-
dt = settings.AVG_TIME_BETWEEN_BLOCKS # the latest call to add_new_blocks will advance the clock
453-
while dt < settings.WEIGHT_DECAY_ACTIVATE_DISTANCE:
453+
dt = self._settings.AVG_TIME_BETWEEN_BLOCKS # the latest call to add_new_blocks will advance the clock
454+
while dt < self._settings.WEIGHT_DECAY_ACTIVATE_DISTANCE:
454455
weight = manager.generate_mining_block().weight
455456
self.assertAlmostEqual(weight, base_weight)
456457
manager.reactor.advance(1)
457458
dt += 1
458459

459460
dt = 0
460-
while dt < settings.WEIGHT_DECAY_WINDOW_SIZE:
461+
while dt < self._settings.WEIGHT_DECAY_WINDOW_SIZE:
461462
weight = manager.generate_mining_block().weight
462463
self.assertAlmostEqual(weight, base_weight - amount)
463464
manager.reactor.advance(1)
464465
dt += 1
465466

466467
dt = 0
467-
while dt < settings.WEIGHT_DECAY_WINDOW_SIZE:
468+
while dt < self._settings.WEIGHT_DECAY_WINDOW_SIZE:
468469
weight = manager.generate_mining_block().weight
469470
self.assertAlmostEqual(weight, base_weight - 2*amount)
470471
manager.reactor.advance(1)

0 commit comments

Comments
 (0)