Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
44adc59
Add project infrastructure: issue templates, CI/CD workflows, license,
Apr 6, 2026
431fb68
Rename project from "bubbies" to "pupupu" across all files
Apr 6, 2026
0209dc1
Add abstract base class file for pupupu components
Apr 6, 2026
4ea68b0
Add new dependencies and update README with system design overview
Apr 22, 2026
471f078
Add new dependencies to pyproject.toml
Apr 22, 2026
8443af8
Refactor isolate abstraction and add directory isolate implementation
Apr 22, 2026
a10b11f
Rename pupupu package to throng
May 18, 2026
b22bff7
Rename project from "pupupu" to "throng"
May 18, 2026
f3647c3
Rename pupupu to throng in isolate directory module
May 18, 2026
4c6c3b4
Update import paths to use throng namespace
May 18, 2026
b7b2406
Rename pupupu to throng in CI workflows
May 18, 2026
8f038a5
Update package versions in pyproject.toml
May 18, 2026
a131021
Update README with system design and plugin features
May 21, 2026
1ab71ce
Add dirstree>=0.0.6 to dependencies
May 21, 2026
c35441e
Add error module
May 21, 2026
481b9c0
Rename slot.py to slots.py
May 21, 2026
38bdb8e
Update README with throng features, limitations, and improvements
May 26, 2026
680ca6f
Add pathspec and locklib dependencies; update setuptools include pattern
May 26, 2026
9430ff8
Add entry points for local and temporary directory plugins
May 26, 2026
e9558bd
Add locklib to development requirements
May 26, 2026
4c89a76
Remove isolates module and its abstract base class
May 26, 2026
9e3cd19
Refactor imports and add error types and throng slots
May 26, 2026
54a993f
Add abstract base classes for isolates and throngs with result handling
May 26, 2026
53cb31a
Add directory isolation plugin with local and temporary implementations
May 26, 2026
e9ad6f3
Add directory_isolate tests and helpers
May 26, 2026
2f8deba
Add tests for normalizing suby errors in run API
May 26, 2026
cd22481
Update test to handle CPython 3.12+ permission error formatting
May 26, 2026
a79a5dc
Add helper to detect hardlink support and update tests to skip on
May 26, 2026
a611ec9
Skip hardlink test if hardlinks unsupported
May 26, 2026
ffbec13
Update coverage to be version-specific by Python version
May 26, 2026
7de8b48
Fix virtual env path error messages to use config value instead of
May 26, 2026
894b8a5
Factor out Python executable path for cross-platform venv support
May 26, 2026
d6fe7dd
Add Windows-specific file handle helper for testing sharing violations
May 26, 2026
9b9240b
Move Windows ctypes imports inside context manager block
May 26, 2026
249cd33
Add pragma no cover comments for Windows paths
May 26, 2026
6a776bd
Refactor temporary directory creation to handle permission errors
May 26, 2026
721b6ea
Fix permission error message matching in tests
May 26, 2026
d664236
Remove mypy disable directives from temporary directory plugins
May 26, 2026
0baf096
Update test to verify denial of subdirectory creation on Windows
May 26, 2026
ea156d1
Remove Python 3.8 version flag from mypy run
May 26, 2026
a0f530e
Fix permission error message construction for Windows
May 26, 2026
44898eb
Add mypy disable for skelet.Storage Any workaround
May 26, 2026
6f519c0
Enhance Windows ACL test to probe native denial behavior
May 26, 2026
444e6f3
Add Windows subprocess helper to test restricted DACL permissions
May 26, 2026
080f166
Add description of throng's purpose and use cases
May 26, 2026
7374995
Enhanced README with plugin architecture details and benefits
May 26, 2026
14a58d3
Enhance parallelization description to clarify plugin autonomy
May 26, 2026
6efa06c
Use temporary .py files on Windows to bypass CreateProcessWithTokenW
May 27, 2026
0835cf9
Update Windows restricted token process launcher to use
May 27, 2026
df80068
Refactor Windows privilege test to use context manager for impersonation
May 27, 2026
d992c2c
Add Windows-specific environment for subprocess execution
May 27, 2026
4ebb082
The new logo
May 27, 2026
acd346a
Update suby version requirement to >=0.0.10
May 27, 2026
357ba27
Shuffle the deps order
May 27, 2026
102d9da
Enable isort combine-as-imports in Ruff config
May 27, 2026
37fd5d1
Refactor import syntax to use grouped imports across multiple files
May 27, 2026
7f35ee2
Enable isort combine-as-imports in ruff config
May 27, 2026
50ce254
Add tests for retryable cleanup failures on POSIX and Windows
May 27, 2026
ea06fee
Add skipif for testing CPython's recursive retry behavior in
May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: pomponchik

---

## Short description

Replace this text with a short description of the error and the behavior that you expected to see instead.


## Describe the bug in detail

Please add a test that reproduces the bug (i.e., currently fails):

