# coding: utf-8 import os import os.path import codecs import json import time #---------------------------------------------------------- class Database_cl(object): #---------------------------------------------------------- # alle Elemente werden zur Laufzeit des Servers zur Vereinfachung auch im # Hauptspeicher abgelegt # die nächste zu vergebende Id wird ebenfalls dauerhaft gespeichert # zur Vereinfachung wird hier fest vorgegebenen, dass sich die Daten # im Unterverzeichnis "data" befinden #------------------------------------------------------- def __init__(self): #------------------------------------------------------- self.data_o = {} self.readData_p() #------------------------------------------------------- def createTopic_px(self, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! id_ = self.nextTopicId_p() self.data_o['topics'][str(id_)] = data_opl file_o = codecs.open(os.path.join('data', 'topics.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['topics'])) file_o.close() return id_ #------------------------------------------------------- def createDiscussion_px(self, tId, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! id_ = self.nextDiscussionId_p() self.data_o['discussions'][id_] = data_opl self.data_o['topics'][tId]['discs'].append(id_) file_o = codecs.open(os.path.join('data', 'discussions.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['discussions'])) file_o.close() file_o = codecs.open(os.path.join('data', 'topics.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['topics'])) file_o.close() return id_ #------------------------------------------------------- def createPost_px(self, dId, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! id_ = self.nextPostId_p() self.data_o['posts'][id_] = data_opl self.data_o['discussions'][dId]['posts'].append(id_) file_o = codecs.open(os.path.join('data', 'posts.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['posts'])) file_o.close() file_o = codecs.open(os.path.join('data', 'discussions.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['discussions'])) file_o.close() return id_ #------------------------------------------------------- def readTopic_px(self, id_ = None): #------------------------------------------------------- # hier zur Vereinfachung: # Aufruf ohne id: alle Einträge liefern data_o = None if id_ == None: data_o = self.data_o['topics'] elif str(id_) == '0': data_o = self.getDefaultTopic_px() else: if str(id_) in self.data_o['topics']: data_o = self.data_o['topics'][str(id_)] return data_o #------------------------------------------------------- def readDiscussion_px(self, tId, dId = None): #------------------------------------------------------- # hier zur Vereinfachung: # Aufruf ohne id: alle Einträge liefern data_o = None if dId == None: data_o = {} discs = self.data_o['discussions'] indices = self.data_o['topics'][str(tId)]['discs'] for index in indices: data_o[index] = discs[index] elif str(dId) == '0': data_o = self.getDefaultDiscussion_px() else: if str(dId) in self.data_o['discussions']: data_o = self.data_o['discussions'][str(dId)] return data_o #------------------------------------------------------- def readPost_px(self, dId, pId = None): #------------------------------------------------------- # hier zur Vereinfachung: # Aufruf ohne id: alle Einträge liefern data_o = None if pId == None: data_o = {} posts = self.data_o['posts'] indices = self.data_o['discussions'][str(dId)]['posts'] for index in indices: data_o[index] = posts[index] elif str(pId) == '0': data_o = self.getDefaultPost_px() else: if str(pId) in self.data_o['posts']: data_o = self.data_o['posts'][str(pId)] return data_o #------------------------------------------------------- def updateTopic_px(self, id_, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! updated = False if id_ in self.data_o['topics']: for key in data_opl: self.data_o['topics'][id_][key] = data_opl[key] # Datei aktualisieren file_o = codecs.open(os.path.join('data', 'topics.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['topics'])) file_o.close() updated = True return updated #------------------------------------------------------- def updateDiscussion_px(self, id_, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! updated = False if id_ in self.data_o['discussions']: for key in data_opl: self.data_o['discussions'][id_][key] = data_opl[key] # Datei aktualisieren file_o = codecs.open(os.path.join('data', 'discussions.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['discussions'])) file_o.close() updated = True return updated #------------------------------------------------------- def updatePost_px(self, id_, data_opl): #------------------------------------------------------- # Überprüfung der Daten müsste ergänzt werden! updated = False if id_ in self.data_o['posts']: for key in data_opl: self.data_o['posts'][id_][key] = data_opl[key] # Datei aktualisieren file_o = codecs.open(os.path.join('data', 'posts.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['posts'])) file_o.close() updated = True return updated #------------------------------------------------------- def deleteTopic_px(self, id_): #------------------------------------------------------- deleted = False if id_ in self.data_o['topics']: self.data_o['topics'][id_]['deleted'] = True for key in self.data_o['topics'][id_]['discs']: del self.data_o['discussions'][key] self.data_o['topics'][id_]['discs'] = [] # Dateien aktualisieren file_o = codecs.open(os.path.join('data', 'topics.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['topics'])) file_o.close() file_o = codecs.open(os.path.join('data', 'discussions.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['discussions'])) file_o.close() deleted = True return deleted #------------------------------------------------------- def deleteDiscussion_px(self, id_): #------------------------------------------------------- deleted = False if id_ in self.data_o['discussions']: self.data_o['discussions'][id_]['deleted'] = True for key in self.data_o['discussions'][id_]['posts']: del self.data_o['posts'][key] self.data_o['discussions'][id_]['posts'] = [] # Dateien aktualisieren file_o = codecs.open(os.path.join('data', 'discussions.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['discussions'])) file_o.close() file_o = codecs.open(os.path.join('data', 'posts.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['posts'])) file_o.close() deleted = True return deleted #------------------------------------------------------- def deletePost_px(self, id_): #------------------------------------------------------- deleted = False if id_ in self.data_o['posts']: self.data_o['posts'][id_]['deleted'] = True # Datei aktualisieren file_o = codecs.open(os.path.join('data', 'posts.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['posts'])) file_o.close() deleted = True return deleted #------------------------------------------------------- def getDefaultTopic_px(self): #------------------------------------------------------- return { 'name' : '', 'owner': '', 'deleted': False, 'discs': [] } #------------------------------------------------------- def getDefaultDiscussion_px(self): #------------------------------------------------------- return { 'name' : '', 'owner': '', 'deleted': False, 'posts': [] } #------------------------------------------------------- def getDefaultPost_px(self): #------------------------------------------------------- return { 'title' : '', 'text' : '', 'owner': '', 'time': time.localtime(), 'deleted': False, } #------------------------------------------------------- def getUsers_px(self): #------------------------------------------------------- return self.data_o['users'] #------------------------------------------------------- def saveUsers_px(self, data_o): #------------------------------------------------------- file_o = codecs.open(os.path.join('data', 'users.dat'), 'w', 'utf-8') file_o.write(json.dumps(self.data_o['users'])) file_o.close() #------------------------------------------------------- def readData_p(self): #------------------------------------------------------- files_a = os.listdir('data') for fileName_s in files_a: if fileName_s.endswith('.dat'): file_o = codecs.open(os.path.join('data', fileName_s), 'rU', 'utf-8') content_s = file_o.read() file_o.close() id_s = fileName_s[:-4] self.data_o[id_s] = json.loads(content_s) #------------------------------------------------------- def nextTopicId_p(self): #------------------------------------------------------- id_ = str(self.data_o['topics']['nextID']) nextID = int(self.data_o['topics']['nextID']) self.data_o['topics']['nextID'] = str(nextID + 1) return id_ #------------------------------------------------------- def nextDiscussionId_p(self): #------------------------------------------------------- id_ = str(self.data_o['discussions']['nextID']) nextID = int(self.data_o['discussions']['nextID']) self.data_o['discussions']['nextID'] = str(nextID + 1) return id_ #------------------------------------------------------- def nextPostId_p(self): #------------------------------------------------------- id_ = str(self.data_o['posts']['nextID']) nextID = int(self.data_o['posts']['nextID']) self.data_o['posts']['nextID'] = str(nextID + 1) return id_ db_o = Database_cl() # EOF