Пример #1
0
def sincronizar(argv):

	
	full_path = os.path.realpath(__file__) #Se averigua la ruta
	dirname = os.path.dirname(full_path) #se obtiene el directorio
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion

	newDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	
	#newDB = DB.databaseHandlerTable() #crea la conexion a la base de datos y se establece sobre la tabla generic_xml
	

	elements = newDB.getItems();
	tables = []
	
	for element in elements:
		if element[4] not in tables:		
			tables.append(element[4]) #saca los elementos unicos (no chequea el campo tags)
			
	tables_to_insert = checkExistence(newDB,tables) #Tablas que se deben crear en la base de datos (No estan)
	#print tables_to_insert
	

	if len(tables_to_insert) > 0:
		for element in tables_to_insert:
			#print element 
			columns_to_create = newDB.readTags(element)
			primary = newDB.readTagPrimary(element)
			print primary
			DB.databaseHandlerTable.createTableforXML(newDB,element,columns_to_create,primary)
Пример #2
0
def synFeed(savedb,feed,saveas):# funcion de sincronizacion de feeds
	
	full_path = os.path.realpath(__file__) #Se averigua la ruta a manager.py
	
	filehandler = FH.XMLfileHandler()
	dirname = os.path.dirname(full_path) #se obtiene el directorio

	####Carga de la configuracion####
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion
	managementDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	managementDB.updateStatistics(savedb)

	#managementDB = DB.databaseHandlerTable()
	#managementDB.insertCron(savedb) #no es necesario insertar cron aca
	
	try:
		feed_downloader = FD.feeddownloader()
		feed_downloader.downloadfeed(feed,saveas)
	except:
		writeLog(dirname + '/Resources/events.log','Error en la descarga de ' + str(feed))  ##Solucionar el problema del directorio relativo para los crones
		exit 
	
	if os.system('python ' + dirname + '/setup_newDB.py ' +  dirname + '/Resources/generic-handler.xml') !=0: 
		log = open(dirname + '/Resources/events.log','python ' + dirname + '/setup_newDB.py ' + dirname + '/Resources/generic-handler.xml failed to update generic-handler file')
			
	if os.system('python ' + dirname + '/synchronize_generic.py') !=0: #Sincronizamos las tablas con el archivo generic-handler.xml
		writeLog(dirname + '/Resources/events.log','python ' + dirname + '/synchronize_generic.py' + ' fail to sync generic feed')
		
	if os.system('python ' + dirname + '/synchronize_xml.py ' + str(savedb) ) !=0: #sincronizamos la tabla nueva
		writeLog(dirname + '/Resources/events.log','python ' + dirname  + '/synchronize_xml.py ' + str(savedb) + '  failed to sync feed')	##corregir el error porque sino siempre da error cuando hay entradas duplicadas
Пример #3
0
def delFeed(
        savedb,
        deletedb):  #Borra el cron de la base de datos y lo elimina del sistema

    full_path = os.path.realpath(__file__)  #Se averigua la ruta a manager.py
    dirname = os.path.dirname(full_path)  #se obtiene el directorio

    ####Carga de la configuracion####
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion
    managementDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    managementDB.deleteStatistics(savedb)

    #managementDB = DB.databaseHandlerTable()
    cron_id = managementDB.getCronID(savedb)
    filehandler = FH.XMLfileHandler()

    saveas_field = managementDB.readSaveas(
        savedb)  #Se obtiene el campo saveas para eliminar el archivo xml
    deletecronFile(
        cron_id)  ##Borra la entrada correspondiente del archivo de cron

    managementDB.deleteCron(
        savedb)  ##Elimina la entrada de la tabla cron_management

    try:
        feed_downloader = FD.feeddownloader()
        feed_downloader.removefeed(str(saveas_field[0][0]))
    except:
        writeLog(dirname + '/Resources/events.log',
                 'Error en el borrado de ' + str(saveas_field[0][0]))
        exit

    filehandler.deletefromGenericXML(
        savedb)  #se borra la entrada del archivo generic-handler.xml

    save_name = managementDB.readName(savedb)
    print "save_name:" + '    ' + save_name[0][0]
    if deletedb == 'y':  #Si el usuario lo indica, borramos tambien la base de datos del feed, caso contrario queda a su disposicion
        managementDB.dropTableFeed(savedb)
        managementDB.deleteDescription(savedb)
    else:
        managementDB.insertOldFeed(save_name[0][0], savedb)

    if os.system('python ' + dirname + '/setup_newDB.py ' + dirname +
                 '/Resources/generic-handler.xml') != 0:
        log = open('Resources/events.log', 'a+')
        log.write(
            'python ' + dirname + '/setup_newDB.py ' + dirname +
            '/Resources/generic-handler.xml failed to update generic-handler file\n'
        )
        log.close()
