Initial commit
This commit is contained in:
142
uploader.py
Normal file
142
uploader.py
Normal file
@@ -0,0 +1,142 @@
|
||||
import json
|
||||
import time
|
||||
import requests
|
||||
from rich import print
|
||||
from auth import get_auth, del_auth
|
||||
import re
|
||||
import vars
|
||||
import os
|
||||
|
||||
|
||||
def matches(s):
|
||||
return re.match("^[a-z_-]*$", s) is not None
|
||||
|
||||
|
||||
def urlmatch(s):
|
||||
return re.match("^https?://.*.(?:zip|exe)$", s) is not None
|
||||
|
||||
|
||||
def upload():
|
||||
print('Welcome to the uploader')
|
||||
print('Before starting, please make sure you have done your project and [blink]uploaded[/] it to any hosting '
|
||||
'service or file sharing service')
|
||||
input('[OK] Press enter to continue...')
|
||||
auth = get_auth()
|
||||
print('Please enter the name of your project. It should contain only lowercase letters, '
|
||||
'underscores and dashes')
|
||||
project_name = None
|
||||
while project_name is None:
|
||||
project_name = input('> ')
|
||||
if not matches(project_name) or len(project_name) > 64 or len(project_name) < 3:
|
||||
print('[red]Invalid project name[/red]')
|
||||
project_name = None
|
||||
|
||||
print('Please paste there project description. It should be a short text under 256 characters')
|
||||
description = None
|
||||
while description is None:
|
||||
description = input('> ')
|
||||
if len(description) > 256:
|
||||
print('[red]Description is too long[/red]')
|
||||
description = None
|
||||
|
||||
print('Please paste there url of executable file. It should be a link to exe or zip file hosted somewhere. '
|
||||
'If app needs dependencies or specific launch options (python, node, etc), you can add them later')
|
||||
url = None
|
||||
while url is None:
|
||||
url = input('> ')
|
||||
if not urlmatch(url):
|
||||
print('[red]Invalid file url, also it should end on .exe or .zip[/red]')
|
||||
url = None
|
||||
|
||||
print('Please paste there url of your project on GitHub or somewhere else. It should be a link to source code '
|
||||
'of your app. It can be archive, repository, site, whatever you want, optional but highly recommended.'
|
||||
'If you don\'t want to add it, just press Enter')
|
||||
source_url = input('> ')
|
||||
source_url = None if source_url == '' else source_url
|
||||
|
||||
print('If your app needs any dependencies, please paste its link here. It can be exe of installer from official '
|
||||
'site. If you don\'t want to add it, just press Enter')
|
||||
download = None
|
||||
while download is None:
|
||||
download = input('> ')
|
||||
if download == '':
|
||||
download = None
|
||||
break
|
||||
if not urlmatch(download):
|
||||
print('[red]Invalid download url[/red]')
|
||||
download = None
|
||||
|
||||
print('Please add which files should be run during installation. It should be an executable file name.'
|
||||
'If you don\'t want to add it, just press Enter')
|
||||
install = input('> ')
|
||||
install = None if install == '' else install
|
||||
|
||||
print('Please specify main executable command. It can be executable file name (some-file.exe) or command, that '
|
||||
'launches your script (python some-file.py, etc)')
|
||||
run = None
|
||||
while run is None:
|
||||
run = input('> ')
|
||||
if run == '':
|
||||
print('[red]Please, specify runtime[/red]')
|
||||
run = None
|
||||
|
||||
request = {
|
||||
'auth': auth,
|
||||
'name': project_name,
|
||||
'description': description,
|
||||
'url': url,
|
||||
'sourceUrl': source_url,
|
||||
'download': download,
|
||||
'install': install,
|
||||
'run': run
|
||||
}
|
||||
|
||||
# request = {
|
||||
# "auth": {"email": "meshko_a@dlit.dp.ua", "password": "VeryGoodPassword"},
|
||||
# "name": "testapp",
|
||||
# "description": "Very good description",
|
||||
# # "url": "https://github.com/Cactus-0/cabanchik/raw/main/dist/cabanchik.exe",
|
||||
# "sourceUrl": "https://github.com/Cactus-0/cabanchik",
|
||||
# "download": "https://www.python.org/ftp/python/3.10.2/python-3.10.2-amd64.exe",
|
||||
# "install": "python-3.10.2-amd64.exe",
|
||||
# "run": "cabanchik.exe"
|
||||
# }
|
||||
|
||||
r = None
|
||||
while r is None:
|
||||
try:
|
||||
r = requests.post(vars.protocol + vars.server_url + '/packages/new', json=request).text
|
||||
r = json.loads(r)
|
||||
|
||||
if r['message'] == 'Unauthorized':
|
||||
print('[red]Invalid credentials[/red]')
|
||||
print('Deleting auth from config')
|
||||
del_auth()
|
||||
request['auth'] = get_auth()
|
||||
print(r)
|
||||
r = None
|
||||
|
||||
elif r['message'] == 'Internal server error':
|
||||
print('[red]Internal server error, request is broken[/red]')
|
||||
break
|
||||
|
||||
elif r['message'] == 'Invalid body':
|
||||
print('[red]Invalid request body, try again[/red]')
|
||||
break
|
||||
|
||||
elif r['message'] == 'Success':
|
||||
print('[green]Success, your project is created. You can install it by running[/] '
|
||||
'[i]horsy install {0}[/]'.format(request['name']))
|
||||
break
|
||||
|
||||
else:
|
||||
print('[red]Unknown error[/red]')
|
||||
print('Server response:')
|
||||
print(r)
|
||||
break
|
||||
except:
|
||||
with open(f'error_{time.time()}.txt', 'w') as f:
|
||||
f.write(str(r))
|
||||
print(f'[red]Something went wrong with unsupported error. You can check servers response in '
|
||||
f'{os.getcwd()}/{f.name}[/red]')
|
||||
break
|
||||
Reference in New Issue
Block a user