def run(args, app_id, secret): """ main loop """ document_type = args.document_type if document_type not in supported_types: print("[!] Unknown document type specified. Supported types ({0})". format(supported_types)) # Create the main object for dealing with diario if args.ip and args.port: diario = Diario(app_id, secret, args.ip, args.port) else: diario = Diario(app_id, secret) hashes = [] counter = 0 log = None # Single hash search if args.hash: hashes.append(args.hash) else: try: with open(args.hashes_file, "r") as f: hashes.extend(f.read().split("\n")) hashes = [n for n in hashes if n] except Exception as err: print("[!] Error trying to read file {0}".format(args.hashes_file)) print(err) sys.exit(1) if args.log: log = open(args.log, "w") try: for hash_to_get in hashes: print("[i] Getting {0}".format(hash_to_get)) report, error = get_hash_from_diario(diario, hash_to_get, document_type) print(report) if args.log: log.write(report) if not error: counter += 1 finally: if log: log.close() print("[*] Found {0} of {1} hashes".format(counter, len(hashes)))
def diario(plugin_name, project_id, resource_id, resource_type, document_hash): result_status = PluginResultStatus.STARTED result = {"is_document": False} try: if not (APP_ID and SECRET_KEY): print("No App ID key...!") result_status = PluginResultStatus.NO_API_KEY else: diariosdk = Diario(APP_ID, SECRET_KEY) response = diariosdk.search(document_hash) if response.data: result = get_result(diariosdk, response.data) result_status = PluginResultStatus.COMPLETED else: result_status = PluginResultStatus.RETURN_NONE PluginManager.set_plugin_results(resource_id, plugin_name, project_id, result, result_status) except Exception as e: tb1 = traceback.TracebackException.from_exception(e) print("".join(tb1.format())) result = None
def old_diario(document_hash): result = {"is_document": False} try: if not APP_ID: print("No App ID key...!") return None if not SECRET_KEY: print("No secret key...!") return None diariosdk = Diario(APP_ID, SECRET_KEY) response = diariosdk.get_pdf_info(document_hash) if not response.data: response = diariosdk.get_office_info(document_hash) if response.data: result = get_result(diariosdk, response.data) else: result = get_result(diariosdk, response.data) except Exception as e: tb1 = traceback.TracebackException.from_exception(e) print("".join(tb1.format())) result = None return result
def Confirmar(self, key, window_id): #ainda não esta 100% ver com calma outro dia # Gera movimento contabilistico (conta de materias primas contra conta de gastos e entrada de produto acabado em armazem) # Gera movimento de Stock (sai materia prima do armazem por contrapartida de produto acabado) if key in ['None', None]: key = get_actions(action='save', key=None, model_name=model.__model_name__, internal=True) record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence('prato') from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message('não existe periodo definido para a data em questão! \n') from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] from movimento import Movimento movimento = Movimento(data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de Produção', diario=diario, documento='prato', periodo=periodo, estado='Confirmado', user=session['user'], active=False).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Produção', documento='prato', periodo=periodo, estado='Confirmado', user=session['user']).put() Prato(**record).put() from linha_prato import LinhaPrato record_lines = LinhaPrato(where="prato = '{prato}'".format(prato=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from linha_stock import LinhaStock from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(line['quantidade']) product = Produto().get(key=line['produto'])[0] conta_mercadorias = product['conta_mercadorias'] conta_gastos = product['conta_gastos'] taxa_iva = product['iva'] armazem_vendas = None familia = FamiliaProduto().get(key=product['familia']) if familia: familia = familia[0] if familia['armazem_vendas']: armazem_vendas = familia['armazem_vendas'] descricao = product['nome'] #total_sem_iva = line['valor_total']/(1+taxa_iva) #Aqui ver a contabilização LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal(0), credito=to_decimal(0), user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal(0), debito=to_decimal(0), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put() # o movimento é no armazem cozinha e sai materia-prima entra produto acabado LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_materia_prima, quant_saida=quantidade, quant_entrada=0.0, user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_produto, quant_saida=0.0, quant_entrada=quantidade, user=session['user']).put() return form_edit(key = key, window_id = window_id) else: return error_message('Não pode confirmar talões sem linhas de Talão! \n')
def __init__(self): Analyzer.__init__(self) self.service = self.get_param('config.service', None, 'Service parameter is missing') self.client_id = self.get_param('config.client_id', None, 'Missing Client ID') self.secret = self.get_param('config.secret', None, 'Missing Secret') self.polling_interval = self.get_param('config.polling_interval', 60) self.api = Diario(self.client_id, self.secret)
def check(data): api = Diario('API - ID', 'API - SECRETS') result = api.search(data[1]) if result.error is None: return result.data elif result.json['error']['code'] == 406: api.upload(data[0]) result = {'prediction': 'U', 'status': 'Q', 'sha256': data[1]} return result else: result = {'prediction': 'E'} return result
def check(hash): diario_id = '' [id diario] diario_key = '' [api key] #diario_id='iTQGd8PuHkVCCDEiZef9'# The MISP auth key can be found on the MISP web interface under the automation section api = Diario(diario_id, diario_key) #Poner aca las keys que obtengas en https://diario.elevenpaths.com) result = api.search(hash) print(result.data) print(result.error) if result.error is None: return result.data else: res = {} res['prediction'] = 'E' return res
def efectuar_pagamento(self, key, window_id): """Esta acção efectua o pagamento""" active = False record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Pago' from terceiro import Terceiro terceiro = Terceiro(where="nome='Clientes Gerais'").get()[0] cliente = terceiro['id'] conta_cliente = terceiro['a_receber'] #Verifica se tem caixa aberta, se não tiver abre #Faz o pagamento em caixa from caixa import Caixa from linha_caixa import LinhaCaixa from terminal import Terminal terminal = Terminal(where="""name='Distribuicao'""").get( ) # substituir esta bosta para get_terminal if len(terminal) > 0: terminal = terminal[0]['id'] caixa = Caixa( where= "estado = 'Aberta' AND terminal='{terminal}' AND data_inicial <= '{today}'" .format(terminal=terminal, today=record['data'])).get() if not caixa: caixa = Caixa(data_inicial=record['data'], hora_inicial=time.strftime('%H:%M:%S'), valor_inicial=0, valor_final=0, estado='Aberta', user=session['user'], vendedor=session['user'], terminal=terminal).put() else: caixa = caixa[0]['id'] from metodo_pagamento import MetodoPagamento metodos_pagamento = MetodoPagamento().get_options() first = True total_entregue = to_decimal('0') for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal(str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): total_entregue += to_decimal( str(bottle.request.forms.get(metodo[1]))) if total_entregue >= to_decimal( str(bottle.request.forms.get('total_a_pagar'))): for metodo in metodos_pagamento: if first == True: default_metodo = metodo first = False if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=metodo[0], entrada=bottle.request.forms.get(metodo[1]), saida=0, active=active, user=session['user']).put() troco = total_entregue - to_decimal( str(bottle.request.forms.get('total_a_pagar'))) if troco > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=default_metodo[0], entrada=0, saida=troco, active=active, user=session['user']).put() else: troco = to_decimal('0') record['residual'] = to_decimal( str(bottle.request.forms.get( 'total_a_pagar'))) - total_entregue + troco #Faz o lançamento contabilistico se tiver factura como movimento activo, se não como movimento geral #Vê o metodo de pagamento e lança na conta adequada from diario import Diario diario = Diario(where="tipo='caixa'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para a data em questão! \n') from movimento import Movimento from linha_movimento import LinhaMovimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Pagamento de Guia de Distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Rascunho', user=session['user'], active=active).put() #print (record) Distribuicao(**record).put() for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): conta_pagamento = MetodoPagamento().get( key=metodo[0])[0]['conta'] LinhaMovimento(movimento=movimento, descricao='Pagamento de Talão de Venda', conta=conta_pagamento, quant_debito=to_decimal('0'), debito=to_decimal( str(bottle.request.forms.get( metodo[1]))), quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento( movimento=movimento, descricao='Pagamento de Guia de Distribuição', conta=conta_cliente, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=to_decimal('0'), credito=to_decimal( str(bottle.request.forms.get(metodo[1]))), user=session['user']).put() return form_edit(key='None', window_id=self.window_id) else: return error_message( 'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!' ) #depois ver a possibilidade de ficar no mesmo sitio
def Confirmar( self, key, window_id): #não tinha self nem key eu acrescentei mas não testei # Gera movimento contabilistico (conta de mercadorias contra conta de gastos) # Gera movimento de Stock (sai de armazem por contrapartida de cliente) #print ('Hello!!!') if key in ['None', None]: m_action = model_action(obj=self) m_action.save(key=None, internal=True) record_id = key #print ('model_get begin!') record = model.get(key=record_id)[0] #print (record) record['user'] = session['user'] record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence('distribuicao') from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para o data em questão! \n') from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] #Valida se o cliente é sujeito a iva from terceiro import Terceiro sujeito_iva = Terceiro( where="nome='Clientes Gerais'").get()[0]['sujeito_iva'] from movimento import Movimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Distribuição', documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() Distribuicao(**record).put() from linha_distribuicao import LinhaDistribuicao record_lines = LinhaDistribuicao( where="distribuicao = '{distribuicao}'".format( distribuicao=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from linha_stock import LinhaStock from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(line['quant_out']) - to_decimal( line['quant_in']) product = Produto().get(key=line['produto'])[0] contas = Produto().get_accounts(line['produto']) conta_mercadorias = contas['conta_mercadorias'] conta_gastos = contas['conta_gastos'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = to_decimal('0') armazem_vendas = None familia = FamiliaProduto().get(key=product['familia']) if familia: familia = familia[0] if familia['armazem_vendas']: armazem_vendas = familia['armazem_vendas'] descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_vendas, quant_saida=quantidade, quant_entrada=to_decimal('0'), user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_cliente, quant_saida=to_decimal('0'), quant_entrada=quantidade, user=session['user']).put() #print ('See You!!!') return form_edit(key=key, window_id=window_id) else: return error_message( 'Não pode confirmar guias de Distribuição sem linhas de Distribuição! \n' )
def Confirmar(self, key, window_id): # Gera movimento contabilistico (conta de mercadorias contra conta de gastos) # Gera movimento de Stock (sai de armazem por contrapartida de cliente) #print (key) if key in ['None', None]: key = get_actions(action='save', key=None, model_name=model.__model_name__, internal=True) #print (key) record_id = key record = model.get(key=record_id)[0] record['user'] = session.get('user', None) record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence('talao') record['residual'] = model.get_total(key=record_id) from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] #Valida se o cliente é sujeito a iva from terceiro import Terceiro sujeito_iva = Terceiro(where="id='{cliente}'".format( cliente=str(record['cliente']))).get()[0]['sujeito_iva'] from movimento import Movimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nosso Talão de Venda', diario=diario, documento='talao', periodo=periodo, estado='Confirmado', user=session.get('user', None), active=False).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nosso Talão de Venda', documento='talao', periodo=periodo, estado='Confirmado', user=session.get('user', None)).put() Talao(**record).put() from linha_talao import LinhaTalao record_lines = LinhaTalao(where="talao = '{talao}'".format( talao=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from linha_stock import LinhaStock from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(str(line['quantidade'])) product = Produto().get(key=line['produto'])[0] contas = Produto().get_accounts(line['produto']) conta_mercadorias = contas['conta_mercadorias'] conta_gastos = contas['conta_gastos'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = to_decimal('0') armazem_vendas = None familia = FamiliaProduto().get(key=product['familia']) if familia: familia = familia[0] if familia['armazem_vendas']: armazem_vendas = familia['armazem_vendas'] descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session.get('user', None)).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=quantidade, credito=line['valor_total'], user=session.get('user', None)).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_vendas, quant_saida=quantidade, quant_entrada=to_decimal('0'), user=session.get('user', None)).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_cliente, quant_saida=to_decimal('0'), quant_entrada=quantidade, user=session.get('user', None)).put() return form_edit(key=key, window_id=window_id) else: return error_message( 'Não pode confirmar talões sem linhas de Talão! \n')
def Cancelar(self, key, window_id): #Estorna movimento contabilistico #extorna caso confirmada ou simplesmente cancela se em rascunho record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Cancelado' from diario import Diario diario = Diario(where="tipo='vendas'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(str(datetime.date.today()))) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para o data em questão! \n') #Valida se o cliente é sujeito a iva from terceiro import Terceiro terceiro = Terceiro(where="id='{cliente}'".format( cliente=record['cliente'])).get()[0] sujeito_iva = terceiro['sujeito_iva'] conta_terceiro = terceiro['a_receber'] #Tanto no movimento como no stock eu poderei ter vários movimentos, por exemplo o movimento em si e a anulação, além disso teremos que ter reconciliação de movimentos. from movimento import Movimento movimento = Movimento( data=datetime.date.today(), numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Anulação de Nossa Factura', documento='leitura_tecnica', diario=diario, periodo=periodo, estado='Confirmado', user=session['user']).put() record['movimento'] = movimento LeituraTecnica(**record).put() from linha_leitura_tecnica import LinhaLeituraTecnica record_lines = LinhaLeituraTecnica( where="leitura_tecnica = '{factura}'".format( factura=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto quantidade = float(line['quantidade']) product = Produto().get(key=line['produto'])[0] conta_receitas = product['conta_receitas'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = 0.0 descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_receitas, quant_debito=quantidade, debito=total_sem_iva, quant_credito=0.0, credito=0.0, user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_terceiro, quant_debito=0.0, debito=0.0, quant_credito=quantidade, credito=total_sem_iva, user=session['user']).put() return form_edit(key=key, window_id=window_id)
def Confirmar(self, key, window_id): # Gera movimento contabilistico (conta de receitas contra conta de terceiros) if key == 'None': #Grava o registo se ainda não estiver guardado key = get_actions(request=bottle.request, action='save', key=None, model_name=model.__model_name__, title=model.__title__, name=model.__name__, internal=True) record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence( 'leitura_tecnica') from diario import Diario diario = Diario(where="tipo='vendas'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para a data em questão! \n') #Valida se o cliente é sujeito a iva from terceiro import Terceiro terceiro = Terceiro(where="id='{cliente}'".format( cliente=record['cliente'])).get()[0] sujeito_iva = terceiro['sujeito_iva'] conta_terceiro = terceiro['a_receber'] from movimento import Movimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Factura', diario=diario, documento='leitura_tecnica', periodo=periodo, estado='Confirmado', user=session['user']).put() record['movimento'] = movimento LeituraTecnica(**record).put() from linha_leitura_tecnica import LinhaLeituraTecnica record_lines = LinhaLeituraTecnica( where="leitura_tecnica = '{factura}'".format( factura=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto quantidade = float(line['quantidade']) product = Produto().get(key=line['produto'])[0] conta_mercadorias = product['conta_receitas'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = 0.0 #familia = FamiliaProduto().get(key=product['familia'])[1][0] descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_terceiro, quant_debito=quantidade, debito=total_sem_iva, quant_credito=0.0, credito=0.0, user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_receitas, quant_debito=0.0, debito=0.0, quant_credito=quantidade, credito=total_sem_iva, user=session['user']).put() return form_edit(key=key, window_id=window_id) else: return error_message( 'Não pode confirmar facturas sem linhas de factura! \n')
# Crea il symlink sorgente = os.path.abspath(__file__) os.symlink(sorgente, symlink) # Rende il file python eseguibile (spero) st = os.stat(sorgente) os.chmod(sorgente, st.st_mode | stat.S_IEXEC) # Informa l'utente che da questo momento in poi può # utilizzare il symlink per lanciare il programma print("Creato un symlink al programma su {}".format(symlink)) print("Da questo momento in poi puoi richiamare") print("il programma semplicemente utilizzando il comando:") print("") print("diario <tag1> [<tag2> <tag3> ...]") diario = Diario() # Salta il primo elemento dell'array # che tanto è il nome del programma stesso argomenti = sys.argv[1:] if len(argomenti) > 0: # Se è stato passato almeno un tag, crea un nuovo file diario.crea(None, *argomenti) else: # Altrimenti tenta di aprire l'ultimo file if not diario.apri_ultimo_file(): print("Utilizzo: diario <tag1> [<tag2> <tag3> ...]".format( sys.argv[0])) quit(0)