abstract-block-dumper 0.0.9__tar.gz → 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/CHANGELOG.md +5 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/PKG-INFO +1 -1
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/pyproject.toml +3 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/scheduler.py +9 -26
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/utils.py +1 -1
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_version.py +2 -2
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/decorators.py +3 -1
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.cruft.json +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.github/dependabot.yml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.github/workflows/ci.yml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.github/workflows/publish.yml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.gitignore +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.pre-commit-config.yaml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/.shellcheckrc +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/README.md +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/SECURITY.md +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/docs/3rd_party/cookiecutter-rt-pkg/CHANGELOG.md +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/.dockerignore +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/.gitignore +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/Dockerfile +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/README.md +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/admin.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/apps.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/management/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/management/commands/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/management/commands/create_admin.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/migrations/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/models.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/tasks.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/tests.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/views.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/docker-compose.yml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/asgi.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/celery.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/settings.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/urls.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/wsgi.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/main.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/manage.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/pyproject.toml +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/pytest.ini +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/uv.lock +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/noxfile.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/dal/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/dal/django_dal.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/dal/memory_registry.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/discovery.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/exceptions.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/backfill_scheduler.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/block_processor.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/executor.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_internal/services/metrics.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/admin.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/apps.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/management/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/management/commands/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/management/commands/backfill_blocks_v1.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/management/commands/block_tasks_v1.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/migrations/0001_initial.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/migrations/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/models.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/py.typed +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/celery.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/tasks.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/conftest.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/django_fixtures.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/fatories.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/__init__.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_backfill_scheduler.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_block_processor.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_concurrent_processing.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_multi_arguments_tasks.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_registered_celery_tasks.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_scheduler.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_task_registration.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/settings.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/unit/test_celery_integration.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/unit/test_decorator.py +0 -0
- {abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/uv.lock +0 -0
|
@@ -9,6 +9,11 @@ upcoming release can be found in [changelog.d](changelog.d).
|
|
|
9
9
|
|
|
10
10
|
<!-- towncrier release notes start -->
|
|
11
11
|
|
|
12
|
+
## [0.1.0](https://github.com/bactensor/abstract-block-dumper/releases/tag/v0.1.0) - 2025-12-10
|
|
13
|
+
|
|
14
|
+
No significant changes.
|
|
15
|
+
|
|
16
|
+
|
|
12
17
|
## [0.0.9](https://github.com/bactensor/abstract-block-dumper/releases/tag/v0.0.9) - 2025-12-04
|
|
13
18
|
|
|
14
19
|
No significant changes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstract-block-dumper
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.1.0
|
|
4
4
|
Project-URL: Source, https://github.com/bactensor/abstract-block-dumper
|
|
5
5
|
Project-URL: Issue Tracker, https://github.com/bactensor/abstract-block-dumper/issues
|
|
6
6
|
Author-email: Reef Technologies <opensource@reef.pl>
|
|
@@ -27,12 +27,10 @@ class TaskScheduler:
|
|
|
27
27
|
block_processor: BlockProcessor,
|
|
28
28
|
network: str,
|
|
29
29
|
poll_interval: int,
|
|
30
|
-
realtime_head_only: bool = False,
|
|
31
30
|
) -> None:
|
|
32
31
|
self.block_processor = block_processor
|
|
33
32
|
self.network = network
|
|
34
33
|
self.poll_interval = poll_interval
|
|
35
|
-
self.realtime_head_only = realtime_head_only
|
|
36
34
|
self.last_processed_block = -1
|
|
37
35
|
self.is_running = False
|
|
38
36
|
self._subtensor: bt.Subtensor | None = None
|
|
@@ -114,31 +112,17 @@ class TaskScheduler:
|
|
|
114
112
|
self._current_block_cache = self.subtensor.get_current_block()
|
|
115
113
|
current_block = self._current_block_cache
|
|
116
114
|
|
|
117
|
-
if
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
self.block_processor.process_block(current_block)
|
|
115
|
+
# Only process the current head block, skip if already processed
|
|
116
|
+
if current_block != self.last_processed_block:
|
|
117
|
+
with BlockProcessingTimer(mode="realtime"):
|
|
118
|
+
self.block_processor.process_block(current_block)
|
|
122
119
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
set_current_block("realtime", current_block)
|
|
121
|
+
increment_blocks_processed("realtime")
|
|
122
|
+
set_block_lag("realtime", 0) # Head-only mode has no lag
|
|
123
|
+
self.last_processed_block = current_block
|
|
127
124
|
|
|
128
|
-
|
|
129
|
-
else:
|
|
130
|
-
# Original behavior: process all blocks from last_processed to current
|
|
131
|
-
for block_number in range(self.last_processed_block + 1, current_block + 1):
|
|
132
|
-
with BlockProcessingTimer(mode="realtime"):
|
|
133
|
-
self.block_processor.process_block(block_number)
|
|
134
|
-
|
|
135
|
-
# Update metrics
|
|
136
|
-
set_current_block("realtime", block_number)
|
|
137
|
-
increment_blocks_processed("realtime")
|
|
138
|
-
set_block_lag("realtime", current_block - block_number)
|
|
139
|
-
|
|
140
|
-
time.sleep(self.poll_interval)
|
|
141
|
-
self.last_processed_block = block_number
|
|
125
|
+
time.sleep(self.poll_interval)
|
|
142
126
|
|
|
143
127
|
except KeyboardInterrupt:
|
|
144
128
|
logger.info("TaskScheduler stopping due to KeyboardInterrupt.")
|
|
@@ -191,5 +175,4 @@ def task_scheduler_factory(network: str = "finney") -> TaskScheduler:
|
|
|
191
175
|
block_processor=block_processor_factory(),
|
|
192
176
|
network=network,
|
|
193
177
|
poll_interval=getattr(settings, "BLOCK_DUMPER_POLL_INTERVAL", 1),
|
|
194
|
-
realtime_head_only=getattr(settings, "BLOCK_DUMPER_REALTIME_HEAD_ONLY", True),
|
|
195
178
|
)
|
|
@@ -17,7 +17,7 @@ def get_bittensor_client(network: str = "finney") -> bt.Subtensor:
|
|
|
17
17
|
doesn't change during runtime.
|
|
18
18
|
"""
|
|
19
19
|
logger.info("Creating new bittensor client for network", network=network)
|
|
20
|
-
return bt.
|
|
20
|
+
return bt.Subtensor(network=network)
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def get_current_celery_task_id() -> str:
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/_version.py
RENAMED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.0
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.1.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -74,7 +74,9 @@ def schedule_retry(task_attempt: TaskAttempt) -> None:
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
def _celery_task_wrapper(
|
|
77
|
-
func: Callable[..., Any],
|
|
77
|
+
func: Callable[..., Any],
|
|
78
|
+
block_number: int,
|
|
79
|
+
**kwargs: dict[str, Any],
|
|
78
80
|
) -> dict[str, Any] | None:
|
|
79
81
|
executable_path = abd_utils.get_executable_path(func)
|
|
80
82
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/admin.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/apps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/models.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/tasks.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/tests.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/block_explorer/views.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/docker-compose.yml
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/asgi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/urls.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/example_project/example_project/wsgi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/admin.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/apps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/models.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/py.typed
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/__init__.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/celery.py
RENAMED
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/src/abstract_block_dumper/v1/tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/integration/test_scheduler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_block_dumper-0.0.9 → abstract_block_dumper-0.1.0}/tests/unit/test_celery_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|