pomelo.py 18.8 KB
Newer Older
diesys's avatar
diesys committed
1
#!/usr/bin/env python3
2

3 4 5
import math
import sys
import json
diesys's avatar
diesys committed
6
import os
7
import re
8
import time
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
9

10
# cartella dei tornei
11
tornei_dir = os.path.dirname('r/')
12

13
def scriviTorneo(torneo):
14
	# scrivi su file
15
	with open(torneo['JSON_DATA'], 'w') as file_json:
16 17
		json.dump(torneo, file_json)

18

19
def importaTorneo(torneo):
20
	# leggi da file
21
	file_path = tornei_dir + '/' + str(torneo) + '/' + str(torneo) + '.json'
22 23
	with open(file_path, 'r') as file_json:
		dict_torneo = json.load(file_json)
24

25
	aggiornaRanking(dict_torneo)
26

27
	return dict_torneo
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
28

29

30 31
# crea un nuovo torneo
def nuovoTorneo(nome):
32
	# percorso del file e cartella che conterra' il dizionario
33 34
	dir_path = tornei_dir + '/' + nome
	file_path = dir_path + '/' + nome + '.json'
diesys's avatar
diesys committed
35 36 37
	imgs_path = dir_path + '/img'
	qr_path = imgs_path + '/qr.png'
	logo_path = imgs_path + '/logo.png'
38

39
	# dizionario torneo base vuoto
diesys's avatar
diesys committed
40
	# vecchio: torneo = {'NOME': nome, 'FILE': file_path,
diesys's avatar
diesys committed
41
	torneo = {'NOME': nome, 'FOLDER': dir_path, 'JSON_DATA': file_path,
42
		'GIOCATORI': {}, 'MATCHES': [], 'RANKING': [], 'LOGO': ''}
43

44
	# controlla se esiste la cartella col nome del torneo
45 46
	if not os.path.exists(dir_path):
		os.makedirs(dir_path)
diesys's avatar
diesys committed
47
		os.makedirs(imgs_path)
48

49 50
		# controlla se esiste il file json del torneo se no lo crea e ci mette il contenuto dell'attuale dizionario
		if not os.path.exists(file_path):
diesys's avatar
diesys committed
51
			# data
52 53
			with open(file_path, 'w') as fp:
				json.dump(torneo, fp)
diesys's avatar
diesys committed
54
			
diesys's avatar
diesys committed
55 56
			# qr
			with open(qr_path, 'w') as fp:
diesys's avatar
diesys committed
57 58 59
				command = "wget -O r/" + nome + "/img/qr.png 'https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + "http://flowin.space/pomelo/r/'" + nome
				# print("\n\nCOMMAND\n", command, '\n\n')
				os.system(command)
diesys's avatar
diesys committed
60 61 62 63 64
			
			# logo
			# with open(file_path, 'w') as fp:
			# 	json.dump(torneo, fp)

diesys's avatar
diesys committed
65 66
			costruisciIndexHtml(nome)
			costruisciIndexHtml('index')
67 68 69 70

	else:
		print('Nome presente, cambiare nome per favore.\n')
		return
71

72
	return torneo
73

74
def aggiungiGiocatore(torneo, nome):
diesys's avatar
diesys committed
75 76 77 78
    # Aggiunge al torneo un nuovo Giocatore 'nome'. Controlla per prima cosa che
    # non esiste un altro giocatore con lo stesso nome. In caso positivo viene
    # aggiunto il Giocatore. Gli viene assegnato un punteggio iniziale di 1440 e
    # gli viene associato un numero d' iscrizione.
79

80
	#controlla che non ci sia un giocatore con lo stesso NOME
81
	for id in range(len(torneo['GIOCATORI'])):
82
		if torneo['GIOCATORI'][str(id)]['NOME'] == nome:
83
			print('Nome gia in uso: scegliere un altro NOME')
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
84
			return torneo
85

86
	# crea un dizionario ausiliario che verra' copiato nel torneo, l'ID e' anche chiave (univoca)
87
	nuovoID = torneo['NOME'] + '_' + str(len(torneo['GIOCATORI']))
88
	nuovoGiocatore = {'NOME': nome, 'ID': nuovoID, 'RANK': 1440, 'MATCH': 0}
