예제 #1
0
    def doRemoveRow(self, table_name, guid):
        def _get_guid_cb(rows):
            if len(rows) == 0:
                notFound(self.request,
                         "Table %s does not have row with GUID: %s"
                         % (self.table_name,
                            self._query["GUID"][1].encode("hex")))
            elif len(rows) > 1:
                msg = "Multiple rows returned (unexpectedly) by the "\
                        "database and possibly removed."
                lg.error(msg)
                webservice.internalError(request, msg)
            else:
                d = StorageTableUtil.get_connection_if_none(self.db)
                d.addCallback(_do_remove, rows[0])
                return d

        def _do_remove(conn, row):
            d = conn.remove(table_name, row)
            d.addCallback(_remove_cb)
            return d

        def _remove_cb(res):
            if res[0] != Storage.SUCCESS:
                msg = "Remove failed: %s (%s)" %(res[0], res[1])
                lg.error(msg)
                webservice.internalError(msg)

        query = { "GUID" : guid }
        d = StorageTableUtil.get_all_rows_for_query(self.db, table_name, query)
        d.addCallback(_get_guid_cb)
        d.addErrback(self._handle_err)
        return d
예제 #2
0
 def doGet(self, table_name, query=None):
     def _process_storage_rows(rows):
         if (len(rows) == 0 and len(query) == 1
                 and query.has_key("GUID")):
             notFound(self.request,
                     "Table %s does not have row with GUID: %s" 
                     %(self.table_name,
                     self._query["GUID"][1].encode("hex")))
         else:
             self.request.write('{"table_name" : "' + table_name + '"')
             self.request.write(', "identifier" : "GUID", "items" : [')
             i = 0
             for row in rows:
                 ui_guid = (row["GUID"][1]).encode("hex")
                 row["GUID"] = ui_guid
                 row["GUID.link"] = u"/ws.v1/storage/%s/table/%s/%s" \
                         %(self.schema.dbname, table_name, ui_guid)
                 self.request.write(simplejson.dumps(row))
                 i += 1
                 if i < len(rows):
                     self.request.write(",")
             self.request.write("]}")
             self.request.finish()
         return
     query = query or {}
     d = StorageTableUtil.get_all_rows_for_query(self.db, table_name, query)
     d.addCallback(_process_storage_rows)
     return d