Changeset c269bc7 for server/lib/ippattribute.py
- Timestamp:
- Mar 7, 2011, 7:47:42 PM (14 years ago)
- Branches:
- no-cups
- Children:
- fa0d0ef
- Parents:
- 5cfb358
- git-author:
- Jessica B. Hamrick <jhamrick@…> (03/07/11 19:47:42)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (03/07/11 19:47:42)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/ippattribute.py
rebf327d rc269bc7 40 40 """ 41 41 42 def __init__(self, name, values): 43 """ 44 Initialize an Attribute. 42 def __init__(self, name=None, values=[]): 43 """ 44 Initialize an Attribute. This function can be called in three 45 different ways: 46 47 Attribute() -- creates an empty Attribute 48 49 Attribute(name) -- creates an empty Attribute with a name 50 51 Attribute(name, values) -- creates an Attribute 52 initialized with a name and list of values 45 53 46 54 Arguments: … … 51 59 """ 52 60 53 # make sure name isn't empty 54 assert name is not None 55 56 # make sure the list of values isn't empty 57 assert len(values) > 0 58 # make sure each value is a Value 59 for value in values: assert isinstance(value, Value) 60 61 self.name = name 62 self.values = values 63 64 def toBinaryData(self): 61 if name is not None: 62 assert isinstance(name, str), \ 63 "Attribute name must be a string!" 64 for value in values: 65 assert isinstance(value, Value), \ 66 "Value must be of type Value" 67 68 self.name = None 69 self.values = None 70 71 if name is not None: 72 self.name = name 73 if name is not None and len(values) > 0: 74 self.values = values 75 self.binary = self.pack() 76 self.verify() 77 78 def pack(self): 65 79 """ 66 80 Packs the attribute data into binary data. 67 81 """ 82 83 assert self.name is not None, \ 84 "cannot pack unnamed attribute!" 85 assert len(self.values) > 0, \ 86 "cannot pack empty attribute!" 68 87 69 88 # get the binary data for all the values 70 89 values = [] 90 length = 0 71 91 for v, i in zip(self.values, xrange(len(self.values))): 72 92 … … 79 99 80 100 # get the value length and binary value 81 value_length, value_bin = v. valueToBinary()101 value_length, value_bin = v.pack() 82 102 83 103 logger.debug("dumping name_length : %i" % name_length) 84 104 logger.debug("dumping name : %s" % self.name) 85 105 logger.debug("dumping value_length : %i" % value_length) 86 logger.debug("dumping value : %s" % v. value)106 logger.debug("dumping value : %s" % v.getValue()) 87 107 88 108 # the value tag in binary 89 value_tag_bin = struct.pack('>b', v. value_tag)109 value_tag_bin = struct.pack('>b', v.getValueTag()) 90 110 91 111 # the name length in binary … … 109 129 value_length_bin, 110 130 value_bin])) 131 132 length += 2 # name-length 133 length += name_length # name 134 length += value_length # value 111 135 112 # concatenate everything together and return it 113 return ''.join(values) 136 # concatenate everything together and return it along with the 137 # total length of the attribute 138 return length, ''.join(values) 139 140 def getName(self): 141 """ 142 Get the attribute's name. 143 """ 144 145 return self.name 146 147 def getValues(self): 148 """ 149 Get the list of values contained in the attribute. 150 """ 151 152 return self.values 153 154 def setName(self, name): 155 """ 156 Set the attribute's name. 157 """ 158 159 assert isinstance(name, str), \ 160 "name must be a string!" 161 162 self.name = name 163 164 def setValues(self, values): 165 """ 166 Set the list of values contained in the attribute. 167 """ 168 169 for v in values: 170 assert isinstance(v, Value), \ 171 "value must be of type Value!" 172 173 self.values = values 174 175 def addValue(self, value): 176 """ 177 Add a new value to the list of values contained in the 178 attribute." 179 180 assert isinstance(value, Value), \ 181 "value must be of type Value!" 182 183 self.values.append(value) 184 185 def getSize(self): 186 """ 187 Gets the total size of the attribute. 188 """ 189 190 size = 2 + len(self.name) 191 for v in self.values: 192 size += v.getTotalSize() 193 194 def verify(self): 195 """ 196 Check to make sure that the Attribute is valid. This means 197 that is should have a name and a list of values, and that its 198 binary representation should match up to the stored binary 199 representation. 200 """ 201 202 assert self.name is not None, \ 203 "attribute has no name!" 204 assert len(self.value) > 0, \ 205 "attribute has no values!" 206 207 size, bindata = self.pack() 208 209 assert size == self.getSize(), \ 210 "pack size does not match self.getSize()!" 211 assert bindata == self.binary_data, \ 212 "packed binary data does not match self.binary_data!" 213 214 def __str__(self): 215 if len(self.values) > 0: 216 values = [str(v) for v in self.values] 217 else: 218 values = "None" 219 220 if self.name is None: 221 name = "None" 222 else: 223 name = self.name 224 225 return "%s: %s" % (name, str(values))
Note: See TracChangeset
for help on using the changeset viewer.