示例#1
0
class Database:
    ''' Clase manejadora de operaciones con una base de datos/catalogo. '''
    
    def __init__(self,rutaBD):
        u''' Costructor de la clase. '''
        self.__pathBD = rutaBD
        self.__Busqueda = Busqueda()
        
        self.bd = sqlite.sqlite(self.__pathBD)

###############
# METODOS BD  #
###############

    def getPathBD(self):
        u''' Obtiene la ruta de la base de datos en uso. '''
        return self.__pathBD

    def getLenguajes(self):
        u''' Obtiene los lenguajes para la actual BD. '''
        resultado = self.bd.realizarConsulta('SELECT DISTINCT language FROM snippet ORDER BY language')
        return resultado

    def getLengAndTitles(self, consulta=None, favorito = None, tagsPresicion = None):
        u''' Obtiene los snippets por lenguajes de la actual BD.
        
            @return: una lista de tuplas con este formato (lenguaje,titulo)'''
        
        #por defecto busca los que no son favoritos
        if not consulta and not favorito:
            resultado = self.bd.realizarConsulta('''SELECT language,title 
                                                FROM snippet  
                                                ORDER BY language,title ''')
        else:
            #si no se pasa este parametro
            if favorito is None: 
                favorito = 0
            if tagsPresicion is None:
                tagsPresicion = False
            #genera un sql con la busqueda segun la consulta recibida
            consulta = self.__Busqueda.generarConsulta(consulta, int(favorito), tagsPresicion)
            #obtiene los resultados de la consulta
            resultado = self.realizarConsulta(consulta)
        return resultado

    def getAllSnippets(self):
        u''' Obtiene todos los snippets de la base de datos. '''
        resultado = self.bd.realizarConsulta('''SELECT title,language,tags,contens,
                                                    description,creation,reference,
                                                    modified,uploader,starred
                                            FROM snippet
                                            ORDER BY language,title''')
        return resultado

    def getSnippet(self, lenguaje, titulo):
        u''' Obtiene un snippet por su lenguaje y titulo correspondiente. '''
        resultado = self.bd.getDatosColumnas("snippet",criterios = {'language':lenguaje,'title':titulo})
        return self.__convertirASnippet(resultado)

    def getSnippetsCount(self):
        u''' Obtiene la cantidad de snippets cargados en la actual bd. '''
        cantidad = self.realizarConsulta('SELECT count(*) FROM snippet')
        return int(cantidad[0][0])

    def realizarConsulta(self,consulta):
        return self.bd.realizarConsulta(consulta)

################################
# METODOS PARA MANEJAR SNIPPET #
################################

    def agregarSnippet(self, datosSnippet):
        u''' Agrega un nuevo Snippet a la base de datos. 
        datosSnippet = diccionario con los datos del snippet a agregar.'''

        # TODO: agregar los try-catch para contemplar:
        # º snippet repetido
        # º error al agregar un snippet

        #genera los sig de preguntas segun la cantidad de campos recibidos
        sp = str('('+'?,'*len(datosSnippet))[:-1] + ')'
        #genera un string con los nombre de los campos
        campos = '('+','.join(datosSnippet.keys())+')'
        #se convierten los campos a unicode/utf8
        valores = []
        for valor in datosSnippet.values():
            valores.append(valor)#.encode('ascii','utf-8'))        
        try:
            return self.bd.realizarAlta("snippet", datosSnippet) , None
        except Exception, msg:
            print 'agregarSnippet >> ',str(msg)
            return False, str(msg)
示例#2
0
class Database:
    ''' Clase manejadora de operaciones con una base de datos/catalogo. '''
    
    def __init__(self,rutaBD, database_name):
        u''' Costructor de la clase. '''
        self.__pathBD = rutaBD
        self.__Busqueda = Busqueda()
        self.bd = couchdb.Server(rutaBD)[database_name]
        
###############
# METODOS BD  #
###############

    def getPathBD(self):
        u''' Obtiene la ruta de la base de datos en uso. '''
        return self.__pathBD

    def getLenguajes(self):
        u''' Obtiene los lenguajes para la actual BD. '''
        resultado = self.bd.query("""
            function (doc) {
                if (doc.doc_type == 'snippet') {
                    emit(doc.language, null);
        };}""")
        return list(tuple([doc['key'] for doc in resultado]))

    def getLengAndTitles(self, consulta=None, favorito = None, tagsPresicion = None):
        u''' Obtiene los snippets por lenguajes de la actual BD.
            
            @return: lista de tuplas con este formato: (lenguaje,titulo)'''
        #por defecto busca los que no son favoritoss
        if not consulta and not favorito:
            resultado = self.bd.query('''
                function (doc) {
                    if (doc.doc_type == 'snippet') {
                        emit([doc.language, doc.title]);
                };}''')
            return [doc['key'] for doc in resultado]
        else:
            #si no se pasa este parametro
            if favorito is None: 
                favorito = 0
            if tagsPresicion is None:
                tagsPresicion = False
            #genera un sql con la busqueda segun la consulta recibida
            consulta = self.__Busqueda.generarConsulta(consulta, int(favorito), tagsPresicion)
            #obtiene los resultados de la consulta
            resultado = self.bd.query(consulta)
            return [(doc['key'],doc['value']) for doc in resultado]

    def getAllSnippets(self):
        u''' Obtiene todos los snippets de la base de datos. '''
        orden = ['title','language','tags','code','description','creation','modified','uploader','starred','reference']
        resultado = self.bd.query("""
            function (doc) {
                if (doc.doc_type == 'snippet') {
                    emit(doc.title, doc);
        };}""")
        self.cant_snippets = len(resultado)
        return [doc['value'] for doc in resultado]

    def getSnippet(self, lenguaje, titulo):
        u''' Obtiene un snippet por su lenguaje y titulo correspondiente. '''
        resultado = self.bd.getDatosColumnas("snippet",criterios = {'language':lenguaje,'title':titulo})
        return self.__convertirASnippet(resultado)

    def getSnippetsCount(self):
        u''' Obtiene la cantidad de snippets cargados en la actual bd. '''
        resultado = self.bd.query('''
            function (doc) {
               if (doc.doc_type == 'snippet') {
                 emit(null, doc.title);
            };}''')
        return len([doc for doc in resultado])

    def realizarConsulta(self,consulta):
        return []

################################
# METODOS PARA MANEJAR SNIPPET #
################################

    def agregarSnippet(self, datosSnippet):
        u''' Agrega un nuevo Snippet a la base de datos. 
        datosSnippet = diccionario con los datos del snippet a agregar.'''
        try:
            from uuid import uuid4
            doc_id = uuid4().hex
            datosSnippet['doc_type'] = 'snippet'
            self.bd[doc_id] = datosSnippet 
            return True, ''
        except Exception, msg:
            return False, str(msg)