Пример #4
0
def addFeed(savedb,mins,hours,dayofmonth,month,dayofweek,name,url,feed,saveas,root,primary_id,tag): #agrega un cron a la base de datos y lo crea en el sistema

	filehandler = FH.XMLfileHandler()

	full_path = os.path.realpath(__file__) #Se averigua la ruta a manager.py
	dirname = os.path.dirname(full_path) #se obtiene el directorio


	####Carga de la configuracion####
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion
	managementDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	


	#managementDB = DB.databaseHandlerTable()
	managementDB.insertCron(savedb) #inserta el cron en la base de datos
	managementDB.insertStatisticsFirstTime(savedb)
	

	hours = '*' if hours=='0' else hours
	
	if (mins =='0' and hours == '*'):
		mins = '*'

	dayofmonth = '*' if dayofmonth=='0' else dayofmonth
	month = '*' if month=='0' else month
	dayofweek = '*' if dayofweek=='0' else dayofweek

	try:
		feed_downloader = FD.feeddownloader()
		feed_downloader.downloadfeed(feed,saveas)
	except:
		writeLog(dirname + '/Resources/events.log','Error en la descarga de ' + str(feed))
		exit 


	filehandler.writeGenericXML(name,url,feed,saveas,savedb,root,primary_id,tag) #Agrega las entradas del feed a generic-handler.xml

	if os.system('python ' + dirname + '/setup_newDB.py ' +  dirname + '/Resources/generic-handler.xml') !=0: #anda siempre porque ./setup_newDB usa por default generic-handler.xml
		log = open('Resources/events.log','python ' + dirname + '/setup_newDB.py ' +  dirname + '/Resources/generic-handler.xml failed to update generic-handler file')
			
	if os.system('python ' + dirname + '/synchronize_generic.py') !=0: #Sincronizamos las tablas con el archivo generic-handler.xml
		writeLog('Resources/events.log','python ' + dirname + '/synchronize_generic.py' + ' fail to sync generic feed')
		
	if os.system('python ' + dirname + '/synchronize_xml.py ' + str(savedb) ) !=0: #sincronizamos la tabla nueva
		writeLog('Resources/events.log','python ' + dirname + '/synchronize_xml.py ' + str(savedb) + '  failed to sync feed')		


	##########################Crea el cron correspondiente. Habilitar cuando este la parte grafica terminada########################################################
	cron_id = managementDB.getCronID(savedb)
	 
	output = open(dirname + '/Resources/cron_feeds','a+')
	output.write("#cron_id: " + str(cron_id) + '\n')
	output.write(str(mins) + ' ' + str(hours) + ' ' + str(dayofmonth) + ' ' + str(month) + ' ' + str(dayofweek) + ' python ' + dirname + '/manager.py syn ' +  str(savedb) + ' ' + str(feed) + ' ' + str(saveas) + '  \n')
	output.close()
Пример #5
0
def main():
	
	if len(sys.argv) < 2:
		sys.exit('Usage: %s xml archive' % sys.argv[0] + '\n')
	
	

	full_path = os.path.realpath(__file__) #Se averigua la ruta
	dirname = os.path.dirname(full_path) #se obtiene el directorio
	####Carga de la configuracion####
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion


	newDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	
	handler = XGH.xmlGenericHandler(sys.argv[1]) #inicializa el handler de la base de datos

	newDB.dropTable()#borra la tabla
	newDB.createTable()#crea nuevamente la tabla

	tags = ("name","url","feed","saveas","savedb","root","primary_id","tag") #arma los tags para insertar en la tabla generica
	values = handler.getBody('site',tags) #obtiene los datos del XML generico


	if len(values)!=1: #En caso de que generic-handler.xml este vacio
		finish = False
		x = len(tags) - 1
		i = 0
		z = len(tags)

		while not finish:

			valor_bd = '(' + "'" + "','".join(values[i:z]) + "'" + ')' #arma la cadena para insertar los valores y el primer campo <tag>
	
			#print valor_bd
	
			newDB.insertItem(tags,valor_bd) #inserta en la tabla hasta el primer <tag>
			x += 1
			if len(values) > len(tags): #comprueba si hay mas de un tag
				while ((values[x] <> 'finarbol')): #quedan mas tags
					values_add = "','".join(values[i:z - 1])
					valor_bd = '(' + "'" + (values_add) + "','" + values[x] + "'" + ')'			
					#print valor_bd,'\n'			
					newDB.insertItem(tags,valor_bd) #inserta en la tabla el otro <tag>
					x+=1
				if (values[x + 1] == 'finito'):
					finish = True
				else:
					i = x + 1
					z = i + len(tags) 
					x = z - 1
			else:
				finish = True