89 90

	# aggiunge il nuovo giocatore al torneo
91
	torneo['GIOCATORI'][str(len(torneo['GIOCATORI']))] = nuovoGiocatore
92

93
	# scrivi su file
94
	scriviTorneo(torneo)
95

Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
96 97
	return torneo

98

99
def eliminaGiocatore(torneo, nome):
diesys's avatar
diesys committed
100
    # Elimina dal torneo il Giocatore 'NOME'. Nella torneo e nella classifica del
diesys's avatar
diesys committed
101
    # torneo al posto dei dati di tale giocatore sara' presente una riga del tipo
102 103
    # ['ND',...]

104
	for id in range(len(torneo['GIOCATORI'])):
105
		if torneo['GIOCATORI'][str(id)]['NOME'] == nome:
106
			# imposta valori oltre i limiti al posto di cancellare, preserva l'ID
107
			torneo['GIOCATORI'][str(id)]['NOME'] = 'ND'
108
			torneo['GIOCATORI'][str(id)]['RANK'] = -9999
109
			torneo['GIOCATORI'][str(id)]['MATCH'] = -1
110

111
	# scrivi su file
112
	scriviTorneo(torneo)
113

114

diesys's avatar
diesys committed
115
def nuoviPunteggiXY(torneo, giocatore1, giocatore2, risultato1):
116
    # Calcola i nuovi di due giocatori dopo una partita. Il risultato
diesys's avatar
diesys committed
117
    # è 1 se vince il primo giocatore, 0 se perde e 0.5 se pareggiano.
118

119
	for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
120
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore1:
diesys's avatar
diesys committed
121
			punteggio1 = int(torneo['GIOCATORI'][str(id)]['RANK'])
122
			matchX = int(torneo['GIOCATORI'][str(id)]['MATCH'])
123

124
	for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
125
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore2:
diesys's avatar
diesys committed
126
			punteggio2 = int(torneo['GIOCATORI'][str(id)]['RANK'])
127
			matchY = int(torneo['GIOCATORI'][str(id)]['MATCH'])
128

diesys's avatar
diesys committed
129
	#calcola risultato per il giocatore2
diesys's avatar
diesys committed
130
	risultato2 = 1 - risultato1
131

diesys's avatar
diesys committed
132
	#calcola risultato atteso per il giocatore1 e il giocatore2
diesys's avatar
diesys committed
133 134
	atteso1 = 1/2 + (math.atan((punteggio1 - punteggio2)/200)) / math.pi
	atteso2 = 1 - atteso1
135

diesys's avatar
diesys committed
136
	#calcolo coefficienti moltiplicativi per il giocatore1 e il giocatore2
diesys's avatar
diesys committed
137
	if (matchX > 9 and punteggio1 > 1569):
138
		coefficienteX = 10
139
	elif (matchX < 6):
140 141 142
		coefficienteX = 40
	else:
		coefficienteX = 20
diesys's avatar
diesys committed
143
	if (matchY > 9 and punteggio2 > 1569):
144
		coefficienteY = 10
145
	elif (matchY < 6):
146 147 148 149
		coefficienteY = 40
	else:
		coefficienteY = 20

diesys's avatar
diesys committed
150
	#calcolo punteggi parziali del giocatore1 e giocatore2
diesys's avatar
diesys committed
151 152
	parzialeX = round((risultato1 - atteso1) * coefficienteX)
	parzialeY = round((risultato2 - atteso2) * coefficienteY)
153

diesys's avatar
diesys committed
154
	#calcolo punteggi totali del giocatore1 e giocatore2
diesys's avatar
diesys committed
155 156
	punteggio1 = punteggio1 + parzialeX
	punteggio2 = punteggio2 + parzialeY
157

diesys's avatar
diesys committed
158
	return [punteggio1, punteggio2]
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
159

160

diesys's avatar
diesys committed
161
def aggiornaTorneo(torneo, giocatore1, giocatore2, risultato1):
diesys's avatar
diesys committed
162
    # Calcola i punti ottenuti dopo che il giocatore1 ha sfidato il giocatore2,
