From 67c7dbdd19afcc17816e43ff66873e76101704a5 Mon Sep 17 00:00:00 2001 From: ngharo Date: Thu, 28 Dec 2017 00:48:34 -0600 Subject: Got CRU part of CRUD working decently --- server/button.py | 90 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 24 deletions(-) (limited to 'server/button.py') diff --git a/server/button.py b/server/button.py index 8530768..a5b52b8 100644 --- a/server/button.py +++ b/server/button.py @@ -4,38 +4,80 @@ import json from lib import uuid from lib import database -@cherrypy.expose -class Button(object): - STATUS_INVENTORY = 0 - STATUS_ACTIVE = 1 - STATUS_INACTIVE = 2 - STATUS_SUSPENDED = 3 - STATUS_DEAD = 4 +STATUS_INVENTORY = 0 +STATUS_ACTIVE = 1 +STATUS_INACTIVE = 2 +STATUS_SUSPENDED = 3 +STATUS_DEAD = 4 + +def loadAll(): + db = database.connect() + db.execute("SELECT id,status FROM buttons") + + results = [] + while True: + try: + button = Button() + button.loadFromDb(db.fetchone()) + results.append(button.toDict()) + except: + break + return results + +class Button(object): def __init__(self): + self.persisted = False self.id = None - self.status = 0 + self.status = STATUS_INVENTORY + + def toDict(self): + return { + 'id': self.id, + 'status': self.status + } - def GET(self, id): - if not uuid.validate(id): - return cherrypy.HTTPError(404) + def toJSON(self): + return json.dumps(self.toDict()) + def loadById(self, id): db = database.connect() db.execute("SELECT id,status FROM buttons WHERE id = ?" , (str(id),)) - return db.fetchone() -# return json.dumps({ -# 'id': self.id, -# 'status': self.status -# }) - def POST(self): - return 'POST BIUTTON' + return self.loadFromDb(db.fetchone()) + + def loadFromDb(self, dbrs): + if dbrs is None: + raise cherrypy.HTTPError(404, 'Button not found') + + self.persisted = True + self.id, self.status = dbrs + + return self + + def save(self): + cherrypy.log('SAVE {} -> {} (persisted: {})'.format( + self.id, self.status, self.persisted + )) + db = database.connect() + + # validate + if self.id is None: + raise cherrypy.HTTPError(500, "What u doin?") - def PUT(self, id): - if uuid.validate(id): - return self.GET(id) + # upsert: update + elif self.persisted: + cherrypy.log("setting other status to " + str(self.status)) + db.execute("UPDATE buttons SET status = ? WHERE id = ?", + (int(self.status), str(self.id),) + ) - raise cherrypy.HTTPError(400, 'Invalid UUID') + # upsert: insert + else: + cherrypy.log('INSERT {} -> {} (persisted: {})'.format( + self.id, self.status, self.persisted + )) + db.execute("INSERT INTO buttons VALUES (?, ?)", (self.id, self.status)) - def DELETE(self): - return 'DELETE BUTTON' + db.connection.commit() + return self -- cgit v1.2.3