semvec/pypi-packages huggingface dataset:
12am 0.1.0
A simple workflow builder that takes the complexity out of building dynamic workflows
License: MIT
Requires Python: >=3.9
Keywords: async, n8n as code, orchestrator, task-orchestration, workflow, workflow-engine

# Midnight

## Data structures

**Cap 6**
- [ ] Linked lists
- [ ] Double linked lists
- [ ] Circular Linked lists

# Basic Operations
- [X] Append
- [X] Remove by index (pop)
- [X] Atribution (= replace)
- [X] Extend
- [ ] insert after
- [ ] insert before
- [X] get head
- [X] Clear

**Improvements**
- [ ] Handle negatives indexes should insert starting from the end of the list
- [ ] Double linked list implementation 
- [ ] Fix type errors (Generic implementation linked and double linked list)

# Study more
- [ ] Iterator x Generators
- [ ] Del statement

# References
- Data structures and Algorithms with Javascript - 2 Edition - Loaine Groner
- Fluent Python - 2 Edition - Luciano Ramalho
aqdlog 1.1.0
Asynchronous logging with queueing and deduplication
License: MIT
Requires Python: >=3.8
Keywords: logging, async, queue, deduplication, python

# aqdlog (aqdlog)

Asynchronous logging helper for Python providing:

* Non-blocking logging via QueueHandler + QueueListener
* Simple deduplication of repeated (level, message) pairs
* Timestamp / level / function / line formatting
* Optional file output (console by default)

## Installation

Using uv (recommended):
```bash
uv add aqdlog
```

Standard pip (after publishing):
```bash
pip install aqdlog
```

## Quick Start
```python
from aqdlog import log

logger = log("my_app", level="INFO")
logger.info("Service start")
logger.warning("Low disk space")
logger.warning("Low disk space")  # Duplicate suppressed
```

## API
```python
log(name: str, level: str = "INFO", log_file: str | None = None) -> logging.Logger
```
Args:
* name: Logger name (use __name__)
* level: Case-insensitive level name (INFO/DEBUG/WARNING/ERROR/CRITICAL)
* log_file: File path; omit for stderr

Returns a Logger configured with QueueHandler and a running QueueListener.

### Deduplication
DuplicateFilter remembers (level, message) pairs; repeats are dropped for the lifetime of the logger instance. Structured extras are ignored.

### Shutdown
Implementation currently assigns `logger.shutdown = shutdown()` (invoked immediately). Prefer `logging.shutdown()` on process exit to flush handlers.

## Limitations
* Unlimited queue size (-1)
* Naive duplicate suppression
* Re-calling log() with same name returns existing logger; later level/file changes ignored

## Roadmap
Configurable dedup strategy, max queue size, dynamic reconfiguration, graceful listener stop, structured logging.

## License
MIT