Skip to main content

lncrawl-sourcelib

Interpreter for declarative light-novel source definitions.

A source definition describes how to read one website as data rather than as code: one YAML document per host, validated against a published schema and interpreted at runtime. RFC-0001 is the normative definition of the format, and it lives here: one grammar version covers the model, the step registry and the hook points together, so an errata and the code honouring it are a single change. Where this package and the RFC disagree, the RFC wins and the package has a bug.

The definitions themselves live in lncrawl/sources, which also carries the guides for writing one.

pip install lncrawl-sourcelib          # validate, resolve and transform
pip install lncrawl-sourcelib[fetch]   # ...and reach a site

Fetching is an extra. Validating a spec needs no HTTP stack, and the definitions repository's CI and anyone only writing YAML should not have to install a TLS impersonation library.

What it does

Offline, on a checkout of the definitions repository:

sourcelib check                          # resolve and validate every document
sourcelib check --fixtures               # replay recorded pages
sourcelib resolve specs/example.com.yaml # what a spec actually says once merged
sourcelib schema -o schema.json          # the JSON Schema editors read

Against a live site, which is what the fetch extra is for:

sourcelib explain <url>                              # a structural digest, for writing a spec
sourcelib try specs/example.com.yaml <novel-url>     # run one spec, field by field
sourcelib record specs/example.com.yaml <novel-url>  # save the pages as a fixture

try reports each field and exits non-zero on a failure, so an agent loop needs no output parsing. --json emits the same thing structurally.

from sourcelib.spec.checks import check_resolved
from sourcelib.spec.resolve import resolve_file

spec = resolve_file("specs/example.com.yaml", root=".")
for problem in check_resolved(spec):
    print(problem)

resolve matters more than it looks. A spec can inherit through a chain of bases, so "what am I actually running" has to be answerable in one command or a deep chain becomes undebuggable.

Development

uv sync
uv run poe test
uv run poe lint          # ruff, then pyright
uv run poe lint-fix

[tool.poe.tasks] in pyproject.toml is the full list.

The CLI runs from the checkout the same way, with the extra when a command reaches a site:

uv run sourcelib check <path-to-sources-checkout>/specs --strict
uv run --extra fetch sourcelib try <path>/specs/example.com.yaml <novel-url>

To work on a spec and the interpreter together, run the CLI from the definitions checkout against this one, so an edit here takes effect without reinstalling:

uv run --with-editable <path-to-this-checkout> --with lncrawl-scraper \
  sourcelib try specs/example.com.yaml <novel-url>

The crawler resolves this package as an ordinary dependency. To point it at a checkout instead, install it into the crawler's environment and then use uv run --no-sync there, because a plain uv run re-syncs from the lock file and drops the override:

uv pip install -e <path-to-this-checkout>
uv run --no-sync python -m lncrawl ...

Why it is its own package

It is not a feature of the crawler; it is the crawler's next core. Built inside the crawler it would grow references into the code it replaces, and swapping it in would become a rewrite instead of a dependency bump.

This package never imports the crawler, and its CI asserts that. It also means the definitions repository can validate itself with no application in the loop.

Licence

Apache-2.0. The crawler is GPL-3.0-or-later, and Apache-2.0 feeds a GPL-3 application without friction. Nothing here is copied or adapted from the crawler's sources.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lncrawl_sourcelib-0.1.9.tar.gz (322.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lncrawl_sourcelib-0.1.9-py3-none-any.whl (95.4 kB view details)

Uploaded Python 3

File details

Details for the file lncrawl_sourcelib-0.1.9.tar.gz.

File metadata

  • Download URL: lncrawl_sourcelib-0.1.9.tar.gz
  • Upload date:
  • Size: 322.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lncrawl_sourcelib-0.1.9.tar.gz
Algorithm Hash digest
SHA256 974b2789669b8910769b9a6caa4d588b9ead86c7b417ae6ce805552c0421ad8e
MD5 0819cb8946e81d46a99bae7b7da741b5
BLAKE2b-256 d444700963c4587dc07f3f6bd4b2b20ee6a4f9676fd3b2e7840fb8c13e5aaab0

See more details on using hashes here.

Provenance

The following attestation bundles were made for lncrawl_sourcelib-0.1.9.tar.gz:

Publisher: publish.yml on lncrawl/sourcelib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lncrawl_sourcelib-0.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for lncrawl_sourcelib-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 9952b9ac86c7618772055026fc19ac10667c909ec79552aaa595bcd59b2b41a0
MD5 f5448182609f437b2f3ffe725a436b07
BLAKE2b-256 7fdf26002ed6f553097c66d7b28dd6c63203bec0647713f58f7c9b86a43b387b

See more details on using hashes here.

Provenance

The following attestation bundles were made for lncrawl_sourcelib-0.1.9-py3-none-any.whl:

Publisher: publish.yml on lncrawl/sourcelib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.11

2 files

0.1.10

2 files

This release

0.1.9 This release

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page