Пример #6
0
def addDesc(savedb,description): #Agrega la descripcion en la tabla description
	
	full_path = os.path.realpath(__file__) #Se averigua la ruta a manager.py
	dirname = os.path.dirname(full_path) #se obtiene el directorio

	####Carga de la configuracion####
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion
	managementDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	

	#managementDB = DB.databaseHandlerTable()
	managementDB.insertDescription(savedb,description)
Пример #7
0
def synFeed(savedb, feed, saveas):  # funcion de sincronizacion de feeds

    full_path = os.path.realpath(__file__)  #Se averigua la ruta a manager.py

    filehandler = FH.XMLfileHandler()
    dirname = os.path.dirname(full_path)  #se obtiene el directorio

    ####Carga de la configuracion####
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion
    managementDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
    managementDB.updateStatistics(savedb)

    #managementDB = DB.databaseHandlerTable()
    #managementDB.insertCron(savedb) #no es necesario insertar cron aca

    try:
        feed_downloader = FD.feeddownloader()
        feed_downloader.downloadfeed(feed, saveas)
    except:
        writeLog(
            dirname + '/Resources/events.log',
            'Error en la descarga de ' + str(feed)
        )  ##Solucionar el problema del directorio relativo para los crones
        exit

    if os.system('python ' + dirname + '/setup_newDB.py ' + dirname +
                 '/Resources/generic-handler.xml') != 0:
        log = open(
            dirname + '/Resources/events.log',
            'python ' + dirname + '/setup_newDB.py ' + dirname +
            '/Resources/generic-handler.xml failed to update generic-handler file'
        )

    if os.system(
            'python ' + dirname + '/synchronize_generic.py'
    ) != 0:  #Sincronizamos las tablas con el archivo generic-handler.xml
        writeLog(
            dirname + '/Resources/events.log', 'python ' + dirname +
            '/synchronize_generic.py' + ' fail to sync generic feed')

    if os.system('python ' + dirname + '/synchronize_xml.py ' +
                 str(savedb)) != 0:  #sincronizamos la tabla nueva
        writeLog(
            dirname + '/Resources/events.log', 'python ' + dirname +
            '/synchronize_xml.py ' + str(savedb) + '  failed to sync feed'
        )  ##corregir el error porque sino siempre da error cuando hay entradas duplicadas
Пример #8
0
def addDesc(savedb,
            description):  #Agrega la descripcion en la tabla description

    full_path = os.path.realpath(__file__)  #Se averigua la ruta a manager.py
    dirname = os.path.dirname(full_path)  #se obtiene el directorio

    ####Carga de la configuracion####
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion
    managementDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    #managementDB = DB.databaseHandlerTable()
    managementDB.insertDescription(savedb, description)
