py-file-versioning


Namepy-file-versioning JSON
Version 0.10.0 PyPI version JSON
download
home_pageNone
SummaryA flexible file versioning system with compression support
upload_time2025-02-12 13:22:53
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT License Copyright (c) 2025 John Taylor Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords backup file-backup file-history file-management version-control versioning
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # py-file-versioning

A flexible file versioning system with compression support, written in Python.

## Table of Contents

- [Features](#features)
- [Package Name Convention](#package-name-convention)
- [Installation](#installation)
  - [From PyPI](#from-pypi)
  - [From Source](#from-source)
  - [Command Line Usage](#command-line-usage)
  - [Demo Shell Session](#demo-shell-session)
  - [Python API Usage](#python-api-usage)
- [Configuration Options](#configuration-options)
  - [FileVersioningConfig Parameters](#fileversioningconfig-parameters)
  - [Command Line Options](#command-line-options)
- [Examples](#examples)
  - [Maintaining Multiple Versions](#maintaining-multiple-versions)
  - [Using Different Compression Types](#using-different-compression-types)
  - [Version File Naming](#version-file-naming)
- [Development](#development)
  - [Setting Up Development Environment](#setting-up-development-environment)
  - [Running Tests](#running-tests)
  - [Code Quality Checks](#code-quality-checks)
- [License](#license)

## Features

* Create versioned backups of files with automatic sequence numbering
* Multiple compression options: gzip, bzip2, xz, or uncompressed
* Configurable timestamp formats (UTC or local time)
* Limit the number of versions kept per file
* Command-line interface for easy integration
* Support for Unicode filenames
* Cross-platform compatibility

## Package Name Convention

While the package is installed as `py-file-versioning` (using hyphens), you should use `py_file_versioning` (using underscores) in your Python imports following Python naming conventions.

## Installation

### From PyPI

```bash
pip install py-file-versioning
```

### From Source

```bash
git clone https://github.com/jftuga/py-file-versioning.git
cd py-file-versioning
pip install .
```

For development installation:

```bash
uv venv
source .venv/bin/activate
uv pip install -e '.[dev]'
uv pip list
```

### Command Line Usage

The package installs a command-line tool called `pyfileversioning`. Here are some common operations:

Create a version:
```bash
pyfileversioning create myfile.txt
```

Create a compressed version:
```bash
pyfileversioning create myfile.txt -c gz  # or --compression gz
```

List all versions:
```bash
pyfileversioning list myfile.txt
```

Restore a specific version to a new file path:
```bash
pyfileversioning restore versions/myfile--20240120.123456_001.txt.gz --target /path/to/restored_file.txt
```

Remove a version:
```bash
pyfileversioning remove versions/myfile--20240120.123456_001.txt.gz
```

### Demo Shell Session

Here's a practical demonstration of using the command-line interface:

```bash
# Create a sample config file
$ echo "database_host=localhost" > config.ini
$ cat config.ini
database_host=localhost

# Create first version (uncompressed)
$ pyfileversioning create config.ini -d backups
Created version: backups/config--20250207.044841_001--loc_mod.ini

# Update the file content
$ echo "database_port=5432" >> config.ini

# Create compressed version
$ pyfileversioning create config.ini -d backups -c gz
Created version: backups/config--20250207.044924_001--loc_mod.ini.gz

# List all versions
$ pyfileversioning list config.ini -d backups
Path                                        | Sequence | Size | Timestamp           | TimeZone | TimestampSrc
====                                        | ======== | ==== | =========           | ======== | ============
config--20250207.044924_001--loc_mod.ini.gz |        1 |   95 | 2025-02-07T04:49:24 |    local |  modify time
config--20250207.044841_001--loc_mod.ini    |        1 |   24 | 2025-02-07T04:48:41 |    local |  modify time

# Add more content and create another version with UTC time
$ echo "database_name=myapp" >> config.ini
$ pyfileversioning create config.ini -d backups -c gz -u
Created version: backups/config--20250207.095009_001--utc_mod.ini.gz

# View all versions with size and timestamp (note: mixed timezone versions not recommended)
$ pyfileversioning list config.ini -d backups
Path                                        | Sequence | Size | Timestamp           | TimeZone | TimestampSrc
====                                        | ======== | ==== | =========           | ======== | ============
config--20250207.095009_001--utc_mod.ini.gz |        1 |  107 | 2025-02-07T09:50:09 |      utc |  modify time
config--20250207.044924_001--loc_mod.ini.gz |        1 |   95 | 2025-02-07T04:49:24 |    local |  modify time
config--20250207.044841_001--loc_mod.ini    |        1 |   24 | 2025-02-07T04:48:41 |    local |  modify time
```

### Python API Usage

The library provides a flexible API for file versioning. Here's how to use it:

```python
from py_file_versioning import FileVersioning, FileVersioningConfig

# Create a test file
def create_example_file(filename: str) -> None:
    content = """
    # Database configuration settings
    db_host = db.example.com
    db_port = 5432
    db_name = production_db
    """.strip()
    with open(filename, 'w') as f:
        f.write(content)

# Basic usage
filename = "example.ini"
create_example_file(filename)

versioning = FileVersioning()
version_path, removed, error = versioning.create_version(filename)
if error:
    print(f"Warning: {error}")
print(version_path)

# Advanced configuration
config = FileVersioningConfig(
    versions_path="backups",     # Store versions in 'backups' directory
    compression="gz",            # Use gzip compression
    max_versions=5,             # Keep only last 5 versions
    use_utc=True,              # Use UTC timestamps
    use_modified_time=True,    # Use file's modified time
    delimiter="__"             # Custom delimiter for version files
)
versioning = FileVersioning(config)
version_path, removed, error = versioning.create_version(filename)
if error:
    print(f"Warning: {error}")
print(version_path)
```

## Configuration Options

### FileVersioningConfig Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| delimiter | str | "--" | Separator between filename and version information |
| use_utc | bool | False | Use UTC timestamps instead of local time |
| versions_path | str | "versions" | Directory to store versions |
| compression | str | "none" | Compression type: "none", "gz", "bz2", "xz" |
| max_versions | Optional[int] | None | Maximum number of versions to keep |
| use_modified_time | bool | True | Use file's modified time instead of current time |

### Command Line Options

```
usage: pyfileversioning [-h] [-V] [-t TARGET] [-d VERSIONS_PATH]
                        [-c {none,gz,bz2,xz}] [-m MAX_VERSIONS] [-s {mod,sto}]
                        [-u] [-D DELIMITER]
                        [{create,restore,list,remove}] files [files ...]
```

Options:
* `-V, --version`: Show version information
* `-t, --target`: Target file path for restore operation (must be full path to the restored file)
* `-d, --versions-path`: Directory to store versions (default: versions)
* `-c, --compression`: Compression type to use (none, gz, bz2, xz)
* `-m, --max-versions`: Maximum number of versions to keep
* `-s, --src`: Source for timestamps (mod: file modified time, sto: current time)
* `-u, --utc`: Use UTC timezone for timestamps (default: local time)
* `--delimiter DELIMITER`: The delimiter to use (default: --)

Environment Variables:
* `PFV_VERSIONS_PATH`: Override default versions directory
* `PFV_COMPRESSION`: Override default compression type
* `PFV_DELIMITER`: Override default delimiter

Notes:
* The tool supports file patterns (e.g., `*.txt`, `config*.ini`)
* Multiple files can be specified for batch operations

## Examples

### Maintaining Multiple Versions

```python
from py_file_versioning import FileVersioning, FileVersioningConfig

# Create versions with different timezone and timestamp combinations
configs = [
    # Local timezone versions
    {"use_utc": False, "use_modified_time": True, "desc": "local timezone, modified time"},
    {"use_utc": False, "use_modified_time": False, "desc": "local timezone, current time"},

    # UTC timezone versions
    {"use_utc": True, "use_modified_time": True, "desc": "UTC timezone, modified time"},
    {"use_utc": True, "use_modified_time": False, "desc": "UTC timezone, current time"}
]

for cfg in configs:
    config = FileVersioningConfig(
        use_utc=cfg["use_utc"],
        use_modified_time=cfg["use_modified_time"]
    )
    versioning = FileVersioning(config)
    version_path, removed, error = versioning.create_version("example.ini")
    print(version_path)
```

### Using Different Compression Types

```python
from py_file_versioning import FileVersioning, FileVersioningConfig

# Create versions using each compression type
compression_types = ["gz", "bz2", "xz"]

for compression in compression_types:
    config = FileVersioningConfig(
        compression=compression,
        use_utc=True,          # Use UTC time
        use_modified_time=True # Use file's modified time
    )
    versioning = FileVersioning(config)
    version_path, removed, error = versioning.create_version("example.ini")
    print(version_path)
```

### Version File Naming

Version files follow this naming pattern:
```
{original_name}{delimiter}{timestamp}_{sequence}{delimiter}{version_spec}{extension}[.compression_ext]
```

Example:
```
myfile--20240120.123456_001--utc_mod.txt.gz
```

Where:
- `myfile` is the original filename
- `--` is the delimiter (configurable)
- `20240120.123456` is the timestamp (YYYYMMDD.HHMMSS)
- `001` is the sequence number
- `utc_mod` is the version specification:
  - First part (`utc` or `loc`) indicates timezone (UTC or local)
  - Second part (`mod` or `sto`) indicates timestamp source (modified time or stored/current time)
- `.txt` is the original extension
- `.gz` is the compression extension (if compression is used)

Note: All versions of a file must use consistent timezone and timestamp source settings.

## Development

### Setting Up Development Environment

```bash
# Clone the repository
git clone https://github.com/jftuga/py-file-versioning.git
cd py-file-versioning

# Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install development dependencies
pip install -e '.[dev]'
```

### Running Tests

```bash
pytest
```

For coverage report:
```bash
pytest --cov=file_versioning --cov-report=html
```

### Code Quality Checks

```bash
# Format code
black .

# Sort imports
isort .

# Style checking
flake8

# Linting
ruff check
```

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "py-file-versioning",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "backup, file-backup, file-history, file-management, version-control, versioning",
    "author": null,
    "author_email": "John Taylor <jftuga@users.noreply.github.com>",
    "download_url": null,
    "platform": null,
    "description": "# py-file-versioning\n\nA flexible file versioning system with compression support, written in Python.\n\n## Table of Contents\n\n- [Features](#features)\n- [Package Name Convention](#package-name-convention)\n- [Installation](#installation)\n  - [From PyPI](#from-pypi)\n  - [From Source](#from-source)\n  - [Command Line Usage](#command-line-usage)\n  - [Demo Shell Session](#demo-shell-session)\n  - [Python API Usage](#python-api-usage)\n- [Configuration Options](#configuration-options)\n  - [FileVersioningConfig Parameters](#fileversioningconfig-parameters)\n  - [Command Line Options](#command-line-options)\n- [Examples](#examples)\n  - [Maintaining Multiple Versions](#maintaining-multiple-versions)\n  - [Using Different Compression Types](#using-different-compression-types)\n  - [Version File Naming](#version-file-naming)\n- [Development](#development)\n  - [Setting Up Development Environment](#setting-up-development-environment)\n  - [Running Tests](#running-tests)\n  - [Code Quality Checks](#code-quality-checks)\n- [License](#license)\n\n## Features\n\n* Create versioned backups of files with automatic sequence numbering\n* Multiple compression options: gzip, bzip2, xz, or uncompressed\n* Configurable timestamp formats (UTC or local time)\n* Limit the number of versions kept per file\n* Command-line interface for easy integration\n* Support for Unicode filenames\n* Cross-platform compatibility\n\n## Package Name Convention\n\nWhile the package is installed as `py-file-versioning` (using hyphens), you should use `py_file_versioning` (using underscores) in your Python imports following Python naming conventions.\n\n## Installation\n\n### From PyPI\n\n```bash\npip install py-file-versioning\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/jftuga/py-file-versioning.git\ncd py-file-versioning\npip install .\n```\n\nFor development installation:\n\n```bash\nuv venv\nsource .venv/bin/activate\nuv pip install -e '.[dev]'\nuv pip list\n```\n\n### Command Line Usage\n\nThe package installs a command-line tool called `pyfileversioning`. Here are some common operations:\n\nCreate a version:\n```bash\npyfileversioning create myfile.txt\n```\n\nCreate a compressed version:\n```bash\npyfileversioning create myfile.txt -c gz  # or --compression gz\n```\n\nList all versions:\n```bash\npyfileversioning list myfile.txt\n```\n\nRestore a specific version to a new file path:\n```bash\npyfileversioning restore versions/myfile--20240120.123456_001.txt.gz --target /path/to/restored_file.txt\n```\n\nRemove a version:\n```bash\npyfileversioning remove versions/myfile--20240120.123456_001.txt.gz\n```\n\n### Demo Shell Session\n\nHere's a practical demonstration of using the command-line interface:\n\n```bash\n# Create a sample config file\n$ echo \"database_host=localhost\" > config.ini\n$ cat config.ini\ndatabase_host=localhost\n\n# Create first version (uncompressed)\n$ pyfileversioning create config.ini -d backups\nCreated version: backups/config--20250207.044841_001--loc_mod.ini\n\n# Update the file content\n$ echo \"database_port=5432\" >> config.ini\n\n# Create compressed version\n$ pyfileversioning create config.ini -d backups -c gz\nCreated version: backups/config--20250207.044924_001--loc_mod.ini.gz\n\n# List all versions\n$ pyfileversioning list config.ini -d backups\nPath                                        | Sequence | Size | Timestamp           | TimeZone | TimestampSrc\n====                                        | ======== | ==== | =========           | ======== | ============\nconfig--20250207.044924_001--loc_mod.ini.gz |        1 |   95 | 2025-02-07T04:49:24 |    local |  modify time\nconfig--20250207.044841_001--loc_mod.ini    |        1 |   24 | 2025-02-07T04:48:41 |    local |  modify time\n\n# Add more content and create another version with UTC time\n$ echo \"database_name=myapp\" >> config.ini\n$ pyfileversioning create config.ini -d backups -c gz -u\nCreated version: backups/config--20250207.095009_001--utc_mod.ini.gz\n\n# View all versions with size and timestamp (note: mixed timezone versions not recommended)\n$ pyfileversioning list config.ini -d backups\nPath                                        | Sequence | Size | Timestamp           | TimeZone | TimestampSrc\n====                                        | ======== | ==== | =========           | ======== | ============\nconfig--20250207.095009_001--utc_mod.ini.gz |        1 |  107 | 2025-02-07T09:50:09 |      utc |  modify time\nconfig--20250207.044924_001--loc_mod.ini.gz |        1 |   95 | 2025-02-07T04:49:24 |    local |  modify time\nconfig--20250207.044841_001--loc_mod.ini    |        1 |   24 | 2025-02-07T04:48:41 |    local |  modify time\n```\n\n### Python API Usage\n\nThe library provides a flexible API for file versioning. Here's how to use it:\n\n```python\nfrom py_file_versioning import FileVersioning, FileVersioningConfig\n\n# Create a test file\ndef create_example_file(filename: str) -> None:\n    content = \"\"\"\n    # Database configuration settings\n    db_host = db.example.com\n    db_port = 5432\n    db_name = production_db\n    \"\"\".strip()\n    with open(filename, 'w') as f:\n        f.write(content)\n\n# Basic usage\nfilename = \"example.ini\"\ncreate_example_file(filename)\n\nversioning = FileVersioning()\nversion_path, removed, error = versioning.create_version(filename)\nif error:\n    print(f\"Warning: {error}\")\nprint(version_path)\n\n# Advanced configuration\nconfig = FileVersioningConfig(\n    versions_path=\"backups\",     # Store versions in 'backups' directory\n    compression=\"gz\",            # Use gzip compression\n    max_versions=5,             # Keep only last 5 versions\n    use_utc=True,              # Use UTC timestamps\n    use_modified_time=True,    # Use file's modified time\n    delimiter=\"__\"             # Custom delimiter for version files\n)\nversioning = FileVersioning(config)\nversion_path, removed, error = versioning.create_version(filename)\nif error:\n    print(f\"Warning: {error}\")\nprint(version_path)\n```\n\n## Configuration Options\n\n### FileVersioningConfig Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| delimiter | str | \"--\" | Separator between filename and version information |\n| use_utc | bool | False | Use UTC timestamps instead of local time |\n| versions_path | str | \"versions\" | Directory to store versions |\n| compression | str | \"none\" | Compression type: \"none\", \"gz\", \"bz2\", \"xz\" |\n| max_versions | Optional[int] | None | Maximum number of versions to keep |\n| use_modified_time | bool | True | Use file's modified time instead of current time |\n\n### Command Line Options\n\n```\nusage: pyfileversioning [-h] [-V] [-t TARGET] [-d VERSIONS_PATH]\n                        [-c {none,gz,bz2,xz}] [-m MAX_VERSIONS] [-s {mod,sto}]\n                        [-u] [-D DELIMITER]\n                        [{create,restore,list,remove}] files [files ...]\n```\n\nOptions:\n* `-V, --version`: Show version information\n* `-t, --target`: Target file path for restore operation (must be full path to the restored file)\n* `-d, --versions-path`: Directory to store versions (default: versions)\n* `-c, --compression`: Compression type to use (none, gz, bz2, xz)\n* `-m, --max-versions`: Maximum number of versions to keep\n* `-s, --src`: Source for timestamps (mod: file modified time, sto: current time)\n* `-u, --utc`: Use UTC timezone for timestamps (default: local time)\n* `--delimiter DELIMITER`: The delimiter to use (default: --)\n\nEnvironment Variables:\n* `PFV_VERSIONS_PATH`: Override default versions directory\n* `PFV_COMPRESSION`: Override default compression type\n* `PFV_DELIMITER`: Override default delimiter\n\nNotes:\n* The tool supports file patterns (e.g., `*.txt`, `config*.ini`)\n* Multiple files can be specified for batch operations\n\n## Examples\n\n### Maintaining Multiple Versions\n\n```python\nfrom py_file_versioning import FileVersioning, FileVersioningConfig\n\n# Create versions with different timezone and timestamp combinations\nconfigs = [\n    # Local timezone versions\n    {\"use_utc\": False, \"use_modified_time\": True, \"desc\": \"local timezone, modified time\"},\n    {\"use_utc\": False, \"use_modified_time\": False, \"desc\": \"local timezone, current time\"},\n\n    # UTC timezone versions\n    {\"use_utc\": True, \"use_modified_time\": True, \"desc\": \"UTC timezone, modified time\"},\n    {\"use_utc\": True, \"use_modified_time\": False, \"desc\": \"UTC timezone, current time\"}\n]\n\nfor cfg in configs:\n    config = FileVersioningConfig(\n        use_utc=cfg[\"use_utc\"],\n        use_modified_time=cfg[\"use_modified_time\"]\n    )\n    versioning = FileVersioning(config)\n    version_path, removed, error = versioning.create_version(\"example.ini\")\n    print(version_path)\n```\n\n### Using Different Compression Types\n\n```python\nfrom py_file_versioning import FileVersioning, FileVersioningConfig\n\n# Create versions using each compression type\ncompression_types = [\"gz\", \"bz2\", \"xz\"]\n\nfor compression in compression_types:\n    config = FileVersioningConfig(\n        compression=compression,\n        use_utc=True,          # Use UTC time\n        use_modified_time=True # Use file's modified time\n    )\n    versioning = FileVersioning(config)\n    version_path, removed, error = versioning.create_version(\"example.ini\")\n    print(version_path)\n```\n\n### Version File Naming\n\nVersion files follow this naming pattern:\n```\n{original_name}{delimiter}{timestamp}_{sequence}{delimiter}{version_spec}{extension}[.compression_ext]\n```\n\nExample:\n```\nmyfile--20240120.123456_001--utc_mod.txt.gz\n```\n\nWhere:\n- `myfile` is the original filename\n- `--` is the delimiter (configurable)\n- `20240120.123456` is the timestamp (YYYYMMDD.HHMMSS)\n- `001` is the sequence number\n- `utc_mod` is the version specification:\n  - First part (`utc` or `loc`) indicates timezone (UTC or local)\n  - Second part (`mod` or `sto`) indicates timestamp source (modified time or stored/current time)\n- `.txt` is the original extension\n- `.gz` is the compression extension (if compression is used)\n\nNote: All versions of a file must use consistent timezone and timestamp source settings.\n\n## Development\n\n### Setting Up Development Environment\n\n```bash\n# Clone the repository\ngit clone https://github.com/jftuga/py-file-versioning.git\ncd py-file-versioning\n\n# Create and activate virtual environment\npython -m venv .venv\nsource .venv/bin/activate  # On Windows: .venv\\Scripts\\activate\n\n# Install development dependencies\npip install -e '.[dev]'\n```\n\n### Running Tests\n\n```bash\npytest\n```\n\nFor coverage report:\n```bash\npytest --cov=file_versioning --cov-report=html\n```\n\n### Code Quality Checks\n\n```bash\n# Format code\nblack .\n\n# Sort imports\nisort .\n\n# Style checking\nflake8\n\n# Linting\nruff check\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 John Taylor\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "A flexible file versioning system with compression support",
    "version": "0.10.0",
    "project_urls": {
        "Homepage": "https://github.com/jftuga/py-file-versioning",
        "Issues": "https://github.com/jftuga/py-file-versioning/issues",
        "Repository": "https://github.com/jftuga/py-file-versioning.git"
    },
    "split_keywords": [
        "backup",
        " file-backup",
        " file-history",
        " file-management",
        " version-control",
        " versioning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f234f56f163ca56a49f1576e2a0f43df9df2a21860131a8f883c7836b63087f",
                "md5": "bc2b3e59bbae818677d183f20c0fa18b",
                "sha256": "eec3f40044def2d738eb8732b2eb578b748bbe688fafd285df3af077178510d2"
            },
            "downloads": -1,
            "filename": "py_file_versioning-0.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bc2b3e59bbae818677d183f20c0fa18b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 16814,
            "upload_time": "2025-02-12T13:22:53",
            "upload_time_iso_8601": "2025-02-12T13:22:53.440023Z",
            "url": "https://files.pythonhosted.org/packages/7f/23/4f56f163ca56a49f1576e2a0f43df9df2a21860131a8f883c7836b63087f/py_file_versioning-0.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-12 13:22:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jftuga",
    "github_project": "py-file-versioning",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "py-file-versioning"
}
        
Elapsed time: 0.46084s