atualiza.py 8.58 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 11 17:26:01 2013

@author: Diego
@email: moreira.geo@gmail.com
"""
import os, subprocess
import sqlite3
import os

TABELA_ORIGINAL = 'tb_proxy'

tables = {}
tables[TABELA_ORIGINAL] =  [[u'id', u'INTEGER PRIMARY KEY'],
                        [u'proxy', u'TEXT'],
                        [u'port', u'TEXT'],
                        [u'user', u'TEXT'],
                        [u'password', u'TEXT'],
                        [u'exceptions', u'TEXT']]   

class ProxyDB():
    def __init__(self, path, nome):
        self.con = self.getDB(path, nome)      
        if not self.isMetadadosDB(): 
            self.createTables()

    def getDB(self, path, nome):
        banco = os.path.join(path,nome)
        if os.path.exists(path):
                try:
                    con = sqlite3.connect(banco)
                    return con
                except:
                    print 'Não foi possível criar uma conecção com o BD:{0}'\
                    .format(banco)
                    return None
        else:
            print 'Não foi possível encontrar o caminho especificado:{0}'\
                    .format(banco)
            return None
        
    
    def isMetadadosDB(self):
        cur = self.con.cursor() 
        tablesNames = tables.keys()
        for i in tablesNames:
            teste = False
            for j in cur.execute("select name from sqlite_master where type ='table'"):
                teste = i ==  j[0]
                if teste:
                    break
            if not teste:
                return teste
        return teste
            
    def createTables(self):
        tablesName = tables.keys()
        tablesName.reverse()
        for table in tablesName :
            sql = "CREATE TABLE {0}(".format(table)
            columns = tables.get(table)
            column = columns.pop(0)
            sql = "{0} {1} {2}".format(sql, column[0], column[1])
            for column in columns:
                sql = "{0}, {1} {2}".format(sql, column[0], column[1])
            sql = "{0});".format(sql)
            cur = self.con.cursor()
            cur.execute(sql)
            self.con.commit()
            
    def inserirItem(self, nomeTabela, dicionario):
        sql = "INSERT INTO {0}".format(nomeTabela)
        columns = dicionario.keys()
        values = []
        for key in columns:
            value = dicionario.get(key)
            if type(value) == str:
                values.append("'{0}'".format(value))
            else:
                values.append(str(value))
       
        sql = '{0} {1} VALUES {2}'.format(sql,  str(columns).replace("'", ''), \
                 str(values).replace('"', '')).replace('[','(').replace(']',')')
        cur = self.con.cursor()
        cur.execute(sql)
        self.con.commit()
        
    def obterProxyList(self):
        cur = self.con.cursor()
        proxyDict = {}
        for e in cur.execute("SELECT id, proxy, port, user, password, exceptions FROM tb_proxy"):
            proxyDict[e[0]] = {'proxy':e[1], 'port':e[2], 'user':e[3], 'password':e[4], 'exceptions':e[5] }
        return proxyDict
        
  
    def save(self):
        self.con.commit()
        
    def close(self):
        self.con.close()

PROJECT_ROOT_PATH =  os.path.realpath(os.path.dirname(__file__))
metadadosDB = ProxyDB(PROJECT_ROOT_PATH, 'proxy.db')
    
def validaEntradaSN(msg):
    while True:
        var = raw_input(msg)
        if var.upper() == 'S':
            return True
        elif var.upper() == 'N':
            return False

def validaEntradaTexto(msg):
    while True:
        var = raw_input(msg)
        if len(var) > 0:
            return var
        
def validaEntradaNumero(msg):
    while True:
        var = raw_input(msg)
        if len(var) > 0:
            try:
                int(var)
                return var
            except:
                print 'O valor deve ser do tipo interio!'
    return None

def insertProxy():
    continua = True
    proxyDict = {}
    while continua :
        proxyDict['proxy'] = validaEntradaTexto("Informe o proxy: ") 
        proxyDict['port'] = validaEntradaNumero("Informe a porta: ")
        if validaEntradaSN("Seu proxy requer autenticação? (S ou N)\n>> "):
            proxyDict['user'] = validaEntradaTexto("Informe o usuário: ")
            proxyDict['password'] = validaEntradaTexto("Informe a senha: ")
        if validaEntradaSN("Você quer cadastrar exceções? (S ou N)\n>> "):
            proxyDict['exceptions'] = validaEntradaTexto("Informe as exceções: ")

        for i in proxyDict:
            print i, '\t- ', proxyDict[i]
            
        msg = "Esta é a configurção de proxy que será utilizada:\nEla está correta? (S ou N)\n>>"
        if validaEntradaSN(msg):
            continua = False
            metadadosDB.inserirItem(TABELA_ORIGINAL, proxyDict)
            '''serversPath = os.path.join(PROJECT_ROOT_PATH,'.subversion/servers')
            serversFile = open(serversPath,'a+b')
            serversFile.write("http-proxy-host = {0}\n".format(proxy))
            serversFile.write("http-proxy-port = {0}\n".format(porta))
            if usuario:
                serversFile.write("http-proxy-username = {0}\n".format(usuario))
                serversFile.write("http-proxy-password = {0}\n".format(senha)) 
            serversFile.close()
            atualiza_info_file = open(atualizaPath,'w')
            atualiza_info_file.close()'''

        else:
            for i in proxyDict.keys():
                proxyDict[i] = ''
    return proxyDict

def proxy():
    
    texto = "Se você utiliza um proxy para acessar a web é necessário que o proxy seja configurado para fazer o update.\
    Caso você configure o proxy e o update não seja executado com sucesso, procure o seu administrador da rede e informe a ele o seguinte:\n\
    1 - Arquivo local que armazena as configurações do proxy para o svn: {0}\n\
    2 - É preciso que o servidor proxy suporte os seguintes métodos: PROPFIND, REPORT, MERGE, MKACTIVITY, CHECKOUT.\n\
    3 - Mais informações: http://subversion.apache.org/faq.html#proxy\n\n".format(os.path.join(PROJECT_ROOT_PATH,'.subversion/servers'))

    print texto    
    
   
    a = metadadosDB.obterProxyList()
    if len(a): 
        print 'Escolha a configuração que deseja utilizar:'
        for i in a:
            print i,' - ', a[i]['proxy'],a[i]['port'],a[i]['user'],a[i]['password'],a[i]['exceptions']
        metadadosDB.close() 
    
    var = int(validaEntradaNumero("Digite o número do proxy desejado ou 0 para inserir um novo\n>> "))
    
    proxyDict = None
    if var == 0:
        proxyDict = insertProxy()
    else:
        if var in a:
            proxyDict = a[var]
        else: 
            print 'Opção inválida!'
            return
    utilizarProxy(proxyDict)   

def utilizarProxy(proxyDict):
    serversPath = os.path.join(PROJECT_ROOT_PATH,'.subversion/servers')
    serversFile = open(serversPath,'w')
    serversFile.write("[global]\n")
    
    fileDict = {'proxy': 'http-proxy-host = ',
    'port':'http-proxy-port = ',
    'user': 'http-proxy-username',
    'password':'http-proxy-username = ',
    'exceptions':'http-proxy-password = '}
    
    for k,v in proxyDict.items():
        if v:
            serversFile.write(fileDict[k] + v + '\n')
    serversFile.close()
    atualiza()        

def atualiza():

    print 'Escolha o que você deseja atualizar:'
    print '1 - I3Geo'
    print '2 - Docs'
    print 'Outro número - Tudo'

    var = int(validaEntradaNumero("Digite o número do proxy desejado ou 0 para inserir um novo\n>> "))
    
    diretorio = '/var/www'
    os.chdir(diretorio)	
    print 'Limpando diretório...'
    subprocess.call(["svn","cleanup"], stdout=0) 

    if var == 1:
        diretorio = '/var/www/i3geo'
    elif var == 2:
        diretorio = '/var/www/docs'
    print 'Atualizando ', diretorio         
    os.chdir(diretorio)
    subprocess.call(["svn","update"], stdout=0) 
    raw_input("Pressione qualquer tecla para sair.")

def limparProxy():
    serversPath = os.path.join(PROJECT_ROOT_PATH,'.subversion/servers')
    serversFile = open(serversPath,'w')
    serversFile.close()
       
if __name__ == '__main__':
    continua = True
    while continua :
        print 'Opções:'
        print '0 - Atualizar'
        print '1 - Configurar Proxy e Atualizar'
        print '2 - Limpar proxy'
        print '3 - Sair'
        var = int(validaEntradaNumero("Escolha: "))
        if var == 0:
            atualiza()
	    continua = False
        elif var == 1:
            proxy()
        elif var == 2: 
            limparProxy()
        elif var == 3: 
            continua = False