Пример #9
0
def delFeed(savedb,deletedb): #Borra el cron de la base de datos y lo elimina del sistema
	
	full_path = os.path.realpath(__file__) #Se averigua la ruta a manager.py
	dirname = os.path.dirname(full_path) #se obtiene el directorio

	####Carga de la configuracion####
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion
	managementDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	
	managementDB.deleteStatistics(savedb)

	#managementDB = DB.databaseHandlerTable()
	cron_id = managementDB.getCronID(savedb)
	filehandler = FH.XMLfileHandler()

	saveas_field = managementDB.readSaveas(savedb) #Se obtiene el campo saveas para eliminar el archivo xml
	deletecronFile(cron_id) ##Borra la entrada correspondiente del archivo de cron

	managementDB.deleteCron(savedb)##Elimina la entrada de la tabla cron_management

	try:
		feed_downloader = FD.feeddownloader()
		feed_downloader.removefeed(str(saveas_field[0][0]))
	except:
		writeLog(dirname + '/Resources/events.log','Error en el borrado de ' + str(saveas_field[0][0]))
		exit 

	filehandler.deletefromGenericXML(savedb) #se borra la entrada del archivo generic-handler.xml	
	
	save_name = managementDB.readName(savedb)
	print "save_name:" +  '    ' + save_name[0][0]
	if deletedb == 'y': #Si el usuario lo indica, borramos tambien la base de datos del feed, caso contrario queda a su disposicion
		managementDB.dropTableFeed(savedb)
		managementDB.deleteDescription(savedb)
	else:
		managementDB.insertOldFeed(save_name[0][0],savedb)

	if os.system('python ' + dirname + '/setup_newDB.py ' +  dirname + '/Resources/generic-handler.xml') !=0: 
		log = open('Resources/events.log','a+')
		log.write('python ' + dirname + '/setup_newDB.py ' +  dirname + '/Resources/generic-handler.xml failed to update generic-handler file\n')
		log.close()
Пример #10
0
def sincronizar(argv):

    full_path = os.path.realpath(__file__)  #Se averigua la ruta
    dirname = os.path.dirname(full_path)  #se obtiene el directorio
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion

    newDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    #newDB = DB.databaseHandlerTable() #crea la conexion a la base de datos y se establece sobre la tabla generic_xml

    elements = newDB.getItems()
    tables = []

    for element in elements:
        if element[4] not in tables:
            tables.append(
                element[4]
            )  #saca los elementos unicos (no chequea el campo tags)

    tables_to_insert = checkExistence(
        newDB,
        tables)  #Tablas que se deben crear en la base de datos (No estan)
    #print tables_to_insert

    if len(tables_to_insert) > 0:
        for element in tables_to_insert:
            #print element
            columns_to_create = newDB.readTags(element)
            primary = newDB.readTagPrimary(element)
            print primary
            DB.databaseHandlerTable.createTableforXML(newDB, element,
                                                      columns_to_create,
                                                      primary)
Пример #11
0
def addFeed(savedb, mins, hours, dayofmonth, month, dayofweek, name, url, feed,
            saveas, root, primary_id,
            tag):  #agrega un cron a la base de datos y lo crea en el sistema

    filehandler = FH.XMLfileHandler()

    full_path = os.path.realpath(__file__)  #Se averigua la ruta a manager.py
    dirname = os.path.dirname(full_path)  #se obtiene el directorio

    ####Carga de la configuracion####
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion
    managementDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    #managementDB = DB.databaseHandlerTable()
    managementDB.insertCron(savedb)  #inserta el cron en la base de datos
    managementDB.insertStatisticsFirstTime(savedb)

    hours = '*' if hours == '0' else hours

    if (mins == '0' and hours == '*'):
        mins = '*'

    dayofmonth = '*' if dayofmonth == '0' else dayofmonth
    month = '*' if month == '0' else month
    dayofweek = '*' if dayofweek == '0' else dayofweek

    try:
        feed_downloader = FD.feeddownloader()
        feed_downloader.downloadfeed(feed, saveas)
    except:
        writeLog(dirname + '/Resources/events.log',
                 'Error en la descarga de ' + str(feed))
        exit

    filehandler.writeGenericXML(
        name, url, feed, saveas, savedb, root, primary_id,
        tag)  #Agrega las entradas del feed a generic-handler.xml

    if os.system(
            'python ' + dirname + '/setup_newDB.py ' + dirname +
            '/Resources/generic-handler.xml'
    ) != 0:  #anda siempre porque ./setup_newDB usa por default generic-handler.xml
        log = open(
            'Resources/events.log',
            'python ' + dirname + '/setup_newDB.py ' + dirname +
            '/Resources/generic-handler.xml failed to update generic-handler file'
        )

    if os.system(
            'python ' + dirname + '/synchronize_generic.py'
    ) != 0:  #Sincronizamos las tablas con el archivo generic-handler.xml
        writeLog(
            'Resources/events.log', 'python ' + dirname +
            '/synchronize_generic.py' + ' fail to sync generic feed')

    if os.system('python ' + dirname + '/synchronize_xml.py ' +
                 str(savedb)) != 0:  #sincronizamos la tabla nueva
        writeLog(
            'Resources/events.log', 'python ' + dirname +
            '/synchronize_xml.py ' + str(savedb) + '  failed to sync feed')

    ##########################Crea el cron correspondiente. Habilitar cuando este la parte grafica terminada########################################################
    cron_id = managementDB.getCronID(savedb)

    output = open(dirname + '/Resources/cron_feeds', 'a+')
    output.write("#cron_id: " + str(cron_id) + '\n')
    output.write(
        str(mins) + ' ' + str(hours) + ' ' + str(dayofmonth) + ' ' +
        str(month) + ' ' + str(dayofweek) + ' python ' + dirname +
        '/manager.py syn ' + str(savedb) + ' ' + str(feed) + ' ' +
        str(saveas) + '  \n')
    output.close()
