# -------------------------------------------------------------
# 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)
# 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,"\"")
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")