mirror of
https://github.com/PurpleI2P/pyseeder
synced 2025-02-05 19:44:14 +00:00
add github transport (#3)
This commit is contained in:
parent
716aa44d2e
commit
e333cc5b56
14
pyseeder.py
14
pyseeder.py
@ -2,13 +2,20 @@
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
import pyseeder.transport
|
||||
import pyseeder.actions
|
||||
from pyseeder.utils import PyseederException
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--loglevel', default=logging.INFO, help="Log level",
|
||||
choices=[logging.CRITICAL, logging.ERROR, logging.WARNING,
|
||||
logging.INFO, logging.DEBUG])
|
||||
|
||||
subparsers = parser.add_subparsers(title="actions",
|
||||
help="Command to execute")
|
||||
|
||||
@ -101,12 +108,17 @@ echo $YOUR_PASSWORD | %(prog)s --netdb /path/to/netDb \\
|
||||
help=".su3 file (default: output/i2pseeds.su3)")
|
||||
serve_parser.set_defaults(func=pyseeder.actions.serve)
|
||||
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
logging.basicConfig(level=args.loglevel,
|
||||
format='%(levelname)-8s %(message)s')
|
||||
|
||||
if hasattr(args, "func"):
|
||||
try:
|
||||
args.func(args)
|
||||
except PyseederException as pe:
|
||||
print("Pyseeder error: {}".format(pe))
|
||||
log.critical("Pyseeder error: {}".format(pe))
|
||||
sys.exit(1)
|
||||
else:
|
||||
parser.print_help()
|
||||
|
@ -3,9 +3,11 @@ import urllib.request
|
||||
from urllib.error import URLError
|
||||
import os
|
||||
import importlib
|
||||
import logging
|
||||
|
||||
from pyseeder.utils import PyseederException
|
||||
from pyseeder.utils import PyseederException, TransportException
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
RESEED_URLS = [
|
||||
"https://reseed.i2p-projekt.de/",
|
||||
@ -55,4 +57,6 @@ def upload(filename, config):
|
||||
except ImportError:
|
||||
raise PyseederException(
|
||||
"{} transport can't be loaded".format(t))
|
||||
except TransportException as e:
|
||||
log.error("Transport error: {}".format(e))
|
||||
|
||||
|
49
pyseeder/transports/github.py
Normal file
49
pyseeder/transports/github.py
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
# (re)uploads reseed file to github repository releases as an asset
|
||||
import requests
|
||||
|
||||
from urllib.parse import urljoin
|
||||
from mimetypes import guess_type
|
||||
import sys
|
||||
import os
|
||||
|
||||
from pyseeder.utils import TransportException
|
||||
|
||||
TRANSPORT_NAME = "github"
|
||||
|
||||
def run(filename, config):
|
||||
API_URL = "https://api.github.com/"
|
||||
asset_name = os.path.split(filename)[-1]
|
||||
content_type = guess_type(asset_name)[0] or "application/zip"
|
||||
creds = (config["username"], config["token"])
|
||||
release_info_url = urljoin(API_URL, "/repos/{}/releases/tags/{}".format(
|
||||
config["repo"], config["release_tag"]))
|
||||
|
||||
# get release info
|
||||
try:
|
||||
resp = requests.get(release_info_url, auth=creds)
|
||||
except:
|
||||
raise TransportException("Failed to connect to GitHub API")
|
||||
|
||||
if resp.status_code is not 200:
|
||||
raise TransportException("Check your GitHub API auth settings")
|
||||
|
||||
# delete old asset
|
||||
for x in resp.json()["assets"]:
|
||||
if x["name"] == asset_name:
|
||||
r = requests.delete(x["url"], auth=creds)
|
||||
if r.status_code is not 204:
|
||||
raise TransportException("Failed to delete asset from GitHub")
|
||||
|
||||
# upload new asset
|
||||
upload_url = resp.json()["upload_url"].split("{")[0] # wat
|
||||
headers = {'Content-Type': content_type}
|
||||
params = {'name': asset_name}
|
||||
|
||||
data = open(filename, 'rb').read()
|
||||
r = requests.post(upload_url, headers=headers, params=params, auth=creds,
|
||||
data=data)
|
||||
|
||||
if r.status_code is not 201:
|
||||
raise TransportException("Failed to upload asset to GitHub API")
|
||||
|
@ -1 +1,2 @@
|
||||
cryptography>=1.4
|
||||
requests
|
||||
|
@ -1,6 +1,6 @@
|
||||
[transports]
|
||||
; enabled transports separated by space
|
||||
enabled=git
|
||||
enabled=github
|
||||
|
||||
[git]
|
||||
; Folder with git repository to use
|
||||
@ -8,3 +8,15 @@ folder=/home/user/reseed-data-repo
|
||||
|
||||
[dropbox]
|
||||
; todo
|
||||
|
||||
[github]
|
||||
; GitHub username
|
||||
username=username
|
||||
; GitHub API token
|
||||
; Generate token for this script here --> https://github.com/settings/tokens
|
||||
; Check scope: public_repo (shall be enough)
|
||||
token=token
|
||||
; Repository
|
||||
repo=username/repo-name
|
||||
; Repository tag to which asset is being uploaded
|
||||
release_tag=v1.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user