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

3 4 5
import math
import sys
import json
sbiego's avatar
sbiego 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'
sbiego's avatar
sbiego 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
sbiego's avatar
sbiego committed
40
	# vecchio: torneo = {'NOME': nome, 'FILE': file_path,
sbiego's avatar
sbiego 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)
sbiego's avatar
sbiego 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):
sbiego's avatar
sbiego committed
51
			# data
52 53
			with open(file_path, 'w') as fp:
				json.dump(torneo, fp)
sbiego's avatar
sbiego committed
54
			
sbiego's avatar
sbiego committed
55 56
			# qr
			with open(qr_path, 'w') as fp:
sbiego's avatar
sbiego 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)
sbiego's avatar
sbiego committed
60 61 62 63 64
			
			# logo
			# with open(file_path, 'w') as fp:
			# 	json.dump(torneo, fp)

sbiego's avatar
sbiego 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):
sbiego's avatar
sbiego 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):
sbiego's avatar
sbiego committed
100
    # Elimina dal torneo il Giocatore 'NOME'. Nella torneo e nella classifica del
sbiego's avatar
sbiego 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

sbiego's avatar
sbiego committed
115
def nuoviPunteggiXY(torneo, giocatore1, giocatore2, risultato1):
116
    # Calcola i nuovi di due giocatori dopo una partita. Il risultato
sbiego's avatar
sbiego 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'])):
sbiego's avatar
sbiego committed
120
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore1:
sbiego's avatar
sbiego 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'])):
sbiego's avatar
sbiego committed
125
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore2:
sbiego's avatar
sbiego committed
126
			punteggio2 = int(torneo['GIOCATORI'][str(id)]['RANK'])
127
			matchY = int(torneo['GIOCATORI'][str(id)]['MATCH'])
128

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

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

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

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

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

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

160

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

sbiego's avatar
sbiego 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

sbiego's avatar
sbiego 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

sbiego's avatar
sbiego committed
176
	trovato1 = False
177
	for id in range(len(torneo['GIOCATORI'])):
sbiego's avatar
sbiego committed
178
		if torneo['GIOCATORI'][str(id)]['NOME'] == giocatore1:
sbiego's avatar
sbiego 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

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

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

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

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

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

215 216
	# aggiorna classifica
	aggiornaRanking(torneo)
217
	torneo['MATCHES'].append(
sbiego's avatar
sbiego 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'))
sbiego's avatar
sbiego 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']
sbiego's avatar
sbiego committed
241
			partite = torneo['GIOCATORI'][i]['MATCH']
242

sbiego's avatar
sbiego 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

sbiego's avatar
sbiego 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])
sbiego's avatar
sbiego committed
268
	
269
	return ranking
sbiego's avatar
sbiego 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

sbiego's avatar
sbiego 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:
sbiego's avatar
sbiego 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)
sbiego's avatar
sbiego 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'
sbiego's avatar
sbiego 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)
sbiego's avatar
sbiego 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 = ''
sbiego's avatar
sbiego committed
402
		for torneo in sorted(dirs):
403 404 405
			select += "<option value='" + torneo + "'>" + torneo + "</option>\n"
		return select
	else:
sbiego's avatar
sbiego 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 



sbiego's avatar
sbiego committed
421
######################################################################################################################################################
422

sbiego's avatar
sbiego 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
sbiego's avatar
sbiego 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

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

sbiego's avatar
sbiego 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)
sbiego's avatar
sbiego committed
470 471 472 473
			
			elif(option_arg == '-i' or option_arg == '--import'):
					torneo = importaTorneo(torneo_arg)
					tornei = {torneo['NOME']: torneo}
474

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

sbiego's avatar
sbiego 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]
sbiego's avatar
sbiego committed
484 485 486
						aggiungiGiocatore(torneo, giocatore)
					else:
						print('Manca il nome del giocatore!')
487

sbiego's avatar
sbiego 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

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

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


sbiego's avatar
sbiego 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

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

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

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

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

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

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

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

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

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

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

537

sbiego's avatar
sbiego 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']):
sbiego's avatar
sbiego committed
543
						print(selectGiocatoriHtml(torneo))
544

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

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

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

556

sbiego's avatar
sbiego 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

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