- Timestamp:
- Dec 20, 2011, 9:17:05 AM (12 years ago)
- Branches:
- no-cups
- Children:
- c70a3c9
- Parents:
- 110d8be
- git-author:
- Jessica B. Hamrick <jhamrick@…> (12/20/11 09:17:05)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (12/20/11 09:17:05)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/ipp/value.py
rd04a689 r0c4f3bf 23 23 """ 24 24 25 def __init__(self, value_tag=None, value=None):25 def __init__(self, tag=None, value=None): 26 26 """Initialize a Value. There are three different ways you can 27 27 call this method: … … 29 29 Value() -- creates an empty Value instance 30 30 31 Value( value_tag, value) -- creates a Value instance from31 Value(tag, value) -- creates a Value instance from 32 32 a non-binary value 33 33 34 34 If you create an empty Value instance, once you have set 35 value_tag and value, you can retrieve the packed value from35 tag and value, you can retrieve the packed value from 36 36 the packed_value property. 37 37 38 38 Arguments: 39 39 40 value_tag -- one byte, identifying the type of value40 tag -- one byte, identifying the type of value 41 41 42 42 value -- variable size, containing the actual value. … … 47 47 # make sure the arguments are valid 48 48 if value is not None: 49 assert value_tag is not None, \50 " value_tag must not be null because " + \49 assert tag is not None, \ 50 "tag must not be null because " + \ 51 51 "value is not null!" 52 52 53 53 # initialize member variables 54 self. value_tag = value_tag # one byte, the type of value54 self.tag = tag # one byte, the type of value 55 55 self.value = value # non-binary value of self.value 56 56 57 57 @classmethod 58 def unpack(cls, value_tag, packed_value):58 def unpack(cls, tag, packed_value): 59 59 """Unpack a binary IPP value into a Value object. 60 60 61 61 """ 62 return cls( value_tag, cls._unpack(value_tag, packed_value))62 return cls(tag, cls._unpack(tag, packed_value)) 63 63 64 64 @staticmethod 65 def _unpack( value_tag, packed_value):66 """Given self. value_tag and self.packed_value, unpack the65 def _unpack(tag, packed_value): 66 """Given self.tag and self.packed_value, unpack the 67 67 binary value into either a string or number. These values 68 68 MUST NOT be null. … … 72 72 """ 73 73 74 assert value_tag is not None, \74 assert tag is not None, \ 75 75 "Cannot unpack values with unspecified value tag!" 76 76 assert packed_value is not None, \ … … 80 80 81 81 # out-of-band value tags 82 if value_tag == OutOfBandTags.UNSUPPORTED or \83 value_tag == OutOfBandTags.DEFAULT or \84 value_tag == OutOfBandTags.UNKNOWN or \85 value_tag == OutOfBandTags.NO_VALUE:82 if tag == OutOfBandTags.UNSUPPORTED or \ 83 tag == OutOfBandTags.DEFAULT or \ 84 tag == OutOfBandTags.UNKNOWN or \ 85 tag == OutOfBandTags.NO_VALUE: 86 86 value_size = 0 87 87 value = '' 88 88 89 89 # integer value tags 90 elif value_tag == IntegerTags.INTEGER:90 elif tag == IntegerTags.INTEGER: 91 91 value = struct.unpack('>i', packed_value)[0] 92 elif value_tag == IntegerTags.BOOLEAN:92 elif tag == IntegerTags.BOOLEAN: 93 93 value = struct.unpack('>b', packed_value)[0] 94 elif value_tag == IntegerTags.ENUM:94 elif tag == IntegerTags.ENUM: 95 95 value = struct.unpack('>i', packed_value)[0] 96 96 97 97 98 elif value_tag == OctetStringTags.DATETIME:98 elif tag == OctetStringTags.DATETIME: 99 99 # field octets contents range 100 100 # ----- ------ -------- ----- … … 113 113 value = struct.unpack('>hbbbbbbcbb', packed_value) 114 114 115 elif value_tag == OctetStringTags.RESOLUTION:115 elif tag == OctetStringTags.RESOLUTION: 116 116 # OCTET-STRING consisting of nine octets of 2 117 117 # SIGNED-INTEGERs followed by a SIGNED-BYTE. The first … … 123 123 value = struct.unpack('>iib', packed_value) 124 124 125 elif value_tag == OctetStringTags.RANGE_OF_INTEGER:125 elif tag == OctetStringTags.RANGE_OF_INTEGER: 126 126 # Eight octets consisting of 2 SIGNED-INTEGERs. The first 127 127 # SIGNED-INTEGER contains the lower bound and the second … … 130 130 value = struct.unpack('>ii', packed_value) 131 131 132 elif value_tag == OctetStringTags.TEXT_WITH_LANGUAGE or \133 value_tag == OctetStringTags.NAME_WITH_LANGUAGE:132 elif tag == OctetStringTags.TEXT_WITH_LANGUAGE or \ 133 tag == OctetStringTags.NAME_WITH_LANGUAGE: 134 134 a = struct.unpack('>h', packed_value[:2])[0] 135 135 b = struct.unpack('>%ss' % a, packed_value[2:a+2])[0] … … 139 139 140 140 # character string value tags 141 elif value_tag == \141 elif tag == \ 142 142 CharacterStringTags.TEXT_WITHOUT_LANGUAGE or \ 143 value_tag == \143 tag == \ 144 144 CharacterStringTags.NAME_WITHOUT_LANGUAGE: 145 145 value = str(packed_value) 146 elif value_tag == CharacterStringTags.GENERIC or \147 value_tag == CharacterStringTags.KEYWORD or \148 value_tag == CharacterStringTags.URI or \149 value_tag == CharacterStringTags.URI_SCHEME or \150 value_tag == CharacterStringTags.CHARSET or \151 value_tag == CharacterStringTags.NATURAL_LANGUAGE or \152 value_tag == CharacterStringTags.MIME_MEDIA_TYPE:146 elif tag == CharacterStringTags.GENERIC or \ 147 tag == CharacterStringTags.KEYWORD or \ 148 tag == CharacterStringTags.URI or \ 149 tag == CharacterStringTags.URI_SCHEME or \ 150 tag == CharacterStringTags.CHARSET or \ 151 tag == CharacterStringTags.NATURAL_LANGUAGE or \ 152 tag == CharacterStringTags.MIME_MEDIA_TYPE: 153 153 value = str(packed_value) 154 154 … … 162 162 @property 163 163 def packed_value(self): 164 """Given self. value_tag and self.value, pack the value into164 """Given self.tag and self.value, pack the value into 165 165 binary form. These values MUST NOT be null. 166 166 … … 169 169 """ 170 170 171 assert self. value_tag is not None, \171 assert self.tag is not None, \ 172 172 "cannot pack value with null value tag!" 173 173 assert self.value is not None, \ … … 177 177 178 178 # out-of-band value tags 179 if self. value_tag == OutOfBandTags.UNSUPPORTED or \180 self. value_tag == OutOfBandTags.DEFAULT or \181 self. value_tag == OutOfBandTags.UNKNOWN or \182 self. value_tag == OutOfBandTags.NO_VALUE:179 if self.tag == OutOfBandTags.UNSUPPORTED or \ 180 self.tag == OutOfBandTags.DEFAULT or \ 181 self.tag == OutOfBandTags.UNKNOWN or \ 182 self.tag == OutOfBandTags.NO_VALUE: 183 183 packed_value = '' 184 184 185 185 # integer value tags 186 elif self. value_tag == IntegerTags.INTEGER:186 elif self.tag == IntegerTags.INTEGER: 187 187 packed_value = struct.pack('>i', self.value) 188 elif self. value_tag == IntegerTags.BOOLEAN:188 elif self.tag == IntegerTags.BOOLEAN: 189 189 packed_value = struct.pack('>b', self.value) 190 elif self. value_tag == IntegerTags.ENUM:190 elif self.tag == IntegerTags.ENUM: 191 191 packed_value = struct.pack('>i', self.value) 192 192 193 193 # octet string value tags 194 elif self. value_tag == OctetStringTags.DATETIME:194 elif self.tag == OctetStringTags.DATETIME: 195 195 # field octets contents range 196 196 # ----- ------ -------- ----- … … 209 209 packed_value = struct.pack('>hbbbbbbcbb', *self.value) 210 210 211 elif self. value_tag == OctetStringTags.RESOLUTION:211 elif self.tag == OctetStringTags.RESOLUTION: 212 212 # OCTET-STRING consisting of nine octets of 2 213 213 # SIGNED-INTEGERs followed by a SIGNED-BYTE. The first … … 219 219 packed_value = truct.pack('>iib', *self.value) 220 220 221 elif self. value_tag == OctetStringTags.RANGE_OF_INTEGER:221 elif self.tag == OctetStringTags.RANGE_OF_INTEGER: 222 222 # Eight octets consisting of 2 SIGNED-INTEGERs. The first 223 223 # SIGNED-INTEGER contains the lower bound and the second … … 226 226 packed_value = struct.pack('>ii', *self.value) 227 227 228 elif self. value_tag == OctetStringTags.TEXT_WITH_LANGUAGE or \229 self. value_tag == OctetStringTags.NAME_WITH_LANGUAGE:228 elif self.tag == OctetStringTags.TEXT_WITH_LANGUAGE or \ 229 self.tag == OctetStringTags.NAME_WITH_LANGUAGE: 230 230 231 231 a_bin = struct.pack('>h', self.value[0]) … … 237 237 238 238 # character string value tags 239 elif self. value_tag == \239 elif self.tag == \ 240 240 CharacterStringTags.TEXT_WITHOUT_LANGUAGE or \ 241 self. value_tag == \241 self.tag == \ 242 242 CharacterStringTags.NAME_WITHOUT_LANGUAGE: 243 243 … … 245 245 self.value) 246 246 247 elif self. value_tag == CharacterStringTags.GENERIC or \248 self. value_tag == CharacterStringTags.KEYWORD or \249 self. value_tag == CharacterStringTags.URI or \250 self. value_tag == CharacterStringTags.URI_SCHEME or \251 self. value_tag == CharacterStringTags.CHARSET or \252 self. value_tag == CharacterStringTags.NATURAL_LANGUAGE or \253 self. value_tag == CharacterStringTags.MIME_MEDIA_TYPE:247 elif self.tag == CharacterStringTags.GENERIC or \ 248 self.tag == CharacterStringTags.KEYWORD or \ 249 self.tag == CharacterStringTags.URI or \ 250 self.tag == CharacterStringTags.URI_SCHEME or \ 251 self.tag == CharacterStringTags.CHARSET or \ 252 self.tag == CharacterStringTags.NATURAL_LANGUAGE or \ 253 self.tag == CharacterStringTags.MIME_MEDIA_TYPE: 254 254 255 255 packed_value = struct.pack('>%ss' % len(self.value), … … 265 265 """Replace a value using a new packed value 266 266 267 Unpacks a new packed_value (of the same value_tag).268 269 """ 270 self.value = self._unpack(self. value_tag, packed_value)267 Unpacks a new packed_value (of the same tag). 268 269 """ 270 self.value = self._unpack(self.tag, packed_value) 271 271 272 272 @property … … 287 287 return self.packed_value_size + 1 288 288 289 @property 290 def pyobj(self): 291 return (self.tag, self.value) 292 289 293 def __str__(self): 290 294 return str(self.value) 291 295 292 296 def __repr__(self): 293 return '<IPPValue (%x, %r)>' % (self. value_tag, self.value)297 return '<IPPValue (%x, %r)>' % (self.tag, self.value)
Note: See TracChangeset
for help on using the changeset viewer.