From: Jordan Augé Date: Wed, 10 Jul 2013 15:34:10 +0000 (+0200) Subject: added missing ResultValue class X-Git-Tag: myslice-0.2-1~95 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=307d273defd24a236655885222f3d3f0561d48b7 added missing ResultValue class --- diff --git a/manifold/core/result_value.py b/manifold/core/result_value.py new file mode 100644 index 00000000..9eb7a937 --- /dev/null +++ b/manifold/core/result_value.py @@ -0,0 +1,248 @@ +# Inspired from GENI error codes + +import time + +class ResultValue(dict): + + # type + SUCCESS = 0 + WARNING = 1 + ERROR = 2 + + # origin + CORE = 0 + GATEWAY = 1 + + # code + SUCCESS = 0 + SERVERBUSY = 32001 + BADARGS = 1 + ERROR = 2 + FORBIDDEN = 3 + BADVERSION = 4 + SERVERERROR = 5 + TOOBIG = 6 + REFUSED = 7 + TIMEDOUT = 8 + DBERROR = 9 + RPCERROR = 10 + + # description + ERRSTR = { + SUCCESS : 'Success', + SERVERBUSY : 'Server is (temporarily) too busy; try again later', + BADARGS : 'Bad Arguments: malformed', + ERROR : 'Error (other)', + FORBIDDEN : 'Operation Forbidden: eg supplied credentials do not provide sufficient privileges (on the given slice)', + BADVERSION : 'Bad Version (eg of RSpec)', + SERVERERROR : 'Server Error', + TOOBIG : 'Too Big (eg request RSpec)', + REFUSED : 'Operation Refused', + TIMEDOUT : 'Operation Timed Out', + DBERROR : 'Database Error', + RPCERROR : '' + } + + ALLOWED_FIELDS = set(['origin', 'type', 'code', 'value', 'description', 'traceback', 'ts']) + + def __init__(self, **kwargs): + + print "KWARGS=", kwargs + # Checks + given = set(kwargs.keys()) + print "given=", given + cstr_success = set(['code', 'origin', 'value']) <= given + cstr_error = set(['code', 'type', 'origin', 'description']) <= given + assert given <= self.ALLOWED_FIELDS, "Wrong fields in ResultValue constructor: %r" % (given - self.ALLOWED_FIELDS) + assert cstr_success or cstr_error, 'Incomplete set of fields in ResultValue constructor: %r' % given + + dict.__init__(self, **kwargs) + + # Set missing fields to None + for field in self.ALLOWED_FIELDS - given: + self[field] = None + if not 'ts' in self: + self['ts'] = time.time() + + + # Internal MySlice errors : return ERROR + # Internal MySlice warnings : return RESULT WITH WARNINGS + # Debug : add DEBUG INFORMATION + # Gateway errors : return RESULT WITH WARNING + # all Gateways errors : return ERROR + + @classmethod + def get_result_value(self, results, result_value_array): + # let's analyze the results of the query plan + # XXX we should inspect all errors to determine whether to return a + # result or not + if not result_value_array: + # No error + return ResultValue(code=self.SUCCESS, origin=[self.CORE, 0], value=results) + else: + # Handle errors + return ResultValue(code=self.WARNING, origin=[self.CORE, 0], description=result_value_array, value=results) + + @classmethod + def get_error(self, error): + return ResultValue(code=error, origin=[self.CORE, 0], value=self.ERRSTR[error]) + + @classmethod + def get_success(self, result): + return ResultValue(code=self.SUCCESS, origin=[self.CORE, 0], value=result) + + def ok_value(self): + return self['value'] + +# 67 +# 68 9 +# 69 +# 70 Database Error +# 71 +# 72 +# 73 10 +# 74 +# 75 RPC Error +# 76 +# 77 +# 78 11 +# 79 +# 80 Unavailable (eg server in lockdown) +# 81 +# 82 +# 83 12 +# 84 +# 85 Search Failed (eg for slice) +# 86 +# 87 +# 88 13 +# 89 +# 90 Operation Unsupported +# 91 +# 92 +# 93 14 +# 94 +# 95 Busy (resource, slice, or server); try again +# later +# 96 +# 97 +# 98 15 +# 99 +# 100 Expired (eg slice) +# 101 +# 102 +# 103 16 +# 104 +# 105 In Progress +# 106 +# 107 +# 108 17 +# 109 +# 110 Already Exists (eg slice) +# 111 +# 112 +# 114 +# 115 18 +# 116 +# 117 Required argument(s) missing +# 118 +# 119 +# 120 19 +# 121 +# 122 Input Argument outside of legal range +# 123 +# 124 +# 125 20 +# 126 +# 127 Not authorized: Supplied credential is +# invalid +# 128 +# 129 +# 130 21 +# 131 +# 132 Not authorized: Supplied credential expired +# 133 +# 134 +# 135 22 +# 136 +# 137 Not authorized: Supplied credential does not match client +# certificate or does not match the given slice URN +# 138 +# 139 +# 140 23 +# 141 +# 142 Not authorized: Supplied credential not signed by a trusted +# authority +# 143 +# 144 +# 145 24 +# 146 +# 147 VLAN tag(s) requested not available (likely stitching +# failure) +# 148 +# 149 +# 150 +#