Пример #12
0
def main():

    if len(sys.argv) < 2:
        sys.exit('Usage: %s savedb field' % sys.argv[0] + '\n')

    full_path = os.path.realpath(__file__)  #Se averigua la ruta a manager.py
    dirname = os.path.dirname(full_path)  #se obtiene el directorio
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion
    genericDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
    specificDB = DB.databaseHandlerTable(
        options.get('host'),
        options.get('user'),
        options.get('pass'),
        options.get('db'),
        table=sys.argv[1]
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    root_tag = genericDB.readRoot(sys.argv[1])
    saveas_tag = genericDB.readSaveas(sys.argv[1])

    print root_tag[0][0]
    print saveas_tag[0][0]

    handler = XGH.xmlGenericHandler(
        pathtofile=os.path.dirname(os.path.realpath(__file__)) + '/' +
        saveas_tag[0][0]
    )  #inicializa el handler de la base de datos--> se pasa la ruta absoluta

    tags = []
    aux_tags = genericDB.readTags(
        sys.argv[1]
    )  #arma los tags para insertar en la tabla correspondiente a la fuente
    for tag in aux_tags:
        tags.append(tag[0])
    print tags

    values = handler.getBody(root_tag[0][0],
                             tags)  #obtiene los datos del XML especifico

    finish = False
    x = len(tags) - 1
    i = 0
    z = len(tags)

    while not finish:

        valor_bd = '(' + "'" + "','".join(
            values[i:z]
        ) + "'" + ')'  #arma la cadena para insertar los valores y el primer campo <tag>

        #valor_bd.decode('utf8')
        #print MySQLdb.escape_string(valor_bd)

        if (
                values[x] <> 'finarbol'
        ):  #agregado para corregir bug en algunos feeds donde se incluye el finarbol
            specificDB.insertItemDistinct(
                tags,
                valor_bd)  #inserta en la base de datos hasta el primer <tag>

        x += 1
        if len(values) > len(tags):  #comprueba si hay mas de un tag
            while ((values[x] <> 'finarbol')):  #quedan mas tags
                values_add = "','".join(values[i:z - 1])
                valor_bd = '(' + "'" + (
                    values_add) + "','" + values[x] + "'" + ')'

                #valor_bd.decode('utf8')
                if (
                        values[x] <> 'finito'
                ):  #agregado para corregir bug en algunos feeds donde se incluye el finito
                    specificDB.insertItemDistinct(
                        tags, valor_bd)  #inserta en la tabla el otro <tag>

                x += 1
            if (values[x + 1] == 'finito'):
                finish = True
            else:
                i = x + 1
                z = i + len(tags)
                x = z - 1
        else:
            finish = True
Пример #13
0
def main():
	
	if len(sys.argv) < 2:
		sys.exit('Usage: %s savedb field' % sys.argv[0] + '\n')
	

	full_path = os.path.realpath(__file__) #Se averigua la ruta a manager.py
	dirname = os.path.dirname(full_path) #se obtiene el directorio
	config = configuration.configuration(dirname + '/Resources/timantti.conf')
	options = config.configSection('Database') #se obtienen los valores del archivo de configuracion
	genericDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),options.get('table')) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion
	specificDB = DB.databaseHandlerTable(options.get('host'),options.get('user'),options.get('pass'),options.get('db'),table=sys.argv[1]) #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

	root_tag = genericDB.readRoot(sys.argv[1])	
	saveas_tag = genericDB.readSaveas(sys.argv[1])	

	print root_tag[0][0]
	print saveas_tag[0][0]

	handler = XGH.xmlGenericHandler(pathtofile = os.path.dirname(os.path.realpath(__file__)) + '/' + saveas_tag[0][0]) #inicializa el handler de la base de datos--> se pasa la ruta absoluta

	tags=[]
	aux_tags = genericDB.readTags(sys.argv[1]) #arma los tags para insertar en la tabla correspondiente a la fuente
	for tag in aux_tags:
		tags.append(tag[0])
	print tags	
		
	values = handler.getBody(root_tag[0][0],tags) #obtiene los datos del XML especifico
	


	finish = False
	x = len(tags) - 1
	i = 0
	z = len(tags)

	while not finish:

		valor_bd = '(' + "'" + "','".join(values[i:z]) + "'" + ')' #arma la cadena para insertar los valores y el primer campo <tag>
	
		#valor_bd.decode('utf8')
		#print MySQLdb.escape_string(valor_bd)
		
		if (values[x] <> 'finarbol'): #agregado para corregir bug en algunos feeds donde se incluye el finarbol
			specificDB.insertItemDistinct(tags,valor_bd) #inserta en la base de datos hasta el primer <tag>
		

		x += 1
		if len(values) > len(tags): #comprueba si hay mas de un tag
			while ((values[x] <> 'finarbol')): #quedan mas tags
				values_add = "','".join(values[i:z - 1])
				valor_bd = '(' + "'" + (values_add) + "','" + values[x] + "'" + ')'			
				
				#valor_bd.decode('utf8')			
				if (values[x] <> 'finito'): #agregado para corregir bug en algunos feeds donde se incluye el finito
					specificDB.insertItemDistinct(tags,valor_bd) #inserta en la tabla el otro <tag>
				
				x+=1
			if (values[x + 1] == 'finito'):
				finish = True
			else:
				i = x + 1
				z = i + len(tags) 
				x = z - 1
		else:
			finish = True