diesys's avatar
diesys committed
163
    # ottenendo un risultato1 = 0 (sconfitta) oppure 0.5 (pareggio) oppure 1
diesys's avatar
diesys committed
164
    # (vittoria). (giocatore1 e giocatore2 sono i numeri d' iscrizione dei
diesys's avatar
diesys committed
165
    # due giocatori che partecipano al torneo). Aggiorna quindi la torneo con i
diesys's avatar
diesys committed
166
    # nuovi punteggi dei giocatori giocatore1 e giocatore2.
167

diesys's avatar
diesys committed
168
	if (risultato1 != 1 and risultato1 != 0.5 and risultato1 != 0):
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
169
		print('Risultato della partita errato')
170
		return
171

diesys's avatar
diesys committed
172
	if (giocatore1 == giocatore2):
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
173 174
		print('Un giocatore non puo giocare contro se stesso')
		return
175

diesys's avatar
diesys committed
176
	trovato1 = False
177
	for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
178
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore1:
diesys's avatar
diesys committed
179 180
			trovato1 = True
	if not trovato1:
181
		print('GiocatoreX non presente al torneo')
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
182 183
		return

diesys's avatar
diesys committed
184
	trovato2 = False
185
	for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
186
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore2:
diesys's avatar
diesys committed
187 188
			trovato2 = True
	if not trovato2:
189 190
		print('GiocatoreY non presente al torneo')
		return
191

192
	else:
diesys's avatar
diesys committed
193
		#calcola nuovi punteggi del giocatore1 e giocatore2
diesys's avatar
diesys committed
194 195
		[nuovoPunteggio1, nuovoPunteggio2] = nuoviPunteggiXY(
			torneo, giocatore1, giocatore2, risultato1)
196

diesys's avatar
diesys committed
197
		#aggiornamento dati giocatore1 nel torneo
198
		for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
199
			if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore1:
diesys's avatar
diesys committed
200
				torneo['GIOCATORI'][str(id)]['RANK'] = nuovoPunteggio1
201 202
				torneo['GIOCATORI'][str(
					id)]['MATCH'] = torneo['GIOCATORI'][str(id)]['MATCH'] + 1
203

diesys's avatar
diesys committed
204
		#aggiornamento dati giocatore2 nel torneo
205
		for id in range(len(torneo['GIOCATORI'])):
diesys's avatar
diesys committed
206
			if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore2:
diesys's avatar
diesys committed
207
				torneo['GIOCATORI'][str(id)]['RANK'] = nuovoPunteggio2
208 209
				torneo['GIOCATORI'][str(
					id)]['MATCH'] = torneo['GIOCATORI'][str(id)]['MATCH'] + 1
210

diesys's avatar
diesys committed
211
	now = time.localtime()
212 213
	dataora = str(now[3]) + ':' + str(now[4]) + ' - ' + \
            str(now[2]) + '/' + str(now[1])
diesys's avatar
diesys committed
214

215 216
	# aggiorna classifica
	aggiornaRanking(torneo)
217
	torneo['MATCHES'].append(
diesys's avatar
diesys committed
218
		(giocatore1, giocatore2, risultato1, '(' + dataora + ')'))
219

220
	return scriviTorneo(torneo)
221

222

223
####### sezione di output
224

225
def stampaFormattato(torneo):
226 227
	caratteri_omessi = '"{}'
	torneo_formatted = json.dumps(torneo, indent=3, separators=('', ':\t'))
diesys's avatar
diesys committed
228

229 230 231 232 233
	for char in caratteri_omessi:
		torneo_formatted = torneo_formatted.replace(char, '')

	print(torneo_formatted)

234
def aggiornaRanking(torneo):
235 236 237 238 239 240
	classifica = []

	for i in torneo['GIOCATORI']:
		if(torneo['GIOCATORI'][i]['RANK'] > 0):						# rank non negativi
			nome = torneo['GIOCATORI'][i]['NOME']
			rank = torneo['GIOCATORI'][i]['RANK']
diesys's avatar
diesys committed
241
			partite = torneo['GIOCATORI'][i]['MATCH']
242

diesys's avatar
diesys committed
243
			if(torneo['GIOCATORI'][i]['MATCH'] > 5):
Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
244
				stabile = True
