forked from pasalo/common
/
main.py
102 lines (80 loc) · 3.41 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- mode: python; coding: utf-8 -*-
__author__ = "Alvaro Lopez Ortega"
__email__ = "alvaro@alobbs.com"
__copyright__ = "Copyright (C) 2013 Alvaro Lopez Ortega"
import os
import sys
import time
import random
import logging
import argparse
import Keys
import HTTPS
import Config
import Client
import Channels
import utils
def main():
# Argument parsing
parser = argparse.ArgumentParser()
parser.add_argument ('op', action="store", choices=['server', 'channels', 'ls', 'download', 'sync', 'client', 'run'], help="Operation")
group = parser.add_argument_group('Common parameters')
group.add_argument ('--confdir', action="store", help="Customized configuration directory", default=utils.get_basedir_default())
group.add_argument ('--debug', action="store_true", help="Enable debugging")
group = parser.add_argument_group('Server')
group.add_argument ('--port', action="store", help="Customized HTTPS port (Default: 443)", type=int)
group.add_argument ('--key', action="store_true", help="Serve public key from /key")
group = parser.add_argument_group('Client')
group.add_argument ('--downloads', action="store", help="Downloads directory", metavar="PATH", default=utils.get_downloads_default())
group.add_argument ('--name', action="store", help="Name of the host to connect to")
group.add_argument ('--channels', action="store", help="Channels", metavar="NAMES")
group.add_argument ('--file', action="store", help="Filename")
ns = parser.parse_args()
if ns.debug:
logging.basicConfig (level = logging.DEBUG)
# Key manager
keys = Keys.Manager (ns.confdir)
# Config
config = Config.Config (ns.confdir)
# Channels
channels = Channels.Manager (config)
# Server
if ns.op == 'server':
srv = HTTPS.Server (keys, channels, config, ns.port, ns.key)
srv.run()
# Client
elif ns.op == 'channels':
utils.assert_cli_args (['name'], ns)
lst = Client.ChannelList (config, keys, ns.name)
channels = lst.execute()
for channel in channels:
print (channel)
elif ns.op == 'ls':
utils.assert_cli_args (['name','channels'], ns)
lst = Client.FileList (config, keys, ns.name, ns.channels)
files = lst.execute()
for f in files:
print ("%s (%s) size=%s" %(f['path'], f['md5'], f['size']))
elif ns.op == 'download':
time_start = time.time()
def step_callback(downloaded):
lapse = time.time() - time_start
print "%s: %s (%s/s)%s\r" %(ns.file, utils.format_size(downloaded), utils.format_size(downloaded/lapse), ' '*10),
utils.assert_cli_args (['name','channels', 'file'], ns)
dwn = Client.Download (config, ns.downloads, keys, ns.name, ns.channels, ns.file, step_callback)
dwn.execute()
elif ns.op == 'sync':
utils.assert_cli_args (['name'], ns)
sync = Client.Sync (config, ns.downloads, keys, ns.name)
sync.execute()
elif ns.op == 'client':
utils.assert_cli_args (['name'], ns)
client = Client.Client (config, ns.downloads, keys, ns.name)
client.execute()
# Server + Client
elif ns.op == 'run':
client_server = Client.Client_Server (config, ns.downloads, keys, channels, ns.port, ns.key)
client_server.execute()
if __name__ == '__main__':
random.seed()
main()