Metadata-Version: 2.4
Name: cupdate
Version: 2.0.3
Summary: python updater
Author-email: seydx <hi@seydx.dev>
Maintainer-email: seydx <hi@seydx.dev>
Project-URL: Homepage, https://github.com/seydx/cupdate
Project-URL: Documentation, https://github.com/seydx/cupdate
Project-URL: Repository, https://github.com/seydx/cupdate
Project-URL: Bug Tracker, https://github.com/seydx/cupdate/issues
Project-URL: Changelog, https://github.com/seydx/cupdate/blob/main/CHANGELOG.md
Keywords: python,updater,requirements
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: typing_extensions>=4.15.0
Requires-Dist: requests>=2.32.5
Requires-Dist: tabulate>=0.9.0
Provides-Extra: test
Requires-Dist: pytest>=8; extra == "test"
Dynamic: license-file

# cupdate

Python requirements.txt updater.

## Installation

```bash
pip install cupdate
```

## Usage

### Basic Update

```bash
# Update all packages in requirements.txt
cupdate
```

### With Exclusions

Create a `cupdate.config.txt` file to exclude packages:

```
# cupdate.config.txt
numpy
pandas==1.5.0
tensorflow
```

Then run:
```bash
cupdate
```

## Features

- **Smart Updates** - Preserves version operators (>=, <=, ==)
- **In-place Rewrites** - Only the version number changes, environment markers, comments and order stay
- **Package Exclusions** - Skip specific packages from updates
- **Release Information** - Shows package age and project URLs
- **Formatted Output** - Clean table display of updates
- **PyPI Integration** - Fetches latest versions and metadata

## Example Output

```
NAME         OLD      NEW      AGE        INFO
------------ -------- -------- ---------- -------------------------
requests     2.28.1   2.31.0   2 months   https://pypi.org/project/requests/
flask        2.2.2    3.0.0    3 weeks    https://pypi.org/project/flask/
numpy        1.24.0   1.26.2   1 month    https://pypi.org/project/numpy/

✨ requirements.txt updated with 3 packages
```

## Configuration

### Exclusion File Format

```
# Lines starting with # are comments
package-name
another-package>=1.0.0
specific-version==2.1.0
```

### Version Operators

cupdate preserves your version constraints:

- `package==1.0.0` → `package==1.2.0` (exact version)
- `package>=1.0.0` → `package>=1.2.0` (minimum version)
- `package<=2.0.0` → `package<=2.1.0` (maximum version)

## Requirements File Support

Works with standard `requirements.txt` format:

```
# requirements.txt
requests==2.28.1
flask[async]>=2.2.0
numpy<=1.24.0
onnxruntime==1.29.0; platform_machine != "x86_64"
```

Only the version number of a pinned requirement is replaced. Everything around it
is written back byte for byte, including environment markers, extras, inline
comments, blank lines, line order and CRLF endings.

Lines that do not pin a single version are left alone and never looked up:

```
-r base.txt
--index-url https://example.com/simple
numpy>=2.0,<3
hailort @ https://example.com/hailort-4.21.0.whl ; platform_machine == "aarch64"
pandas
```

## Command Line Interface

```bash
# Update requirements in current directory
cupdate

# The tool automatically looks for:
# - requirements.txt (required)
# - cupdate.config.txt (optional exclusions)
```

## Error Handling

- **Missing requirements.txt** - Shows error and exits
- **Network issues** - Shows warnings, continues with available data  
- **Invalid packages** - Skips problematic packages with warnings
- **Missing exclusions** - Continues normally, updates all packages

## Integration Examples

### CI/CD Pipeline

```yaml
# .github/workflows/update-deps.yml
name: Update Dependencies
on:
  schedule:
    - cron: '0 0 * * 1'  # Weekly on Monday

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install cupdate
        run: pip install cupdate
      - name: Update requirements
        run: cupdate
      - name: Create PR
        # ... create pull request with changes
```

## Development Workflow

```bash
# 1. Install cupdate
pip install cupdate

# 2. Create exclusions (optional)
echo "tensorflow" > cupdate.config.txt

# 3. Update dependencies
cupdate

# 4. Install updated packages
pip install -r requirements.txt

# 5. Test your application
python -m pytest
```

## Package Information

The tool provides rich information about updates:

- **Package Name** - The package being updated
- **Old Version** - Current version in requirements.txt
- **New Version** - Latest available version
- **Age** - How long ago the new version was released
- **Info URL** - Link to package homepage or PyPI page

## Contributing

Contributions are welcome! Please read our contributing guidelines and submit pull requests to our repository.

## License

MIT