245

Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
246 247
			else:
				stabile = False
248

Giuseppe Lombardi's avatar
Giuseppe Lombardi committed
249
			classifica.append((nome, rank, partite, stabile))
250 251
			classifica = sorted(classifica, key=lambda giocatore: (
				giocatore[1], giocatore[2]), reverse=True)  # sort su due criteri (punteggio, partite)
252 253

	torneo['RANKING'] = classifica
254

diesys's avatar
diesys committed
255
def rankingStabile(torneo):
256 257 258 259 260 261 262 263 264 265 266 267
	ranking = {'stabili': [], 'instabili': []}

	if(torneo['NOME'] == 'singolo'):
		ranking['n_min_partite'] = 16
	else:
		ranking['n_min_partite'] = 8

	for giocatore in torneo['RANKING']:
		if (giocatore[-1]):
			ranking['stabili'].append(giocatore[0:3])
		else:
			ranking['instabili'].append(giocatore[0:3])
diesys's avatar
diesys committed
268
	
269
	return ranking
diesys's avatar
diesys committed
270

271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
def selectGiocatori(torneo):
	# torneo = importaTorneo(torneo)
	giocatori = []

	for gid in torneo['GIOCATORI']:
		giocatori.append(torneo['GIOCATORI'][gid]['NOME'])
		# print(gid, giocatori)

	giocatori.sort()

	return giocatori


def selectGiocatoriHtml(torneo):
	select = ""

	for giocatore in selectGiocatori(torneo):
		select += "<option value='" + giocatore + "'>" + giocatore + "</option>\n"

	return select


293 294
def rankingHtml(torneo):
	rankingTable = "<table class = 'table table-sm text-center table-bordered table-striped' ><thead class=''><tr><th scope='col'>Giocatore</th><th scope='col'>Punti</th><th scope='col'>Match</th></tr></thead><tbody>\n"
295
	
296 297
	torneo_rank = rankingStabile(torneo)

298
	# giocatori stabili
299
	for giocatore in torneo_rank['stabili']:
300
		# i evidenzia i primi 8 giocatori, selezionati per le eliminatorie
301
		if(torneo_rank['stabili'].index(giocatore) < torneo_rank['n_min_partite']):
302
			classColore = 'table-success success'
303 304 305
		else:
			classColore = ''
		
306 307 308 309 310 311
		rankingTable += "<tr class='" + classColore + "'>\n"
		rankingTable += "    <td>" + str(giocatore[0]) + "</td>\n"
		rankingTable += "    <td>" + str(giocatore[1]) + "</td>\n"
		rankingTable += "    <td>" + str(giocatore[2]) + "</td>\n"
		rankingTable += "</tr>\n"

312
	if(len(torneo_rank['instabili'])):
313 314 315 316
		# print("<table class = 'table table-sm text-center table-bordered table-striped' ><thead><tr class='bg-danger text-white'></><th scope='row'>Giocatori fuori classifica</th><th></th><th></th></tr></thead><tbody>")
		rankingInstabiliTable = "<table class = 'table table-sm text-center table-bordered table-striped' ><thead><tr class='bg-danger text-white'></><th scope='row'>Giocatori fuori classifica</th><th></th><th></th></tr></thead><tbody>\n"
		
		# giocatori instabili
317
		for giocatore in torneo_rank['instabili']:
318 319 320 321 322 323 324 325 326 327
			rankingInstabiliTable += "<tr>\n"
			rankingInstabiliTable += "    <td>" + str(giocatore[0]) + "</td>\n"
			rankingInstabiliTable += "    <td>" + str(giocatore[1]) + "</td>\n"
			rankingInstabiliTable += "    <td>" + str(giocatore[2]) + "</td>\n"
			rankingInstabiliTable += "</tr>\n"

		rankingInstabiliTable += "</table>\n"

		return rankingTable + rankingInstabiliTable

diesys's avatar
diesys committed
328
def partiteHtml(torneo):
329
	partite = torneo['MATCHES'][::-1]
330
	partiteTable = "<table class = 'table table-sm text-center table-bordered table-striped' ><thead class=''><tr><th scope='col'>Giocatori<th scope='col'></th><th scope='col'>Esito</th><th scope='col'>Data</th></tr></thead><tbody>\n"
