Skip to main content

Инструментарий XBSL (1С:Элемент): линтер, LSP, документация, индекс проекта, скаффолдинг метаданных

Project description

xbsl

English · Русский

CI

The XBSL (1C:Element) toolkit: a linter with autofixes, an LSP server, a project index, platform documentation search, metadata scaffolding and an MCP server for AI agents. It works on Name.yaml (element description) and Name.xbsl (code module) pairs – before the server-side compilation that happens on deploy.

Before 0.16 the project was named xbsl-lint (the xbsllint package). The old names keep working: the xbsllint* commands are aliases of the new ones, import xbsllint returns the xbsl modules, and both spellings of the environment variables and entry-point groups are honored.

Not affiliated with 1C. "1C:Element", "1C:Fresh" and related names are trademarks of their respective owners. Language data is generated from your own distribution. See NOTICE.

Development notes and updates (in Russian): the 1C × AI: engineering workshop Telegram channel.

Why

1C:Element has no external tooling: the only code check is the server-side compilation on deploy – it is slow and knows nothing about project conventions. xbsl gives fast local feedback, catches what the compiler does not check at all, and takes over the metadata mechanics – creating objects, attributes and forms.

How it works

One engine, four surfaces. The core reads the Имя.yaml + Имя.xbsl pairs, and the scaffolding writes them back; the CLI, the LSP server, the MCP server and the web UI are thin adapters over the same core, so every surface sees the same rules, data and templates:

The engine core (linter, autofixes, project index, docs search) and the metadata scaffolding read and write the project sources; a private plugin adds Element language data and custom rules via entry points; the CLI, the LSP server (VS Code), the MCP server (AI agents) and the web UI are surfaces over the same core

Step 1: generate the language data

The linter relies on language tables (bilingual keywords, operators), an stdlib type catalog, and the configuration metamodel (element properties). XBSL is built on Eclipse Xtext + ANTLR; these are extracted from your 1C:Element distribution (the InternalBsl.g grammar, the documentation, and the .xcore metamodel) and are NOT bundled in this repository. Generate them locally:

python tools/extract_grammar.py   --dist "<path to the 1C:Element distribution>"
python tools/extract_stdlib.py    --dist "<path to the 1C:Element distribution>"
python tools/extract_metamodel.py --dist "<path to the 1C:Element distribution>"

The scripts auto-detect the platform version and place the data under xbsl/data/element/<version>/ (this folder is gitignored). Without the data, the linter and the tests will tell you to generate it. Pass --data-dir (or set XBSL_DATA_DIR) to write the data somewhere else – for instance into a private package that ships it, see Extending.

Step 2: install and run

pip install xbsl            # or, from a clone: pip install -e .
xbsl path/to/sources        # or: python -m xbsl path/to/sources
xbsl self-update            # upgrade to the latest PyPI version

