Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .agent/CONTEXT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# PYTHON

- **Package Manager**: project use **`uv`** for package management. Commands like `uv pip`, `uv run`, and `uv add` are required.
- **Virtual Environment**: Work must always be performed within a `.venv` virtual environment.
- **CRITICAL**: You MUST NEVER run `uv`, `python`, or `pip` commands WITHOUT first enabling the virtual environment.
- **ALWAYS** run `source .venv/bin/activate` before any python-related command.
- **Concurrency**: Prefer non-blocking code using **`asyncio`** over blocking synchronous code.
- **Web Server**: Use **`aiohttp`** as the default web server/client library.
18 changes: 4 additions & 14 deletions navconfig/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,10 @@
# Reduce asyncio log level:
logging.getLogger('asyncio').setLevel(logging.INFO)

### Example how to use Global-Settings.
### Load Global-Settings if available (optional).
### The settings package is not mandatory for navconfig to work.
with contextlib.suppress(ImportError):
from settings import * # pylint: disable=W0401,W0614 # noqa

try:
from settings.settings import * # pylint: disable=W0401,W0614 # noqa
except ImportError as err:
try:
from settings.settings import * # pylint: disable=W0401,W0614 # noqa
except ImportError:
from settings import * # pylint: disable=W0401,W0614 # noqa
except ImportError as err:
logging.error("There is no *settings/* module in project.")
print(
"Settings.py File is missing."
"Hint: Its recommended to use a settings/settings.py"
" or settings/__init__.py module to customize your "
" Configuration."
)
65 changes: 35 additions & 30 deletions navconfig/logging/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,43 +184,48 @@
if logging_enable_logstash is True:
logging.debug("Logstash configuration Enabled.")
### Importing Logstash Handler and returning Logging Config:
from .handlers.logstash import LogstashHandler
from .handlers.logstash import LogstashHandler, LOGSTASH_AVAILABLE

logstash_logging = config.get(
"logstash_logging", section="logging", fallback="INFO"
)

lh = LogstashHandler(
config=config,
loglevel=logstash_logging,
application=APP_NAME
)
if not LOGSTASH_AVAILABLE:
logging.warning(
"Logstash Logging is enabled but 'python-logstash-async' "
"is not installed. Skipping Logstash handler. "
"Hint: run 'pip install python-logstash-async'."
)
else:
logstash_logging = config.get(
"logstash_logging", section="logging", fallback="INFO"
)

if lh.logstash_available():
logging_config["formatters"]["logstash"] = lh.formatter(path=BASE_DIR)
logging_config["handlers"]["LogstashHandler"] = lh.handler(
enable_localdb=config.getboolean(
"LOGSTASH_ENABLE_DB",
fallback=True
),
logdir=LOG_DIR,
lh = LogstashHandler(
config=config,
loglevel=logstash_logging,
application=APP_NAME
)

# Add logstash handler to all relevant loggers
for logger_name in [APP_NAME, "__main__", ""]:
if logger_name in logging_config["loggers"]:
logging_config["loggers"][logger_name]["handlers"].append(
"LogstashHandler"
)
if lh.logstash_available():
logging_config["formatters"]["logstash"] = lh.formatter(path=BASE_DIR)
logging_config["handlers"]["LogstashHandler"] = lh.handler(
enable_localdb=config.getboolean(
"LOGSTASH_ENABLE_DB",
fallback=True
),
logdir=LOG_DIR,
)

# Add logstash handler to all relevant loggers
for logger_name in [APP_NAME, "__main__", ""]:
if logger_name in logging_config["loggers"]:
logging_config["loggers"][logger_name]["handlers"].append(
"LogstashHandler"
)

logging_config["root"]["handlers"].append("LogstashHandler")
else:
logging.error(
(
logging_config["root"]["handlers"].append("LogstashHandler")
else:
logging.warning(
"Logstash Logging is enabled but Logstash server "
"is Unavailable, please start Logstash Server."
"is unavailable, please start Logstash Server."
)
)

### Load Logging Configuration:
setLoggerClass(VerboseLogger)
Expand Down
13 changes: 7 additions & 6 deletions navconfig/logging/handlers/logstash.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# basic configuration of Logstash
import socket

# Check if logstash_async is available
LOGSTASH_AVAILABLE = False
try:
import logstash_async # pylint: disable=W0611
except ImportError as ex:
raise RuntimeError(
"NavConfig: Logstash Logging is enabled but Logstash async \
dependency is not installed.\
Hint: run 'pip install python-logstash-async'."
) from ex
LOGSTASH_AVAILABLE = True
except ImportError:
pass

from .abstract import AbstractLog


Expand Down
2 changes: 1 addition & 1 deletion navconfig/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"Configuration tool for all Navigator Services "
"Tool for accessing Config info from different sources."
)
__version__ = "2.0.3"
__version__ = "2.0.4"
__copyright__ = "Copyright (c) 2020-2024 Jesus Lara"
__author__ = "Jesus Lara"
__author_email__ = "jesuslarag@gmail.com"
Expand Down