331 332
	
	for match in partite:
333 334 335
		partiteTable += "<tr>\n"
		partiteTable += "    <td>" + str(match[0]) + "</td>\n"
		partiteTable += "    <td>" + str(match[1]) + "</td>\n"
336
		# rimuove la virgola e cambia sistema risultato da algoritmo (0,1) a 1, x, 2
337
		partiteTable += "    <td>" + str(2 - int(match[2])) + "</td>\n"
338
		# rimuove le parentesi
339 340 341 342 343 344 345
		partiteTable += "    <td>" + str(match[3])[1:-1] + "</td>\n"
		partiteTable += "</tr>\n"
	
	partiteTable += "</table>"
	
	return partiteTable
	# print("</table>")
346

347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365
def costruisciIndexHtml(torneo_in):
	# is going to build the main index
	if(torneo_in == '_ALL_'):
		costruisciIndexHtml('index')
		for torneo_nome in listTornei():
			# torneo = importaTorneo(torneo_nome)
			# print(torneo)
			costruisciIndexHtml(torneo_nome)

	elif(torneo_in == 'index'):
		index_template = open('templates/index.html', 'r')
		new_index = open('index.html', 'w')
		tornei = listTornei('html')
	
		new_index_content = index_template.read().format(TORNEI=tornei)
		new_index.write(new_index_content)
		index_template.close()
		new_index.close()
	else:
diesys's avatar
diesys committed
366 367 368 369 370
		if(torneo_in in listTornei()):
			torneo = importaTorneo(torneo_in)
		else:
			torneo = nuovoTorneo(torneo_in)

371 372 373
		partite = partiteHtml(torneo)
		ranking = rankingHtml(torneo)
		giocatori = selectGiocatoriHtml(torneo)
diesys's avatar
diesys committed
374

375 376
		index_template = open('templates/tournament_index.html', 'r')
		new_index = open(torneo['FOLDER'] + '/' + 'index.html', 'w')
377 378 379 380 381

		if(torneo['LOGO'] != ''):
			logo_url = torneo['LOGO']
		else:
			logo_url = '/pomelo/img/pomelo.png'
diesys's avatar
diesys committed
382
	
383
		new_index_content = index_template.read().format(TORNEO=torneo['NOME'], MATCH=partite, RANKING=ranking, GIOCATORI=giocatori, LOGO=logo_url)
384 385 386
		new_index.write(new_index_content)
		index_template.close()
		new_index.close()
387 388
	
	# T E S T
389
	# print(new_index_content)
diesys's avatar
diesys committed
390

391

392 393 394 395 396 397 398 399 400 401
def listTornei(out='none'):
	dirs = os.listdir(tornei_dir)

	if(out == 'stout'):
		for torneo in dirs:
			print(torneo)
		return
	
	elif(out == 'html'):
		select = ''
diesys's avatar
diesys committed
402
		for torneo in sorted(dirs):
403 404 405
			select += "<option value='" + torneo + "'>" + torneo + "</option>\n"
		return select
	else:
diesys's avatar
diesys committed
406
		return dirs
407

408 409 410 411 412 413 414 415 416 417 418 419 420

# parses php input and removes any single bracket
def parse(input):
	if(re.search("^[']{0,1}[A-z0-9 ]*[']{0,1}$", input)):
		return (input.replace("'", ""), 'argument')
	elif(re.search("^'{0,1}-{1,2}[A-z]*-{0,1}[A-z]*'{0,1}$", input)):
		return (input.replace("'", ""), 'option')
	else:
		print('INPUT ERRATO! Inserisci solo caratteri alfanumerici e spazi')
		return 



diesys's avatar
diesys committed
421
######################################################################################################################################################
422