```python
def test_your_bug():
...
```

When writing the test, please ensure compatibility with the [`pytest`](https://docs.pytest.org/) framework.

If for some reason you cannot describe the error in the test format, describe the steps to reproduce it here.


## Environment
- OS: ...
- Python version (the output of the `python --version` command): ...
- Version of this package: ...
26 changes: 26 additions & 0 deletions .github/ISSUE_TEMPLATE/documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: Documentation fix
about: Add something to the documentation, delete it, or change it
title: ''
labels: documentation
assignees: pomponchik
---

## It's cool that you're here!

Documentation is an important part of the project; we strive to make it high-quality and keep it up to date. Please adjust this template by outlining your proposal.


## Type of action

What do you want to do: remove something, add something, or change something?


## Where?

Specify which part of the documentation you want to change. For example, the name of an existing documentation section or a line number in `README.md`.


## The essence

Please describe the essence of the proposed change.
17 changes: 17 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: pomponchik

---

## Short description

What do you propose and why do you consider it important?


## Some details

If you can, provide code examples that will show how your proposal will work. Also, if you can, indicate which alternative approaches you have considered. And finally, describe how you propose to verify that your idea is implemented correctly, if at all possible.
12 changes: 12 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: Question or consultation
about: Ask anything about this project
title: ''
labels: question
assignees: pomponchik

---

## Your question

Here you can freely describe your question about the project. Please read the documentation provided before doing this, and ask the question only if it is not answered there. In addition, please keep in mind that this is a free non-commercial project and user support is optional for its author. Response times are not guaranteed.
60 changes: 60 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Lint

on:
push

jobs:
build:

runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', '3.15.0-alpha.1']

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
shell: bash
run: uv pip install --system -r requirements_dev.txt

- name: Install the library
shell: bash
run: uv pip install --system .

- name: Run ruff
shell: bash
run: ruff check throng

- name: Run ruff for tests
shell: bash
run: ruff check tests

- name: Run mypy
shell: bash
run: >-
mypy
--show-error-codes
--strict
--disallow-any-decorated
--disallow-any-explicit
--disallow-any-expr
--disallow-any-generics
--disallow-any-unimported
--disallow-subclassing-any
--warn-return-any
throng

- name: Run mypy for tests
shell: bash
run: mypy --exclude '^tests/typing/' tests
39 changes: 39 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Release

on:
push:
branches:
- main

jobs:
pypi-publish:
name: upload release to PyPI
runs-on: ubuntu-latest
# Specifying a GitHub environment is optional, but strongly encouraged
environment: release
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- uses: actions/checkout@v4

- name: Set up Python 3.13
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
shell: bash
run: uv pip install --system -r requirements_dev.txt

- name: Build the project
shell: bash
run: python -m build .

- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
68 changes: 68 additions & 0 deletions .github/workflows/tests_and_coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Tests

on:
push

jobs:
build:

runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', '3.15.0-alpha.1']

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
shell: bash
run: uv pip install --system -r requirements_dev.txt

- name: Install the library
shell: bash
run: uv pip install --system .

- name: Print all libs
shell: bash
run: uv pip list --system

- name: Run tests and show coverage on the command line
shell: bash
run: |
pth_file="$(python -c 'import sysconfig; print(sysconfig.get_path("purelib"))')/throng_coverage_process_startup.pth"
printf "import os; os.getenv('COVERAGE_PROCESS_START') and __import__('coverage').process_startup()\n" > "$pth_file"
coverage erase
COVERAGE_PROCESS_START="$PWD/pyproject.toml" coverage run -m pytest -n auto --cache-clear --assert=plain
coverage combine
coverage report -m --fail-under=100
coverage xml

- name: Upload coverage to Coveralls
if: runner.os == 'Linux'
env:
COVERALLS_REPO_TOKEN: ${{secrets.COVERALLS_REPO_TOKEN}}
uses: coverallsapp/github-action@v2
with:
format: cobertura
file: coverage.xml
continue-on-error: true

- name: Run tests and show the branch coverage on the command line
shell: bash
run: |
pth_file="$(python -c 'import sysconfig; print(sysconfig.get_path("purelib"))')/throng_coverage_process_startup.pth"
printf "import os; os.getenv('COVERAGE_PROCESS_START') and __import__('coverage').process_startup()\n" > "$pth_file"
coverage erase
THRONG_COVERAGE_BRANCH=true COVERAGE_PROCESS_START="$PWD/pyproject.toml" coverage run -m pytest -n auto --cache-clear --assert=plain
coverage combine
coverage report -m --fail-under=100
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.DS_Store
__pycache__
venv
.pytest_cache
build
dist
*.egg-info
test.py
.coverage
.coverage.*
.idea
.ruff_cache
.mutmut-cache
.mypy_cache
html
CLAUDE.md
.claude
mutants
planning_features.md
coverage.xml
Loading
Loading