E.6.5 Paket Maintenance (p_maintenance.py)

# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1997
#
# Dateiname : p_maintenance.py
# Datum : 03.11.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Paket Maintenance, fasst alle Maintenance-Paket
# Klassen zusammen
#
# Anmerkungen :
#
# -------------------------------------------------------------
import c_maintenance
import c_glimpindex
 
Klasse c_maintenace
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1998
# Dateiname : c_maintenance.py
# Datum : 09.12.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Diese Klasse realisiert ein paar Methoden
# zur Pflege des Systems
# Anmerkungen :
# -------------------------------------------------------------
 
#imports
from sc_globals import *
import pgpy
 
 
class c_maintenance:
    #
    # Reorganisert die Postgresdatenbank
    #
    def vacuum(self):
        self.conn=pgpy.pgconn(DL_PGHOST,DL_PGPORT,DL_DBNAME)
        res=self.conn.exec_query("vacuum;")
        erg=res.commandstatus()
        if str(erg)[0:6]!="VACUUM":
            return -1
        else:
            return 0
                 
    #
    # loescht ein als Bitstrom gespeichertes Dokument
    #
    def delete_bs(self,ident):
        import os
        os.system("rm "+"-f "+DL_BSOUTPATH+str(ident)+".bs")
        conn=pgpy.pgconn(DL_PGHOST,DL_PGPORT,DL_DBNAME)
        res=self.conn.exec_query(
            "update doc_description set bs_stored='f' where docnr="+
            str(ident)+";")
        erg=res.commandstatus()
        if str(erg)[0:6]!="UPDATE":
            return -1
        else:
            return 0
                     
 
    #
    # loescht ein Dokument aus dem Speicher
    #
    def delete_doc(self,ident):
        # erstmal als Bitstrom loeschen
        self.delete_bs(ident)
        # dann die Datenbank leeren
        conn=pgpy.pgconn(DL_PGHOST,DL_PGPORT,DL_DBNAME)
        res=self.conn.exec_query(
            "delete from doc_elements* where docnr=" + str(ident)+";")
        res=self.conn.exec_query(
            "delete from doc_methods where docnr=" + str(ident)+";")
        res=self.conn.exec_query(
            "update doc_description set sgml_stored='f' where docnr="+
            str(ident)+";")
        erg=res.commandstatus()
        if str(erg)[0:6]!="UPDATE":
            return -1
        else:
            return 0
 
         
    #
    # fuehrt ein SQL Statement auf der Datenbank aus
    #
    def sql_exec(self,querystr):
        conn=pgpy.pgconn(DL_PGHOST,DL_PGPORT,DL_DBNAME)
        res=self.conn.exec_query(querystr)
         # Fehler aufgetreten ?
        if res.get_tuple_count()==0:
            # wenn ja, -1 zurueckgeben
            return -1
        else:
            #wenn nein Ergebnis zurueckgeben
            erg=res.get_resultlist(1,"|",1,0)
            return erg
 
        return erg
    #
    # Reinitialisiert die Datenbank
    # VORSICHT alle gespeicherten Daten gehen verloren
    #
    def dali_reinit(self):
        import time
 
        print "-------------------------------------------------------"
        print "Sie sind dabei die komplette DALI Datenbank zu loeschen."
        print ""
        print " Ich warte jetzt mal 20 Sekunden, wenn Sie es sich anders"
        print ""
        print "ueberlegt haben, sollten sie ein paarmal CTRL-C druecken."
        print "--------------------------------------------------------"
        time.sleep(20)
 
        # Verbindung zu Postgres aufbauen
        conn=pgpy.pgconn(DL_PGHOST,DL_PGPORT,DL_DBNAME)
         
        # Alle Klassen entfernen
        res=self.conn.exec_query("drop table doc_description;")
        res=self.conn.exec_query("drop table doc_elements;")
        res=self.conn.exec_query("drop table doc_bin;")
        res=self.conn.exec_query("drop table doc_tags;")
        res=self.conn.exec_query("drop table doc_text;")
        res=self.conn.exec_query("drop table doc_methods;")
        res=self.conn.exec_query("drop table dtd;")
        res=self.conn.exec_query("drop table local_doc_ids;")
         
        # neue leere Klassen erzeugen
        res=self.conn.exec_query("CREATE TABLE local_doc_ids (docnr int4, dtdnr int4) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_elements (docnr int4, elementnr int4, brother int4, son int4, contents text) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE dtd (dtdnr int4, dtdid text,publicname text, systemname text) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_tags () inherits ( doc_elements) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_text () inherits ( doc_elements) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_bin () inherits ( doc_elements) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_description (docnr int4, dtdnr int4, title text, author text, owner text, ident text, pubkey text, info text, metadtdnr int4, bs_stored bool, sgml_stored bool) archive = none;")
         
        res=self.conn.exec_query("CREATE TABLE doc_methods (docnr int4, meth_class text, meth_location text, meth_mimetype text) archive = none;")
         
        # Initialen Zaehlerstand einfuegen
        res=self.conn.exec_query("INSERT INTO local_doc_ids VALUES (100,1);")
 
        self.read_sgmlcat(self)
    #
    # traegt alle auf dem System verfuegbaren DTD's in die
    # DTD Klasse der Datenbnak ein
    #
    def read_sgmlcat(self):
        import c_bsio
        import class_funcs
        import string
         
        fname=DL_SGMLCATPATH+DL_SGMLCATNAME
        fd=c_bsio.c_bsio(fname,"r")
        fd.open()
        buff=" "
        while buff!="":
            buff=fd.readline()
            if buff[0:6]=="PUBLIC":
                newdtdid=class_funcs.get_newdtdid()
                publictup=string.split(buff,"\"")
                 
                dtdid=string.strip(publictup[2])
                publicname=string.strip(publictup[1])
                systemname=DL_SGMLCATPATH+dtdid
                 
                query="insert into dtd values ("+str(newdtdid)+","
                query=query+"'"+dtdid+"',"
                query=query+"'"+publicname+"',"
                query=query+"'"+systemname+"');"
 
                res=conn.exec_query(query)
                if res.commandstatus()[0:6]!="INSERT":
                    print "Fehler bei INSERT in c_maintenance.read_sgmlcat"
 
        fd.close()
 
Klasse c_glimpindex
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1997
#
# Dateiname : c_glimpindex.py
# Datum : 03.11.1997
# letzte Änderung :
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Klasse für den Zugriff auf glimpseindex
# Anmerkungen :
# -------------------------------------------------------------
 
class c_glimp_index:
    #
    # Konstruktor
    #
    def __init__(self):
        from sc_globals import *
        # setzen des Pfades in dem alle als
        # Bitstrom gespeicherten Dokumente liegen
        self.dir=DL_FULLTEXT_DIR
    #
    # Loescht die von glimpse erstellten Indizes
    #
    def remove_index(self):
        import os
        try:
            # loesche Index Files
            os.unlink(self.dir+".glimpse_*")
        except:
            # da waren wohl gar keine da
            pass
    #
    # Erstellt einen neuen Index fuer das
    # Bistromverzeichnis
    #
    def build_index(self):
        import os
        os.system("glimpseindex -f -H "+self.dir+" "+self.dir+" >/dev/null")