diesys's avatar
diesys committed
423
HELP = 'Benvenuto in pomelo (interfaccia CLI), le opzioni sono le seguenti:\n\n  -l \t\t\t\t(--list) mostra la lista dei tornei in \'r/\'\n\n  -n TORNEO\t\t\t(--new) per creare un torneo con il nome indicato\n  TORNEO -i\t\t\t(--import) per caricare il file json del torneo con il nome indicato (data/NOMETORNEO/NOMETORNEO.json)\n  TORNEO -a GIOCATORE \t\t(--add) aggiunge GIOCATORE a TORNEO\n  TORNEO -d GIOCATORE\t\t(--delete) cancella (azzera i valori di) GIOCATORE in TORNEO\n  TORNEO -u G1 G2 RIS\t\t(--update) aggiorna TORNEO con il RIS (risultato) (0, 0.5, 1) del match tra G1 e G2\n  TORNEO -m\t\t\t(--match) mostra la lista dei match di TORNEO\n  TORNEO -g\t\t\t(--giocatori) mostra la lista dei giocatori in TORNEO\n  TORNEO -p\t\t\t(--print) mostra tutto il contenuto di TORNEO\n  TORNEO -r\t\t\t(--ranking) mostra la classifica di TORNEO\n\n  --help\t\t\tmostra questo messaggio\n'
424 425 426 427
ERR_INPUT = 'INPUT ERRATO! Inserisci solo caratteri alfanumerici e spazi\n'

######################################################################################################################################################

428 429 430


## sezione opzioni script
431
if(len(sys.argv) > 1):  # getting parameters if exist
432 433 434 435 436
	# divides input in option and arguments while safe parsing them
	args = {'option': [], 'arguments': []}
	for arg in sys.argv[1:]:
		parsed = parse(arg)
		
437
		# get them string values 
438 439 440 441 442
		if(parsed[1] == 'argument'):
			args['arguments'].append(parsed[0])
		elif(parsed[1] == 'option'):
			args['option'].append(parsed[0])

443
	## lista dei tornei
444 445
	if(args['option'] == '-l' or args['option'] == '--list'):
		listTornei('stout')
446
	
447
	## HELP
448
	elif(args['option'] == '-h' or args['option'] == '--help'):
449
		print(HELP)
450

451
	## piu di un argomento
diesys's avatar
diesys committed
452
	else:
453 454 455 456 457
		if(len(args['arguments'])):
			# first argument
			torneo_arg = args['arguments'][0]
			# first option
			option_arg = args['option'][0]
458

diesys's avatar
diesys committed
459
			if(option_arg == '-n' or option_arg == '--new'):
460 461 462 463
				nuovoTorneo = nuovoTorneo(torneo_arg)
				tornei = {torneo_arg: nuovoTorneo}
				
				if(nuovoTorneo):
diesys's avatar
diesys committed
464
					print("Torneo creato, segui l'help per popolarlo")
465

diesys's avatar
diesys committed
466
			elif(option_arg == '--gen-index'):
467 468 469
				# if (torneo_arg != 'index' and torneo_arg != '_ALL_'):
					# torneo = importaTorneo(torneo_arg)
				costruisciIndexHtml(torneo_arg)
diesys's avatar
diesys committed
470 471 472 473
			
			elif(option_arg == '-i' or option_arg == '--import'):
					torneo = importaTorneo(torneo_arg)
					tornei = {torneo['NOME']: torneo}
474

diesys's avatar
diesys committed
475 476 477
			elif(option_arg == '-p' or option_arg == '--print'):
					torneo = importaTorneo(torneo_arg)
					stampaFormattato(torneo)
478

diesys's avatar
diesys committed
479 480
			elif(option_arg == '-a' or option_arg == '--add'):
					torneo = importaTorneo(torneo_arg)
481

482 483
					if(len(args['arguments']) > 1):
						giocatore = args['arguments'][1]
diesys's avatar
diesys committed
484 485 486
						aggiungiGiocatore(torneo, giocatore)
					else:
						print('Manca il nome del giocatore!')
487

diesys's avatar
diesys committed
488 489
			elif(option_arg == '-d' or option_arg == '--delete'):
					torneo = importaTorneo(torneo_arg)
490

491 492
					if(len(args['arguments']) > 1):
						giocatore = args['arguments'][1]
493

diesys's avatar
diesys committed
494
						eliminaGiocatore(torneo, giocatore)
495

diesys's avatar
diesys committed
496 497
					else:
						print('Manca il nome del giocatore!')
diesys's avatar
diesys committed
498 499


