6 Commits

Author SHA1 Message Date
snyk-bot
a39ea9dcf1 fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-REQUESTS-6928867
2024-05-22 21:10:59 +00:00
adf8f3f1ef Removed id from torrent print 2022-11-28 15:29:30 +01:00
8f2327c065 Feat: Importable package (#10)
* Append package directory to path

* Import all local files prefixed by package name

* Updated readme with -m flag for local development

* Decresed help text width in readme

* Bumped version to 0.3.4
2022-11-27 17:06:03 +01:00
9bfa3c4c59 Bumped package version to 0.3.3 2022-11-26 14:46:12 +01:00
078d422498 CI: PyPi publish to test & by token (#9)
* Publish to pypi test using env variables from secret

* Also publish for this branch

* Uploaded config sig

* Updated incorrect image version declaration

* Enable publish to pypi & test pypi
2022-11-26 14:43:19 +01:00
a6fb543b3f CI: Build and pypi publish (#8)
* Split wheel and tarball dist into separate make cmds

* Add build for amd64 & arm64 arch + start of publish steps

* test step indentation fking with lint

* add missing pipenv command

* test explicitly defining wheel version

* try install requirements first

* sync pipenv after install

* fixed typo in pacakge name

* Publish depends on build

* Install python dependencies before publish

* Twince check command before upload

* If source is newer than pypi, exit 0 and continue pipeline

* If source is newer than pypi, exit 0 and continue pipeline

* Clearer output text for publish version

* Clearer output text for publish version

* Only run public package when interacting with master

* Updated readme and license in setup.py

* Remove test pypi publish ci step

* Exclude publish step when PR towards master

* Bumped package version to 0.3.2

* Try install built wheel with wildcard

* Sign drone config file

View docs for more info on signing: https://docs.drone.io/signature/
2022-11-26 13:31:04 +01:00
11 changed files with 177 additions and 77 deletions

View File

@@ -1,14 +1,90 @@
--- ---
kind: pipeline kind: pipeline
type: docker type: docker
name: delugeClient name: Build and test amd64
platform: platform:
os: linux os: linux
arch: amd64 arch: amd64
steps: steps:
- name: Build package - name: Build source
image: python:3.10 image: python:3.10
commands: commands:
- make build - make build
- name: Install
image: python:3.10
commands:
- make dist
- pip3 install -r requirements.txt
- pip3 install dist/*.whl
# - pipenv install pytest
# - name: Run tests
# image: python:3.10
# commands:
# pipenv run pytest
---
kind: pipeline
type: docker
name: Publish package to PyPi
platform:
os: linux
arch: amd64
steps:
- name: Newer version to publish?
image: python:3.10
commands:
- pip3 install delugeClient-kevin -q -q
- bash publish_version?.sh
- name: PyPi verify
image: python:3.10
commands:
- make dist
- pip3 install twine
- twine check dist/*
- name: PyPi test publish
image: python:3.10
environment:
TWINE_USERNAME:
from_secret: TWINE_USERNAME
TWINE_PASSWORD:
from_secret: TWINE_TEST_PASSWORD
commands:
- make dist
- pip3 install twine
- twine upload --repository-url https://test.pypi.org/legacy/ dist/*
- name: PyPi publish
image: python:3.10
environment:
TWINE_USERNAME:
from_secret: TWINE_USERNAME
TWINE_PASSWORD:
from_secret: TWINE_PASSWORD
commands:
- make dist
- pip3 install twine
- twine upload dist/*
depends_on:
- Build and test amd64
trigger:
branch:
- master
event:
exclude:
- pull_request
---
kind: signature
hmac: 60604a21f35e11d078d5d381bbea8e25b903175c018ba9e6f4a4379285e89883
...

View File

@@ -7,9 +7,14 @@ install:
build: build:
python3 setup.py build python3 setup.py build
dist: tarball:
python3 setup.py sdist python3 setup.py sdist
wheel:
python3 setup.py bdist_wheel
dist: tarball wheel
upload: clean dist upload: clean dist
twine upload dist/* twine upload dist/*

111
README.md
View File

@@ -4,23 +4,20 @@
<h4 align="center"> A easy to use Deluge CLI that can connect to Deluge RPC (even over ssh) written entirely in python.</h4> <h4 align="center"> A easy to use Deluge CLI that can connect to Deluge RPC (even over ssh) written entirely in python.</h4>
| Tested version | PyPi package | Drone CI | | Tested version | PyPi package | License |
|:--------|:------|:------| |:--------|:------|:------|
| [![PyVersion](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/) | [![PyPI](https://img.shields.io/pypi/v/delugeClient_kevin)](https://pypi.org/project/delugeClient_kevin/) | [![Build Status](https://drone.schleppe.cloud/api/badges/KevinMidboe/delugeClient/status.svg)](https://drone.schleppe.cloud/KevinMidboe/delugeClient) | [![PyVersion](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/) | [![PyPI](https://img.shields.io/pypi/v/delugeClient_kevin)](https://pypi.org/project/delugeClient_kevin/) |[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
| Drone CI | Known vulnerabilities |
| Known vulnerabilities | License |
|:--------|:------| |:--------|:------|
| [![Known Vulnerabilities](https://snyk.io/test/github/kevinmidboe/delugeClient/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/kevinmidboe/delugeClient?targetFile=requirements.txt) |[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) | [![Build Status](https://drone.schleppe.cloud/api/badges/KevinMidboe/delugeClient/status.svg)](https://drone.schleppe.cloud/KevinMidboe/delugeClient) | [![Known Vulnerabilities](https://snyk.io/test/github/kevinmidboe/delugeClient/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/kevinmidboe/delugeClient?targetFile=requirements.txt)
<p align="center"> <p align="center">
<a href="#abstract">Abstract</a> <a href="#abstract">Abstract</a>
<a href="#setup_virtualenv">Setup virtualenv</a> <a href="#install">Install</a>
<a href="#configure">Configure</a>
<a href="#installation">Install dependencies</a>
<a href="#usage">Usage</a> <a href="#usage">Usage</a>
<a href="#running">Running</a> <a href="#setup_virtualenv">Setup Virtual Environment</a>
<a href="#configure">Configure</a>
<a href="#contributing">Contributing</a> <a href="#contributing">Contributing</a>
</p> </p>
@@ -28,6 +25,51 @@
## <a name="abstract"></a> Abstract ## <a name="abstract"></a> Abstract
Create a deluge python client for interfacing with deluge for common tasks like listing, adding, removing and setting download directory for torrents. Create a deluge python client for interfacing with deluge for common tasks like listing, adding, removing and setting download directory for torrents.
## <a name="install"></a> Install
Install from source:
```bash
python3 setup.py install
```
Install from pip:
```bash
pip3 install delugeClient-kevin
```
## <a name="usage"></a> Usage
View delugeClient cli options with `delugeclient --help`:
```
Usage: python -m delugeclient [OPTIONS] COMMAND [ARGS]...
╭─ Options ───────────────────────────────────────────────────────────────╮
│ --debug Set log level to debug │
│ --info Set log level to info │
│ --warning Set log level to warning │
│ --error Set log level to error │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────╮
│ add Add magnet torrent │
│ disk Get free disk space │
│ get Get torrent by id or hash │
│ ls List all torrents │
│ remove Remove torrent by id or hash │
│ rm Remove torrent by name │
│ search Search for string segment in torrent name │
│ toggle Toggle torrent download state │
│ version Print package version │
╰─────────────────────────────────────────────────────────────────────────╯
```
### Running from source
Run from source for fun or during development using module flag:
```
python3 -m delugeClient --help
```
## <a name="setup_virtualenv"></a> Setup Virtual Environment ## <a name="setup_virtualenv"></a> Setup Virtual Environment
Virtual environment allows us to create a local environment for the requirements needed. Because pip does not download packages already downloaded to your system, we can use virtualenv to save our packages in the project folder. Virtual environment allows us to create a local environment for the requirements needed. Because pip does not download packages already downloaded to your system, we can use virtualenv to save our packages in the project folder.
@@ -41,7 +83,7 @@ To install virtualenv, simply run:
``` ```
### Usage ### Virtualenv setup
After you have downloaded this project go to it in your terminal by going to the folder you downloaded and typing the following: After you have downloaded this project go to it in your terminal by going to the folder you downloaded and typing the following:
@@ -58,8 +100,6 @@ The to setup a virtual environment enter this:
> If you get an error now it might be because you don't have python3.10, please make sure you have python version 3.10 if else you can download it from [here](https://www.python.org/downloads/) > If you get an error now it might be because you don't have python3.10, please make sure you have python version 3.10 if else you can download it from [here](https://www.python.org/downloads/)
First we navigate to the folder we downloaded.
Then we use the ```virtualenv``` command to create a ```env``` subdirectory in our project. This is where pip will download everything to and where we can add other specific python versions. Then we need to *activate* our virtual environment by doing: Then we use the ```virtualenv``` command to create a ```env``` subdirectory in our project. This is where pip will download everything to and where we can add other specific python versions. Then we need to *activate* our virtual environment by doing:
``` ```
@@ -96,51 +136,6 @@ Then you need to change the HOST and PORT to reflect the address for your deluge
$ cat /home/USER/.config/deluge/auth $ cat /home/USER/.config/deluge/auth
``` ```
## <a name="install"></a> Install Required Dependencies
Now that we have our virutalenv set up and activated we want to install all the necessary packages listed in `requirements.txt`. To install it's dependencies do the following:
```
$ pip install -r requirements.txt
```
Now we have our neccessary packages installed!
## <a name="usage"></a> Usage
```
Custom delugeRPC client
Usage:
deluge_cli add MAGNET [DIR] [--debug | --warning | --error]
deluge_cli get TORRENT
deluge_cli ls [--downloading | --seeding | --paused]
deluge_cli toggle TORRENT
deluge_cli rm TORRENT [--debug | --warning | --error]
deluge_cli (-h | --help)
deluge_cli --version
Arguments:
MAGNET Magnet link to add
DIR Directory to save to
TORRENT A selected torrent
Options:
-h --help Show this screen
--version Show version
--debug Print all debug log
--warning Print only logged warnings
--error Print error messages (Error/Warning)
```
### <a name="running"></a> Running
To interface with deluged :
```
$ ./deluge_cli.py ls
```
## <a name="contributing"></a> Contributing ## <a name="contributing"></a> Contributing
- Fork it! - Fork it!
- Create your feature branch: git checkout -b my-new-feature - Create your feature branch: git checkout -b my-new-feature

View File

@@ -2,12 +2,14 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
from sys import path from sys import path
from os.path import dirname, join from os.path import dirname, join, abspath
path.append(dirname(__file__)) SCRIPT_DIR = dirname(abspath(__file__))
path.append(dirname(SCRIPT_DIR))
import logging import logging
from utils import BASE_DIR from delugeClient.utils import BASE_DIR
from delugeClient.deluge import Deluge
def addHandler(handler): def addHandler(handler):
handler.setFormatter(formatter) handler.setFormatter(formatter)

View File

@@ -1,5 +1,4 @@
#!/usr/bin/env python3.10 #!/usr/bin/env python3.10
import os import os
import sys import sys
import signal import signal
@@ -8,10 +7,10 @@ import logging
import typer import typer
from pprint import pprint from pprint import pprint
from deluge import Deluge from delugeClient.deluge import Deluge
from utils import ColorizeFilter, BASE_DIR, validHash, convertFilesize from delugeClient.utils import ColorizeFilter, BASE_DIR, validHash, convertFilesize
from __version__ import __version__ from delugeClient.__version__ import __version__
from __init__ import addHandler from delugeClient.__init__ import addHandler
ch = logging.StreamHandler() ch = logging.StreamHandler()
ch.addFilter(ColorizeFilter()) ch.addFilter(ColorizeFilter())

View File

@@ -1 +1,4 @@
__version__ = '0.3.1' __version__ = '0.3.5'
if __name__ == '__main__':
print(__version__)

View File

@@ -9,9 +9,9 @@ import logging.config
from deluge_client import DelugeRPCClient, FailedToReconnectException from deluge_client import DelugeRPCClient, FailedToReconnectException
from sshtunnel import SSHTunnelForwarder, BaseSSHTunnelForwarderError from sshtunnel import SSHTunnelForwarder, BaseSSHTunnelForwarderError
from utils import getConfig, BASE_DIR
from torrent import Torrent from delugeClient.utils import getConfig, BASE_DIR
from delugeClient.torrent import Torrent
logger = logging.getLogger('deluge_cli') logger = logging.getLogger('deluge_cli')

View File

@@ -2,7 +2,7 @@ import json
import logging import logging
from distutils.util import strtobool from distutils.util import strtobool
from utils import convert from delugeClient.utils import convert
logger = logging.getLogger('deluge_cli') logger = logging.getLogger('deluge_cli')
@@ -44,5 +44,5 @@ class Torrent(object):
return json.dumps(torrentDict) return json.dumps(torrentDict)
def __str__(self): def __str__(self):
return "{} {} Progress: {}% ETA: {} State: {} Paused: {}".format( return "{} Progress: {}% ETA: {} State: {} Paused: {}".format(
self.key, self.name[:59].ljust(60), self.progress.rjust(5), self.eta.rjust(11), self.state.ljust(12), self.paused) self.name[:59].ljust(60), self.progress.rjust(5), self.eta.rjust(11), self.state.ljust(12), self.paused)

19
publish_version?.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/bash
PYPI_VERSION=$(pip3 show delugeClient-kevin | awk '$1 ~ /Version:/ { print $2 }')
SOURCE_VERSION=$(python3 delugeClient/__version__.py)
printf "Source version:\t\t %s\n" $SOURCE_VERSION
printf "Remote PyPi version:\t %s\n" $PYPI_VERSION
function version {
echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }';
}
if [ $(version $SOURCE_VERSION) -gt $(version $PYPI_VERSION) ]; then
echo "Soure is newer than remote, publishing!"
exit 0
else
echo "Source is same or oldre than remote, nothing to do."
exit 1
fi

View File

@@ -1,5 +1,5 @@
colored==1.4.4 colored==1.4.4
deluge-client==1.9.0 deluge-client==1.9.0
requests==2.28.1 requests==2.32.0
sshtunnel==0.4.0 sshtunnel==0.4.0
typer==0.7.0 typer==0.7.0

View File

@@ -32,6 +32,7 @@ setup(
classifiers=[ classifiers=[
'Programming Language :: Python', 'Programming Language :: Python',
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.10',
], ],
entry_points={ entry_points={