self-update upgrades the package by unpacking the wheel straight into site-packages – safe even when pip install --upgrade fails with WinError 32 because an exe is busy (the typical case: xbsl-lsp.exe held by the VS Code LSP server, xbsl-mcp.exe by an agent's MCP session). The busy stubs are left alone and pick up the new code on the next start; restart the long-living processes after the update. --version X.Y.Z installs a specific version. In an editable install from a clone the command refuses – git pull updates that one.

The extractors from step 1 ship with the repository, not with the PyPI package – clone the repository to generate the data.

The hot modules (the lexer and the parser) can be compiled by mypyc into C extensions: XBSL_MYPYC=1 at build time (needs mypy and a C compiler: MSVC Build Tools on Windows, Xcode CLT on macOS, gcc on Linux). Users never need a compiler: the ready-made native wheels are built by CI (native-wheels.yml), and without a matching wheel the package runs as plain Python – no compiler, no loss of functionality.

Flags: --list-rules, --where (data root, source and versions), --select/--enable/--ignore (by rule id, rule group – the part of the id before / – or tier letter), --fix, --baseline/--write-baseline, --element-version, --data-dir, --lang, --format text|json|codeclimate. --fix repairs the mechanical findings in place – trailing whitespace, typography characters (em dash → en dash, ..., curly quotes and comment guillemets → straight), and mixed newlines (normalized to the dominant style) – then reports whatever is left. It only applies unambiguous edits and only for rules active in the run (so --fix --enable typography also pays down the em-dash/guillemets debt); anything needing judgment is never touched. For editor integration, --stdin --filename NAME checks a single buffer read from stdin (per-file rules only); the JSON payload ({diagnostics, summary}) is the same one the MCP server returns. xbsl --index PATH dumps a JSON index of the project to stdout instead of linting – the objects (with tabular sections, module-declared local types and the member families for dot completion), the method declarations with their annotations and the named form components, with POSIX paths relative to the root and 1-based lines – for go-to-definition and completion in editors. --format codeclimate emits a GitLab Code Quality report (Code Climate issues) with paths relative to the current directory – run it from the repository root and save the output as the codequality artifact.

Output language

Rule titles and diagnostic messages come in Russian and English. The language is picked by --lang ru|en > the XBSL_LANG env var > the system locale > Russian. Type names, keywords and other XBSL text inside a message are never translated – only the wording around them. The MCP server and the web panel follow the same setting (the web panel also has an in-page RU/EN toggle).

Use in CI

xbsl exits non-zero only when a run produces an error-severity finding, so it works as a pipeline gate as-is – warnings and info do not fail the build. The one prerequisite is the language data (see Step 1): generate it in the job (the extractors ship with the repository, so check the repo out), or depend on a package that ships the data via the xbsl.data entry point (see Extending) and just pip install it.

GitHub Actions

lint:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
      with: { python-version: "3.12" }
    - run: pip install xbsl
    # generate the data from your 1C:Element distribution (or install a package that ships it):
    - run: |
        python tools/extract_grammar.py  --dist "$ELEMENT_DIST"
        python tools/extract_stdlib.py   --dist "$ELEMENT_DIST"
        python tools/extract_metamodel.py --dist "$ELEMENT_DIST"
    - run: xbsl e1c/          # fails the job on any error-severity finding

GitLab CI (Code Quality widget)

--format codeclimate writes a Code Climate report that GitLab renders inline on the merge request. Run it from the repository root and save the output as the codequality report. The command still returns non-zero on error-severity findings, so artifacts.when: always keeps the report even when the job gates the pipeline (drop the gate with a trailing || true if you want the widget only):

lint:
  script:
    - pip install xbsl
    - xbsl --format codeclimate e1c/ > gl-code-quality-report.json
  artifacts:
    when: always
    reports:
      codequality: gl-code-quality-report.json

Rule tiers

The full list of all 86 rules (severity, default state, scope, links to platform documentation sections) is in docs/RULES.md; at runtime – xbsl list-rules. Below is an overview by tier.

  • A. Structure and YAML.xbsl/.yaml pairing, schema validity, Ид as a UUID, Ид uniqueness, Имя matching the file name.
  • B. Text and conventions – typography (en dash, straight quotes), encoding/BOM/newlines/trailing whitespace, indentation and line length.
  • C. Code structure – balance of blocks and ;, brackets, unused local and loop variables, a structure reference field that must be обз, plus the platform's code style conventions (the style/ group, see below).
  • D. Semantics – against platform data and the project itself: types, enumeration values, cross-file consistency (see below).

The type rules of tier D cover every type position in code (новый, как casts, annotations, signatures) and every Тип: value in yaml (unions А|Б|?, generics, nullable): the root must be a known type – stdlib, a project object or a module-declared local type – and a dotted chain rooted at a project object must stay within the family that object generates: the derived types extracted from the distribution docs (Ссылка, Объект, СоздатьОбъект, the automatic forms...), its tabular sections and module structures. Namespace-qualified references (Справочник.X.Ссылка) also check that the object exists under that kind, and the values of project enumerations are verified both in code and in yaml bindings.

The cross-file rules of tier D catch what the compiler reports late or not at all: a yaml handler missing from the paired module, a foreign-subsystem type used without an Импорт: entry, a dynamic list typed by the automatic list form that misses an attribute of its object, a cross-component Компоненты.X.Метод() call to a method without a visibility annotation, environment mismatches (@НаСервере called from a client handler without @ДоступноСКлиента, a client-only module used from an HTTP service), reserved names (Тип/type as a field or parameter, a component property named like a built-in one), methods that nothing references, and top-level yaml properties against the configuration metamodel. The query/ group parses Запрос{ ... } blocks and verifies the tables of ИЗ/СОЕДИНЕНИЕ against the project objects and their tabular sections; a block with constructs outside the supported subset (temporary tables, unions, subqueries) is skipped whole rather than guessed.

Detailed group descriptions - query/ (a composite type in IN with a subquery), project/ (project properties), naming/ (the naming standard, the [morph] extra) and style/ (code-writing conventions and their on/off policy) - live in docs/RULES.md.

Baseline: adopt a rule on a legacy codebase

To enable a rule over code that already violates it without drowning in legacy findings, freeze the current findings into a baseline and hold only new code to the rule:

xbsl e1c/app --enable style --write-baseline baseline.json   # freeze the debt once
xbsl e1c/app --enable style --baseline baseline.json         # only NEW findings surface

A finding's identity is (file, rule, message) with an allowed count, so moving a line keeps its finding suppressed while a genuinely new violation surfaces. The summary reports how many findings the baseline suppressed and how many of its entries are now stale (debt paid down) – a signal to rewrite the file. Paths are stored relative to the baseline file, so commit it at the repository root and run the linter from anywhere.

The same file also records point exclusions with their reasons: an entry's value is either a bare count or {"count": N, "reason": "..."} – the reason says why the code is right on purpose. Reasons are written by the "Exclude the finding" lightbulb action of the VS Code extension (or by hand); --write-baseline keeps the reasons of the identities that survive a rewrite. The LSP server accepts the same --baseline FILE flag, so exclusions disappear in editors too. The identity includes the message text: write and check the baseline under the same output language.

Metadata scaffolding

The toolkit takes over the metadata mechanics: UUIDs, indentation, precise yaml insertions, duplicate checks and section/kind compatibility. The same operations are exposed through the CLI (subcommands, JSON output), MCP (the meta_* tools for agents) and LSP (the xbsl/meta* custom requests that power the VS Code metadata tree).

33 kinds of project element are creatable – from Справочник and Документ to ВиртуальнаяТаблица (paired with its mandatory .xbql query), ЗапланированноеЗадание, contracts, rights and commands. Each kind carries what the docs make mandatory: the platform's own default scope (ВПодсистеме – widen it deliberately with --scope), a module stub for the handler the kind cannot live without, and a note for whatever the generator must not invent for you. Kinds whose content is drawn in the designer (ПанельОтчетов, ПроцессИнтеграции) are deliberately absent.

The VS Code tree, AI agents and the terminal call the same scaffolding core; it writes created and point-edited yaml/xbsl files, the linter checks what was written, and the response carries files, notes and the lint report; the LSP surface returns full texts for the editor to apply

xbsl new-project . vendor App                        # Проект.yaml + Проект.xbsl + a subsystem
xbsl new-object vendor/App/Основное Справочник Товары
xbsl add-field vendor/App/Основное/Товары.yaml реквизит Цвет --type Строка
xbsl add-form . --name Товары                        # object + list forms, registered
xbsl add-form . --name Товары --forms list-cards     # list form as a card grid
xbsl new-object ... HttpСервис Каталог --routes "GET /, POST /, GET /{id}"
xbsl add-route  .../Каталог.yaml "DELETE /{id}"      # url template + handler stub
xbsl add-subsystem vendor/App Задачи
xbsl add-dependency . e1c CurrencyConverter 2.0      # library into the project's Библиотеки
xbsl rename-object . Товары Номенклатура             # rename files + update references
xbsl set-access . --name Товары --default РазрешеноАутентифицированным
xbsl object-info . --name Товары                     # fields, tabulars, forms, namespace
xbsl project-info .                                  # projects, subsystems, objects by kind

Forms are generated with real content: input fields per attribute (including the standard Наименование / Номер / Дата and hierarchy support), dynamic-list columns, tabular-section tables, a report form with parameters; the form is registered in the owner's Интерфейс section. --dry-run prints the changes (with full file texts) without writing – this is how the VS Code extension applies them through its own undo-friendly edits.

--forms list-cards builds the list form as a card grid instead of a table: a ПроизвольныйСписок whose КонтейнерСтрок is a matrix group, plus the row component СтрокаСписка<Имя>. The card takes a title, a photo (a ДвоичныйОбъект.Ссылка attribute switches it to ПроизвольнаяКарточка with the image above the caption) and up to three more fields, dates formatted; notes report what landed on the card and what did not. --card-min-width sets the grid column width (default 400, 250 with a photo) and --card-placeholder the image shown when the photo is empty.

add-dependency attaches a library – the Библиотеки section of Проект.yaml (Имя, Поставщик, Версия). The version is the library's release version: a release is issued in the control panel, and a build version with a suffix (1.0-42) is rejected. Different versions of one library within a project are not allowed, so attaching an already attached library updates the version of the existing entry. What is attached now – project-info (projects[].libraries). The vendor, name, version and the qualified type names of a library come from parsing its archive: elemctl inspect <file.xlib>.

set-access edits КонтрольДоступа.Разрешения in place, aware of what each kind allows: --default sets the ПоУмолчанию right, --permission Чтение=РазрешеноВсем an individual one (custom rights of a ПравоНаЭлемент included), --calc-by fills РасчетРазрешенийПо – mandatory for РазрешенияВычисляютсяДляКаждогоОбъекта. Wrong methods, rights a kind does not have, and per-object rights on a НаборКонстант are rejected; the computed-permission handlers stay yours to write (notes say which). object-info reports the current permissions and the kind's rights, project-info the ПоУмолчанию of every object – no section there means the platform applies РазрешеноАдминистраторам.

rename-object renames the object's files (including its forms and the СтрокаСписка<Имя> row component) and rewrites references context-aware across the whole project: yaml type/table/form keys, = bindings and .xbsl code. Attributes, components or dynamic-list fields that merely share the old name are left alone, and so are string literals (UI text); --new-presentation/--old-presentation update the Заголовок/Представление values of the object and its forms. The object's Ид is untouched, so the platform keeps the stored data.

Extending: your own rules, data and severities

Three entry point groups let a separate package extend the linter without forking it. This exists for teams whose rules or language data cannot be published: keep those in a private package that depends on xbsl.

# pyproject.toml of your package
dependencies = ["xbsl>=0.16"]

[project.entry-points."xbsl.rules"]
myproject = "myproject.rules"        # importing the module runs its @rule decorators

[project.entry-points."xbsl.data"]
myproject = "myproject:data_root"    # a path, or a callable returning one

[project.entry-points."xbsl.severity"]
myproject = "myproject:severity_overrides"   # {rule id: "error"|"warning"|"info"|"off"}

Packages that declared the groups under the pre-rename name (xbsllint.rules/xbsllint.data/ xbsllint.severity) keep working: the legacy groups are scanned after the new ones.

The severity dict (or a zero-argument callable returning one) raises or lowers the default level of any rule – built-in or plugin – for every run in this installation: a project may treat, say, style/abbreviation-case as a warning while the published default stays info. "off" removes a rule from the default set (an explicit --select/--enable still turns it on, at its base level).

Install the package and the CLI, the MCP server and the web UI all pick everything up – no flags, no config file. A failing entry point raises instead of warning: a linter that silently drops a rule stays green in CI and guarantees nothing; an override naming an unknown rule id or level raises for the same reason. XBSL_NO_PLUGINS=1 ignores every external package (built-in rules, bundled data and default severities only).

LSP server (experimental)

xbsl-lsp (the [lsp] extra: pip install "xbsl[lsp]") runs the linter as a long-living Language Server over stdio: live per-file diagnostics as you type, project-wide diagnostics on save, go to definition, completion and hover over a resident project index, and quick-fix code actions - without paying the interpreter start-up cost per call. Flags: --project-root (the sources root relative to the workspace folder), --select/--ignore/ --enable, --data-dir. Any LSP-capable editor (VS Code, Neovim, JetBrains) can spawn it.

Documentation (searching the Element reference)

tools/extract_docs.py extracts the Element reference from a distribution (the server-with-IDE .car) into a docs.sqlite next to the language data: the stdlib pages (a type, its methods, properties, parameters) with cleaned HTML, a full-text index (SQLite FTS5, from the standard library) and canonical links back to the primary source (https://1cmycloud.com/docs/help/..., taken from the distribution's sitemap.xml). Page images are stored alongside. The 1C reference is copyrighted, so the database is not shipped in the package – you generate it from your own distribution, like the language data (step 1).

python tools/extract_docs.py --dist "$ELEMENT_DIST"

The runtime API xbsl.docs (search, page, tree, for_symbol, asset) reads docs.sqlite; with no database the search is simply empty. It powers the MCP tools (below) and – later – the reference panel in the VS Code extension.

MCP server

A thin adapter over the same core: an agent (e.g. Claude Code) can call the checks as tools and receive structured diagnostics.

pip install -e ".[mcp]"
claude mcp add xbsl -- xbsl-mcp

Tools: lint_paths(paths), lint_source(filename, content), list_rules(); documentation search – docs_search(query), docs_page(id), docs_symbol(name) (needs the docs.sqlite database, see above); type_members(name) – the members of a stdlib type with the return-type roots of its methods in one compact answer (cheaper than a docs page when only the member list matters); metadata scaffolding – meta_new_project, meta_new_object, meta_add_field, meta_add_route, meta_add_form, meta_add_subsystem, meta_add_dependency, meta_rename_object (with a dry_run plan mode), meta_set_access, meta_object_info, meta_project_info. Every writing meta_* tool applies the changes and returns the lint of the written files in the same response – creation and validation in one round trip. The core and the CLI do not require mcp – it lives only in the [mcp] extra.

Web interface

A local page: point it at a project folder and see the diagnostics. Standard library only (no external dependencies), binds to 127.0.0.1 only.

xbsl-web            # then open http://127.0.0.1:8771/

Per-tier rule toggles, a data-version selector, severity/text filters, dark/light theme; clicking a diagnostic opens the file in VS Code (vscode://).

Editor support (VS Code)

A VS Code extension in editors/vscode gives .xbsl syntax highlighting, live diagnostics as you type (--stdin), workspace diagnostics on save (a full linter run in the background brings the project-scope rules into the editor), index-based go-to-definition and completion across the project (xbsl --index), a form preview with a properties panel, and a deploy button powered by elemctl. It is published on the Marketplace and Open VSX; its README covers settings, behavior and requirements. See also the companion XBSL Debug extension from the elemctl project.

Element versions

The data is versioned by platform version:

xbsl/data/element/
    index.json            # { available: [...], default: "<version>" }
    <version>/{language.json, stdlib.json, metamodel.json}

Pick a version with --element-version / the XBSL_ELEMENT_VERSION env var / the index default; --version shows what is available. Add a new version by re-running the extractors with a new --dist.

The data root itself is resolved in this order: --data-dir > XBSL_DATA_DIR > a root supplied by an installed xbsl.data entry point > xbsl/data/element inside the package.

Tests

pip install -e ".[dev]"
pytest

Data-dependent tests are skipped automatically when the data has not been generated.

License

MIT – see LICENSE. Trademarks and data provenance – NOTICE. How to add a rule – CONTRIBUTING.md.

Project details


Download files

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

Source Distribution

xbsl-0.21.0.tar.gz (343.7 kB view details)

Uploaded Source

Built Distributions

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

xbsl-0.21.0-py3-none-any.whl (282.0 kB view details)

Uploaded Python 3

xbsl-0.21.0-cp314-cp314-win_amd64.whl (476.5 kB view details)

Uploaded CPython 3.14Windows x86-64

xbsl-0.21.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (791.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.21.0-cp314-cp314-macosx_11_0_arm64.whl (600.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

xbsl-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl (615.6 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

xbsl-0.21.0-cp313-cp313-win_amd64.whl (470.7 kB view details)

Uploaded CPython 3.13Windows x86-64

xbsl-0.21.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (792.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.21.0-cp313-cp313-macosx_11_0_arm64.whl (602.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

xbsl-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl (616.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

xbsl-0.21.0-cp312-cp312-win_amd64.whl (470.3 kB view details)

Uploaded CPython 3.12Windows x86-64

xbsl-0.21.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (795.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.21.0-cp312-cp312-macosx_11_0_arm64.whl (605.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

xbsl-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl (621.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

xbsl-0.21.0-cp311-cp311-win_amd64.whl (468.9 kB view details)

Uploaded CPython 3.11Windows x86-64

xbsl-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (764.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.21.0-cp311-cp311-macosx_11_0_arm64.whl (600.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

xbsl-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl (619.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

xbsl-0.21.0-cp310-cp310-win_amd64.whl (469.2 kB view details)

Uploaded CPython 3.10Windows x86-64

xbsl-0.21.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (766.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.21.0-cp310-cp310-macosx_11_0_arm64.whl (602.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

xbsl-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl (622.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file xbsl-0.21.0.tar.gz.

File metadata

  • Download URL: xbsl-0.21.0.tar.gz
  • Upload date:
  • Size: 343.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0.tar.gz
Algorithm Hash digest
SHA256 0c4c0219d97818a99fe42aaa2ae86bec6eb75aa1c201c272e1799e7301476582
MD5 cd2e5ff20aeb17a7c14e2ceb6a77d468
BLAKE2b-256 3b9b07dad55a4d59bcb350fe7472400a261af2b6fce113c17ac1caf75c8aa7e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0.tar.gz:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-py3-none-any.whl.

File metadata

  • Download URL: xbsl-0.21.0-py3-none-any.whl
  • Upload date:
  • Size: 282.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f6d99c48a01e19d1671d91f856d9dd4b683ec8700938b05b5ada8f7944b1ef64
MD5 da838dcdf704594325275cab1b1b4973
BLAKE2b-256 95ef6c28823495abe5f6e4498ad1b221b1c245db351ec2014b23cd1260cc9006

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-py3-none-any.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.21.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 476.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 006e38f76b44b0f21073cc89ec9075aa2b757ff1d89ce6ea60f11fd4b1c1787c
MD5 b869a5f2cf32171b2d460b55ee7e33cc
BLAKE2b-256 49eff61c6422a6a12509ecc6a160add347efcbdc95761e6260c8daf453e19ea7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp314-cp314-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 045ee8764179d6c09b02551b45c480057a72e855217a5a4118c388c11b739ff4
MD5 24113842ec17a1081ca89626d45670ee
BLAKE2b-256 704351833bf437a0ffb66281dc88bb7f9a35b67e4630fcbe933355d09af1a8d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4031c544318d9ab9381260985aa56f994238fcc6292960f63528c784d625f7d
MD5 60b598f9213a58472f5f5db7e898d77c
BLAKE2b-256 61ba7bc07ce01b6b9e1fabdaf6ae96bd063cf8e81dc263a69262920916840c24

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 f469fb361a854c305e8dc5208e564573da4c489cbdda957396ef24affae04992
MD5 4c427b578e1d58bb66cb02c30ba233fb
BLAKE2b-256 f033a618cf3d19d39481ab207cc38765079346c60d3f62d27028f3669aed1205

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.21.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 470.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a50f9c5ce70e8018eda5d5b6d241a6dd57678ea9f33ad4d670f4f38eaab7d069
MD5 271579e6c911adac46601b4ba88d0efd
BLAKE2b-256 0c21b7699a37e86fb553d89293f562f2d351331f7142599318c6ad85768bb7eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp313-cp313-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1dcae5e6d8ca63901f716663e2c93b1dda32feffe92e7d11982bbf5cd258c3f
MD5 d198676bafe99bee92e150b3151dcb95
BLAKE2b-256 8d0d220962c82c73ed740cf174eac07cacfa130fbe8aa7cda0cb941e5120221e

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f473918e912eeb463b4c9145df60b39443637e3eaee35a8e2d978babb2c8a448
MD5 b35420fd181dfc9a0c4cefdb7d63fa35
BLAKE2b-256 64fb80211233fb8c581753956b66c9c6b9dfe15357183c08ce581c5d6ded95bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4f20d2319ae576c9a000d8b3faf2179f8a20166c20d0be94c6e36d4c1398b32c
MD5 0e015c2fc6e994df5358b00ea6f85160
BLAKE2b-256 2d97f372eb4a16e8202bfd236d5d5975985c867eb2e3c358ca8e8f244e1db891

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.21.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 470.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 91757d256babf62abf230195f18cefd5582c4a83d38c9c34137e2632a3a2fb08
MD5 fce033ddd1a7a38fb17d00979737998d
BLAKE2b-256 709e30f9eb60e9433c254fb238b4da1b3c292ec3aee7ac5a58a0328ce65b6437

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp312-cp312-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b82f48fabde1478fa51845a31debecd135e15f2c349ae48c9542b125599b69f
MD5 aeae2ffaecae40bf841c230bb28c3081
BLAKE2b-256 4a3615893d91ba9f08d4b3c481f8edbcc62c3ee81f0e161a0933bd56234f3e67

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4be2218d79777fb4813e05d26ef4fa8fc80f47ac84a87373f2c9782904a01b46
MD5 f27afafec7da44960fcec2ea0d64e33b
BLAKE2b-256 635f65ea880f91d8599c65effa0bda4e496f2d21c23577f30a4a813e14037977

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a5a0ddbec25ad69667917b916c0fb12e9c987916f0b984ceea01a7481cbd3ec9
MD5 d7443e6f84893b48d47676dff07c95ec
BLAKE2b-256 ffd4d660d87a1558564ab0fe95c02c9f61252e8883b709fefd672163166edb99

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.21.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 468.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1e45fcfa37e350ebe32d263d79a5eef794ac61be29ba276fd90b5ccad190f9e8
MD5 eb78c4763b39cde33cb268e4ece39edd
BLAKE2b-256 8be2b5c10aa16171e6a1e9455e5eaed5b43c55cc2d411e4ac1bd7d07a9e7fdc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp311-cp311-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db1c9b9a8b04ac62e83e489e6f59a1465cbdeaf7dde96a27c94153c2aa651c91
MD5 fa150ecc27b9df95a29b2998fa326aa5
BLAKE2b-256 95b887e26d141ca0de9e4accdf1432b7f72b69992ab4151538b8d21bcb52ed99

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb4c3185472126dddec9a3e9de0cf899362e08fda79bc0cc865c897e131059f6
MD5 a65478007e9f0c04d0693102dbc416df
BLAKE2b-256 aba96e4ec00fc9c59510662d89e706c08396f1c1f41c163b8076c291c7d5a22f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 63c2fa6799b8b6183d1540f714a9138946ea0ee49663016a08f2a0fffdb2512b
MD5 35dc458b0d44113ae93c6393abdfb01c
BLAKE2b-256 43810a448fc8444c7b0e6596f4aeb3abca74ff2e94637c36d95420404736d62c

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.21.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 469.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.21.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 09af25af6801fd8c045382f5a1b12a8483e0c99e97c46a71e06cffa57b91eb56
MD5 98126b3405c5c0934dedf99de4494fc8
BLAKE2b-256 72e2a1819a29d95ee659910a90cbd63abdbef752a908329eacaeb29fbd9684fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp310-cp310-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 522c7422361e876306860f537cc93f34b50d2fd7755b438165bf1af076127591
MD5 4b4cf0c5599762700cb80f70daf5d236
BLAKE2b-256 d41abae205e507d0e093e68b9701e955e4f6e5cfc7d0a99cf45865bcb43ecb27

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 823692b74e266bb6ad23a81fd86c26848dda853f88c1c049e7a34b481b243077
MD5 5a0873789e8edda2c04fd5b8e9861245
BLAKE2b-256 1ef7ac81d968a047cda9fcebb478f5b716193ec1fdff9daadd7bb2409998f6ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

File details

Details for the file xbsl-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 355e301f34944cce2cfdb6e61a2ffe75635141b02d65ebe219c3735bccf1ad75
MD5 2f520bcd803b748bf438d990284d2b56
BLAKE2b-256 c5ab851d8fa69c9437582168dc035e5fa9c9fd6ee54660db5ed09f7f95991c5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page