diesys's avatar
diesys committed
500 501
			elif(option_arg == '-u' or option_arg == '--update'):
					torneo = importaTorneo(torneo_arg)
502

503 504 505 506
					if(len(args['arguments']) > 3):
						giocatore1 = args['arguments'][1]
						giocatore2 = args['arguments'][2]
						esito_match = float(args['arguments'][3])			# [0, 0.5, 1]
507

diesys's avatar
diesys committed
508
						aggiornaTorneo(torneo, giocatore1, giocatore2, esito_match)
509

diesys's avatar
diesys committed
510 511
					else:
						print('Manca qualcosa! Inserisci Giocatore1 Giocatore2 Risultato')
512

diesys's avatar
diesys committed
513 514 515 516
			elif(option_arg == '-r' or option_arg == '--ranking'):
					torneo = importaTorneo(torneo_arg)
					
					ranking = rankingStabile(torneo)
517

diesys's avatar
diesys committed
518 519
					caratteri_omessi = ",'[(]"
					caratteri_sostituiti = ")"
diesys's avatar
diesys committed
520

521
					if any("--html" in o for o in args['option']):
diesys's avatar
diesys committed
522
						print(rankingHtml(torneo))
diesys's avatar
diesys committed
523

diesys's avatar
diesys committed
524 525
					else:
						ranking_str = ' ' + str(ranking['stabili'])
diesys's avatar
diesys committed
526

diesys's avatar
diesys committed
527 528
						if(len(ranking['instabili'])):
							ranking_str += '\n== Match < 6 ==\n ' + str(ranking['instabili'])
529

diesys's avatar
diesys committed
530 531
						for char in caratteri_omessi:
							ranking_str = ranking_str.replace(char, '')
diesys's avatar
diesys committed
532

diesys's avatar
diesys committed
533
						ranking_str = ranking_str.replace(caratteri_sostituiti, '\n')
534

diesys's avatar
diesys committed
535
						print(ranking_str)
diesys's avatar
diesys committed
536

537

diesys's avatar
diesys committed
538 539 540
			## lista dei giocatori
			elif(option_arg == '-g' or option_arg == '--giocatori'):
					torneo = importaTorneo(torneo_arg)
541

542
					if any("--html" in o for o in args['option']):
diesys's avatar
diesys committed
543
						print(selectGiocatoriHtml(torneo))
544

diesys's avatar
diesys committed
545 546 547 548
					else:
						giocatori = str(selectGiocatori(torneo))
						caratteri_omessi = "'[(])"
						caratteri_sostituiti = ", "
549

diesys's avatar
diesys committed
550 551
						for char in caratteri_omessi:
							giocatori = giocatori.replace(char, '')
552

diesys's avatar
diesys committed
553 554
						giocatori = giocatori.replace(caratteri_sostituiti, '\n')
						print(giocatori)
555

556

diesys's avatar
diesys committed
557
			elif(option_arg == '-m' or option_arg == '--match'):
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586
				# torneo = torneo_arg
				torneo = importaTorneo(torneo_arg)
				# la lista invertita per visualizzare l'ultima in alto
				# matches = torneo['MATCHES'][::-1]
				# la lista NON invertita per visualizzare l'ultima in basso da TERMINALE
				matches = torneo['MATCHES']

				if any("--html" in o for o in args['option']):
					print(partiteHtml(torneo))

				else:
					matches = ' ' + str(matches)

					matches = matches.replace('[', '')
					matches = matches.replace('],', '\n')
					matches = matches.replace(', 0.0', ': 2')
					matches = matches.replace(', 0.5', ': X')
					matches = matches.replace(', 1.0', ': 1')
					matches = matches.replace('1,', '1')
					matches = matches.replace('X,', 'X')
					matches = matches.replace('2,', '2')
					matches = matches.replace(', ', ' - ')
					# matches = matches.replace('- (', ' ')

					caratteri_omessi = "[]',"
					for char in caratteri_omessi:
						matches = matches.replace(char, '')

					print(matches)
587

diesys's avatar
diesys committed
588 589 590 591
			else:
				print(HELP)
		else:
			print('Manca il nome del torneo!')
592 593
else:
	print(HELP)