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); 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.20.0.tar.gz (339.2 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.20.0-py3-none-any.whl (278.8 kB view details)

Uploaded Python 3

xbsl-0.20.0-cp314-cp314-win_amd64.whl (473.2 kB view details)

Uploaded CPython 3.14Windows x86-64

xbsl-0.20.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (787.9 kB view details)

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

xbsl-0.20.0-cp314-cp314-macosx_11_0_arm64.whl (597.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

xbsl-0.20.0-cp314-cp314-macosx_10_15_x86_64.whl (612.3 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

xbsl-0.20.0-cp313-cp313-win_amd64.whl (467.4 kB view details)

Uploaded CPython 3.13Windows x86-64

xbsl-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (789.4 kB view details)

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

xbsl-0.20.0-cp313-cp313-macosx_11_0_arm64.whl (599.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

xbsl-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl (613.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

xbsl-0.20.0-cp312-cp312-win_amd64.whl (467.0 kB view details)

Uploaded CPython 3.12Windows x86-64

xbsl-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (792.5 kB view details)

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

xbsl-0.20.0-cp312-cp312-macosx_11_0_arm64.whl (602.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

xbsl-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl (618.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

xbsl-0.20.0-cp311-cp311-win_amd64.whl (465.6 kB view details)

Uploaded CPython 3.11Windows x86-64

xbsl-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (761.3 kB view details)

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

xbsl-0.20.0-cp311-cp311-macosx_11_0_arm64.whl (596.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

xbsl-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl (616.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

xbsl-0.20.0-cp310-cp310-win_amd64.whl (466.0 kB view details)

Uploaded CPython 3.10Windows x86-64

xbsl-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (763.1 kB view details)

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

xbsl-0.20.0-cp310-cp310-macosx_11_0_arm64.whl (598.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

xbsl-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl (619.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for xbsl-0.20.0.tar.gz
Algorithm Hash digest
SHA256 bfe2346d2e32d1f08051b5f7e608ae4c5f3f535cc5bbd1d069c574ac32b4d353
MD5 63a1a58cc27d2b60bade774d2fd81c0b
BLAKE2b-256 545b48ade258adf30058a9ff230a77877e1b69c5396bd187ae519f43c3a92468

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-py3-none-any.whl.

File metadata

  • Download URL: xbsl-0.20.0-py3-none-any.whl
  • Upload date:
  • Size: 278.8 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.20.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36e08955d810e812a356fa4808cb25be6f7d940c2afedb8d451ad1b2f9698f4a
MD5 18676ae8906e4d8a4a609aed2621d5e7
BLAKE2b-256 dc10b7d079f00fb1585b58465ef0d9072ff9bcf08aa2355d58cd07b2fb08a977

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.20.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 473.2 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.20.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c16e0d9c568a7c7cf49c2b2009d051ee7baa7da08c9ccf5a20196049e398ffd5
MD5 fe7094aef58dcf0a4f4e4e92b365e903
BLAKE2b-256 037d0f1eb1da0bee19d34024974866cbcd9cbc52c430ff5cf40bebc521122ff7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.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.20.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b149dff025b16ecd8dbe660f111446045ec0ae9ab078597487eb98eeab5b4ad
MD5 e7802bdb85e84ca0de0710b250210c71
BLAKE2b-256 0c5fe1b3dbe85ffeb4d3165ada89a4de7925d27f303fb9f9d05c677d87c42254

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ece92a9dced4378b668bbae8a4d03683e1f6d38662477fa72353587f9089495
MD5 98901bbef5f51bf4e8a3324d9acfd603
BLAKE2b-256 9d00eb93a941bf411a40e8f3090fcf1b835edc5f4469ce9fed460214242ade58

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b5b9a0b8928f84da022513e2c27c3194e84b10e7cb3cd59e92ecf901d83901d8
MD5 ebda0419636687a34e137866e5037316
BLAKE2b-256 c6480613c15e5ebc0af74c205a45089f1d804492ccde8eb369980a4fb3121141

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.20.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 467.4 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.20.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7b025772aafde67b18f46df34d50e4c59922e235ac9a664caa68803eee4231d0
MD5 e56b755c46d1993d63bd3a8eecae56f4
BLAKE2b-256 c114c0f91f694744864855806f12be638a8fcfc40cc6b3b7df09a2217462492f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.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.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 81096f490a84624bb4494e82d56b0dd7646071522d4ec172e0b1ce743a2dfbc4
MD5 23ddf33233df5dda83e5a554ae1e2ca7
BLAKE2b-256 12835473909ae303eee31b8749d8189084ef1aad3f26198eeb2b4bb61ad8ee54

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 05c33a40e6a5b2f260fbc2d6d3a1fe824708e96523bd5c3fc49144c96c9b5706
MD5 4cdf3d9c7b247dbf6585de1f9adfe6dc
BLAKE2b-256 3b896a96bf593cac803b32ed81efe99da4a06264088a8e7911ddb7b5259e0e86

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 55410b89638743b1a71d54d62e98496daa1585acb07dd4aa29b932efc0a36e8d
MD5 c9a714c9b6afb2b6f0eea2335ef8c903
BLAKE2b-256 8ddbb56040d4c3b607205766607b9ff753d1b4b44220ee5ec5f12e0b598e6e4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.20.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 467.0 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.20.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 32e9cbf9491aaf690f5c2bdd39e2e10c6c6f5c85652656afc1c35bd54d410dc3
MD5 4ed330e6cfc9d85c5b174530b6a11a30
BLAKE2b-256 2f964939c6a858118e87d8f27b316f1525225568526ed4f8a18947f112bd4820

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.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.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 607e7660946a3a46795c68cfbb04770f801202229e0c225891ffa66a5df1d7f2
MD5 d7423885eb194fa021eaee46fc16b43e
BLAKE2b-256 4007029b7bf4379db00385b7ca73169f467d9137c88bbad22265b5a1b91da223

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57621e27f5071b5ffec32e2b3daa72b81f4a67dda98e7e08eaa67f9334dbb8bc
MD5 dc56c76bf5b3e636c601dfd1ba28c585
BLAKE2b-256 1412229078cb03083e59f7f04c5f6b4726f190b24bbba8a10920a44f382155d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a7662dd23bcc1d47f646748fbbc73801a89c23433e4105252b2d7eab2b388b99
MD5 6279295ec6e3317e8b5d6f2381d57c07
BLAKE2b-256 f0fed3b2a45dac28d979d92f20242858607e21c4e5e69681bc10c8b837030873

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.20.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 465.6 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.20.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8bc70ffe4f857cbc5484faca904836d71e4b3a20505d54e3cf2ba871ac4c0193
MD5 552bab76da536bd4d3de1a3f845fd6d5
BLAKE2b-256 0694d639a8d2ddc6d0ee54ab939b7672a0f7b7e35e3375d6d0979dbbf388ca1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.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.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ce11d1027bffac53246fa84d20c582c5393d31297f2920153a8b3b42932971f9
MD5 4de4f18cc3ad81806d34f23b5c3b25a7
BLAKE2b-256 7147643abbd10c6264a6fd9c1735aef4962bad40c5d528884d927a678b9c541a

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97762b9a078a88a98a5c61dea924fe438f16d68e9e02df964dc3193a933b5a68
MD5 bcb3f408684a86ffb5196043a5345813
BLAKE2b-256 e69c6b6dd5d88df9b8e1e94571e6bdf2e0d1848973a3ec5d062491f8dd60f73b

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8917508ae38c46c91043b839bcd0e0cf0bf73f814391264f1f058cb20af959b8
MD5 83b853d69e4f74e1b87f71cbd3d8e5b8
BLAKE2b-256 76eafa77cd492c1a6d8f42c3b07ddcde4ff309ebef021c0d7a83f95ff7a3dd50

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.20.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 466.0 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.20.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 701f0385a3e3a74061bc8ad97d5f6c81e823dbad7ab8f1a9bed5bdb2e56a5ac8
MD5 9b815fae463be1e92858a79d379c006b
BLAKE2b-256 b4fbd5762108310e06f6f92397ab84083f3aca17f471828f224c15c381b8f3f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.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.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca88479d3de0ff6d4c4b1dd338974e7ed7640cbc50421c6a2ed6f8c97f999770
MD5 921b72815aa41fb5e6124645cd918fc1
BLAKE2b-256 6f005e8cfb12a745152145842d2d58c57eca145d2633eed50d6191f179d0bf8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d004ec65a3c9a2c4b884de2800f4c9d320c6dd227fd6fbc4035df80e1d1b5d6
MD5 41b2a43c43b771905d0fa2d621c93756
BLAKE2b-256 0617c23042f3fb75047fd4b924fb57f056b265406cb1bc49da54fef7f2cffa55

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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.20.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b9de6a9907c9a763136544157998e33495c23324c8e427fc18ab6460500c285d
MD5 7e30f8f57be66904c21c663a8aed41ab
BLAKE2b-256 d1764ae9102750d887e9c3b0f7ae8c9ad515d5c2cb1cbeb7aeeda046563b5a6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.20.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