Skip to content

Commit

Permalink
Implement warning logging level (#2323)
Browse files Browse the repository at this point in the history
* Make version.py bittensor import independent

* Update setup.py, replace file with the __version__

* Update settings.py

* Make axon independent of bittensor import. Fix axon tests.

* Make chain_data.py independent of bittensor import. Fix chain_data tests.

* Make dendrite.py independent of bittensor import. Fix dendrite tests.

* Make staking.py independent of bittensor import. Fix staking tests.

* Make subtensor.py independent of bittensor import. Fix subtensor tests.

* Make prometheus.py independent of bittensor import. Fix prometheus tests.

* Axon refactoring

* Move subnets.py into bittensor/utils since this module is not used within the bittensor package, but is actively used by the community.

* Make synapse.py independent of bittensor import. Fix synapse tests.

* Make tensor.py independent of bittensor import. Fix tensor tests.

* Change name `bittensor.utils.hash` -> `bittensor.utils.get_hash`

* Moved from using `import bittensor` (withing bittensor codebase) to direct imports of modules and other objects. It helped to avoid namespace conflicts.

* Add backwards compatibility for 'bittensor.api.extrinsics' as 'bittensor.extrinsics'

* Move the contents of `wallet_utils.py` to `bittensor/utils/__init__.py`, since it is used directly from utils.

* Delete `bccli` staff and related tests. Fix setup.py.

* Fix tests.

* Makes the `bittensor.utils.mock` subpackage available as `bittensor.mock` for backwards compatibility.

* Check for participation before nomination call

* Ruff formatting. Fix ruff's complaints.

* Removing obsolete, unused (community and bittensor) code

* Move backwards compatibility related content to `bittensor/utils/backwards_compatibility` subpackage

* btlogging/loggingmachine.py improvement from #2155

* Fixes after `Merge streaming fix to staging` from #2183

* Review fix.

* Remove black from dev requirements.

* black back

* Remove space from prod.txt. Remove black from dev.txt

* Add dendrite reference to backwords compatibility

* Fix the usage of env vars in default settings.

* ruff

* Change the subpackage name to `deprecated`

* Update __version__ until 8.0.0

* Move `subnets.py` to `bittensor/utils` as it is considered more utility than deprecated.

* Rename test module

* Add aliases mapping test

* ruff

* Init: Adds initial e2e tests

* Ruff

* Fixes LOCALNET_SH_PATH env_var

* Adds module description

* Adds commit-reveal back and adds e2e for liquid alpha & commit reveal

* Review suggestions implemented

* Fixes logging string

* Enhance: Switch from format() to f-strings

* ruff

* Optimize imports

* Add the opportunity to run `python - m bittensor`

* replace deps link from https to ssh

* Fixes metagraph save/load for neurons, added e2e tests (metagraph + extrinsics)

* Renamed test

* Adds missing statements

* increase subtensor.py test coverage until 80%

* ruff

* add tests

* ruff

* add tests _do_serve_prometheus

* add tests neuron_for_uid

* sort tests by group

* sort tests by group

* remove unused import

* add test for `get_neuron_for_pubkey_and_subnet`

* Add unit tests to subtensor.py

* Fix ruff + `test_do_set_weights_no_waits` description

* add tests

* ruff + add tests

* ruff

* add test

* fix unused imports

* Config refactoring

* Remove duplicated tests

* add test

* remove duplicated import

* remove unused functions

* remove unused functions + add tests

* ruff

* fix type annotation

* add tests

* Add tests and remove unused functions

* fix test

* ruff

* Add balance tests, small refactoring

* Add init test for bittensor

* ruff

* Add tests for utils.weight_utils.py

* add tests for bittensor.utils.subnets

* ruff

* update test file

* Decoupling chain_data.py to sub-package

* Fix test

* ruff

* review fix

* update `requirements/prod.txt`

* Update localnet entrypoint port

* Add substrate reconnection logic

* Fix tests + add tests

* Ruff formatter

* add docstring to the decorator

* update requirements

* update requirements

* update requirements

* cleanup __init__.py

* - move `extrinsics` from deprecated into `bittensor/core`;
- update `deprecated` sub-package to `deprecated.py` module.

* update ssh to https in requirements

* add reconnection logic for correctly closed connection

* remove unused import

* fix pagination

* Move do_* methods into the related extrinsic module (commit_weights.py).

* Move do_* methods into the related extrinsic module (bittensor/core/extrinsics/set_weights.py).

* Move do_* methods into the related extrinsic module (bittensor/core/extrinsics/transfer.py). + ruff

* Move do_* methods into the related extrinsic module (bittensor/core/extrinsics/serving.py)

* Move do_* methods into the related extrinsic module (bittensor/core/extrinsics/prometheus.py)

* bug fixes

* extrinsics refactoring

* bug fix

* ruff

* fix

* removed exit sys call for ConnectionRefusedError in _get_substrate

* remove unused import

* change the log message

* Corrected arguments order in logging methods + test

* fix integration test

* ruff

* comments fixes

* fix `bittensor/core/subtensor.py:445: error: Argument "logger" to "retry" has incompatible type "LoggingMachine"; expected "Logger | None"  [arg-type]`

* integrate `bt_decode` into BTSDK

* fix logger linter checker

* Reverts logging enhancement

* remove unused code and tests

* remove unused imports

* modification of error formatter, moved the submit_extrinsic call to utils.py, fixed the subtensor.py regarding extrinsics calls, fixed tests

* ruff

* Improved logic for concatenating message, prefix, and suffix in bittensor logging + test

* fix + ruff

* remove unused import

* improve btlogging concat test

* docs AxonInfo

* docs DelegateInfo

* DelegateInfoLite

* IPInfo

* NeuronInfo

* NeuronInfo + NeuronInfoLite

* PrometheusInfo

* ProposalVoteData

* ScheduledColdkeySwapInfo

* ProposalVoteData

* StakeInfo

* StakeInfo + SubnetHyperparameters

* bittensor/core/chain_data/utils.py

* bittensor/core/axon.py

* bittensor/core/axon.py

* bittensor/core/config.py

* bittensor/core/dendrite.py

* bittensor/core/metagraph.py

* bittensor/core/stream.py

* bittensor/core/subtensor.py

* bittensor/core/synapse.py

* bittensor/core/tensor.py

* replace Tuple, Dict, List, Set to python native types

* bittensor/__init__.py

* bittensor/utils/weight_utils.py

* bittensor/utils/version.py

* bittensor/utils/btlogging

* fix

* remove wrong `optional` from docstring's annotations

* apply camel case rule

* bittensor/core/extrinsics/commit_weights.py

* bittensor/core/extrinsics/prometheus.py

* bittensor/core/extrinsics/serving.py

* axon improvement (add annotation)

* README updates for SDK

* bittensor/core/extrinsics/set_weights.py

* bittensor/core/extrinsics/transfer.py

* fix

* weight_utils.py

* check up and fix

* fix Axon Signature

* fix axon

* delete unused import

* update GPG

* remove unused code, remove old tests, add new tests

* fix

* temp commented line

* fix review comments

* fix review comments

* Adding TOC and working in review comments.

* Adding installation options

* Formatting adjustments for html display

* Ruff formatted

* Example reformatted

* update metagraph

* update dendrite.py

* Update README.md

Co-authored-by: garrett-opentensor <156717492+garrett-opentensor@users.noreply.github.com>

* Update README.md

Co-authored-by: garrett-opentensor <156717492+garrett-opentensor@users.noreply.github.com>

* Update README.md

* Update axon.py

* fix tests/unit_tests/test_axon.py

* Update README.md

* set `WARNING` level ad default logging level

* fix test

* implement warning version, do info the same as default level

* fix

* ruff

* cleanup

* Change warning to debug for local connection information

* update deps

* remove unused file

---------

Co-authored-by: ibraheem-opentensor <165814940+ibraheem-opentensor@users.noreply.github.com>
Co-authored-by: ibraheem-opentensor <ibraheem@opentensor.dev>
Co-authored-by: Watchmaker <rajk@opentensor.dev>
Co-authored-by: garrett-opentensor <156717492+garrett-opentensor@users.noreply.github.com>
  • Loading branch information
5 people authored Oct 1, 2024
1 parent bff05c0 commit 27bf3db
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 25 deletions.
21 changes: 0 additions & 21 deletions bittensor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,27 +22,6 @@
from .utils.deprecated import *


# Logging helpers.
def trace(on: bool = True):
"""
Enables or disables trace logging.
Args:
on (bool): If True, enables trace logging. If False, disables trace logging.
"""
logging.set_trace(on)


def debug(on: bool = True):
"""
Enables or disables debug logging.
Args:
on (bool): If True, enables debug logging. If False, disables debug logging.
"""
logging.set_debug(on)


def __getattr__(name):
if name == "version_split":
warnings.warn(
Expand Down
4 changes: 2 additions & 2 deletions bittensor/core/subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,11 @@ def __init__(
logging.info(
f"You are connecting to {self.network} network with endpoint {self.chain_endpoint}."
)
logging.warning(
logging.debug(
"We strongly encourage running a local subtensor node whenever possible. "
"This increases decentralization and resilience of the network."
)
logging.warning(
logging.debug(
"In a future release, local subtensor will become the default endpoint. "
"To get ahead of this change, please run a local subtensor node and point to it."
)
Expand Down
65 changes: 63 additions & 2 deletions bittensor/utils/btlogging/loggingmachine.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,26 +69,48 @@ class LoggingMachine(StateMachine, Logger):
Debug = State()
Trace = State()
Disabled = State()
Warning = State()

enable_default = (
Debug.to(Default)
| Trace.to(Default)
| Disabled.to(Default)
| Default.to(Default)
| Warning.to(Default)
)

enable_info = enable_default

enable_trace = (
Default.to(Trace) | Debug.to(Trace) | Disabled.to(Trace) | Trace.to(Trace)
Default.to(Trace)
| Debug.to(Trace)
| Disabled.to(Trace)
| Trace.to(Trace)
| Warning.to(Trace)
)

enable_debug = (
Default.to(Debug) | Trace.to(Debug) | Disabled.to(Debug) | Debug.to(Debug)
Default.to(Debug)
| Trace.to(Debug)
| Disabled.to(Debug)
| Debug.to(Debug)
| Warning.to(Debug)
)

enable_warning = (
Default.to(Warning)
| Trace.to(Warning)
| Disabled.to(Warning)
| Debug.to(Warning)
| Warning.to(Warning)
)

disable_trace = Trace.to(Default)

disable_debug = Debug.to(Default)

disable_warning = Warning.to(Default)

disable_logging = (
Trace.to(Disabled)
| Debug.to(Disabled)
Expand Down Expand Up @@ -308,9 +330,29 @@ def before_enable_default(self):
continue
logger.setLevel(stdlogging.CRITICAL)

def before_enable_info(self):
"""Logs status before enable Default."""
self._logger.info(f"Enabling default logging.")
self._logger.setLevel(stdlogging.INFO)
for logger in all_loggers():
if logger.name in self._primary_loggers:
continue
logger.setLevel(stdlogging.CRITICAL)

def after_enable_default(self):
pass

def before_enable_warning(self):
"""Logs status before enable Warning."""
self._logger.info("Enabling warning.")
self._stream_formatter.set_trace(True)
for logger in all_loggers():
logger.setLevel(stdlogging.WARNING)

def after_enable_warning(self):
"""Logs status after enable Warning."""
self._logger.info("Warning enabled.")

# Trace
def before_enable_trace(self):
"""Logs status before enable Trace."""
Expand Down Expand Up @@ -449,6 +491,25 @@ def set_trace(self, on: bool = True):
if self.current_state_value == "Trace":
self.disable_trace()

def set_warning(self, on: bool = True):
"""Sets Warning state."""
if on and not self.current_state_value == "Warning":
self.enable_warning()
elif not on:
if self.current_state_value == "Warning":
self.disable_warning()

def set_default(self):
"""Sets Default state."""
if not self.current_state_value == "Default":
self.enable_default()

# as an option to be more obvious. `bittensor.logging.set_info()` is the same `bittensor.logging.set_default()`
def set_info(self):
"""Sets Default state."""
if not self.current_state_value == "Default":
self.enable_info()

def get_level(self) -> int:
"""Returns Logging level."""
return self._logger.level
Expand Down
36 changes: 36 additions & 0 deletions bittensor/utils/deprecated.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
get_hash,
)
from bittensor.utils.balance import Balance as Balance # noqa: F401
from bittensor.utils.btlogging import logging
from bittensor.utils.mock.subtensor_mock import MockSubtensor as MockSubtensor # noqa: F401
from bittensor.utils.subnets import SubnetsAPI # noqa: F401

Expand Down Expand Up @@ -148,3 +149,38 @@
# Makes the `bittensor.core.extrinsics` subpackage available as `bittensor.extrinsics` for backwards compatibility.
extrinsics_subpackage = importlib.import_module("bittensor.core.extrinsics")
sys.modules["bittensor.extrinsics"] = extrinsics_subpackage


# Logging helpers.
def trace(on: bool = True):
"""
Enables or disables trace logging.
Args:
on (bool): If True, enables trace logging. If False, disables trace logging.
"""
logging.set_trace(on)


def debug(on: bool = True):
"""
Enables or disables debug logging.
Args:
on (bool): If True, enables debug logging. If False, disables debug logging.
"""
logging.set_debug(on)


def warning(on: bool = True):
"""
Enables or disables warning logging.
Args:
on (bool): If True, enables warning logging. If False, disables warning logging and sets default (INFO) level.
"""
logging.set_warning(on)


# set Warning logging level for bittensor SDK
warning()

0 comments on commit 27bf3db

Please sign in to comment.