Пример #14
0
def main():

    if len(sys.argv) < 2:
        sys.exit('Usage: %s xml archive' % sys.argv[0] + '\n')

    full_path = os.path.realpath(__file__)  #Se averigua la ruta
    dirname = os.path.dirname(full_path)  #se obtiene el directorio
    ####Carga de la configuracion####
    config = configuration.configuration(dirname + '/Resources/timantti.conf')
    options = config.configSection(
        'Database')  #se obtienen los valores del archivo de configuracion

    newDB = DB.databaseHandlerTable(
        options.get('host'), options.get('user'), options.get('pass'),
        options.get('db'), options.get('table')
    )  #crea la conexion a la base de datos leyendo los datos desde el archivo de configuracion

    handler = XGH.xmlGenericHandler(
        sys.argv[1])  #inicializa el handler de la base de datos

    newDB.dropTable()  #borra la tabla
    newDB.createTable()  #crea nuevamente la tabla

    tags = ("name", "url", "feed", "saveas", "savedb", "root", "primary_id",
            "tag")  #arma los tags para insertar en la tabla generica
    values = handler.getBody('site', tags)  #obtiene los datos del XML generico

    if len(values) != 1:  #En caso de que generic-handler.xml este vacio
        finish = False
        x = len(tags) - 1
        i = 0
        z = len(tags)

        while not finish:

            valor_bd = '(' + "'" + "','".join(
                values[i:z]
            ) + "'" + ')'  #arma la cadena para insertar los valores y el primer campo <tag>

            #print valor_bd

            newDB.insertItem(
                tags, valor_bd)  #inserta en la tabla hasta el primer <tag>
            x += 1
            if len(values) > len(tags):  #comprueba si hay mas de un tag
                while ((values[x] <> 'finarbol')):  #quedan mas tags
                    values_add = "','".join(values[i:z - 1])
                    valor_bd = '(' + "'" + (
                        values_add) + "','" + values[x] + "'" + ')'
                    #print valor_bd,'\n'
                    newDB.insertItem(
                        tags, valor_bd)  #inserta en la tabla el otro <tag>
                    x += 1
                if (values[x + 1] == 'finito'):
                    finish = True
                else:
                    i = x + 1
                    z = i + len(tags)
                    x = z - 1
            else:
                finish = True