def __init__(self, application_id, data, total_size=None, session_id=None, blob_id=None, is_file=False): if data is not None: if isinstance(data, str): if len(data) > 0: total_size = len(data) data = StringIO.StringIO(data) else: data = StringIO.StringIO() if total_size is None: data.seek(0, 2) # relative to the end total_size = data.tell() data.seek(0, 0) else: total_size = 0 self.data = data self.current_size = 0 self.total_size = total_size self.application_id = application_id if session_id is None: session_id = _generate_id() self.session_id = session_id self.id = blob_id or _generate_id() self.is_file = is_file
def change(self): filename = os.path.basename(self.options.change) self._data = file(self.options.change, 'r').read() msn_object = papyon.p2p.MSNObject( self.profile, len(self._data), papyon.p2p.MSNObjectType.DISPLAY_PICTURE, filename, "", data=StringIO.StringIO(self._data)) self.profile.msn_object = msn_object
def _parse(self, data): events = ("start", "end", "start-ns", "end-ns") ns = [] data = StringIO.StringIO(data) context = ElementTree.iterparse(data, events=events) for event, elem in context: if event == "start-ns": ns.append(elem) elif event == "end-ns": ns.pop() elif event == "start": elem.set("(xmlns)", tuple(ns)) data.close() return context.root
def SetAvatar(self, avatar, mime_type): self._avatar_known = True if not isinstance(avatar, str): avatar = "".join([chr(b) for b in avatar]) msn_object = papyon.p2p.MSNObject( self.msn_client.profile, len(avatar), papyon.p2p.MSNObjectType.DISPLAY_PICTURE, hashlib.sha1(avatar).hexdigest() + '.tmp', "", data=StringIO.StringIO(avatar)) self.msn_client.profile.msn_object = msn_object avatar_token = msn_object._data_sha.encode("hex") logger.info("Setting self avatar to %s" % avatar_token) return avatar_token
def parse(client, xml_data): data = StringIO.StringIO(xml_data) try: element = ElementTree.parse(data).getroot().attrib except: raise MSNObjectParseError(xml_data) creator = element["Creator"] size = int(element["Size"]) type = int(element["Type"]) if "Location" in element: location = xml.unescape(element["Location"]) else: location = "0" if "Friendly" in element: friendly = b64_decode(xml.unescape(element["Friendly"])) else: friendly = '\x00\x00' shad = element.get("SHA1D", None) if shad is not None: try: shad = b64_decode(shad) except TypeError: logger.warning("Invalid SHA1D in MSNObject: %s" % shad) shad = None shac = element.get("SHA1C", None) if shac is not None: try: shac = b64_decode(shac) except TypeError: logger.warning("Invalid SHA1C in MSNObject: %s" % shac) shac = None try: result = MSNObject(creator, size, type, location, friendly, shad, shac) result._repr = xml_data except ValueError: raise MSNObjectParseError(xml_data) return result
def decode_body(self): """Decodes body content using "Content-Encoding" header. As of now only 'gzip' encoding is supported. Also encodes the result string to UTF-8 if necessary. @note Only 'gzip' encoding is supported for now @raises HTTPParseError: if encoding is unknown""" encoding = self.headers.get("Content-Encoding", "") if encoding == "": body = self.body elif encoding == "gzip": body_stream = StringIO.StringIO(self.body) unzipper = gzip.GzipFile(fileobj=body_stream) body = unzipper.read() else: raise HTTPParseError("%s is not implemented" % encoding) type, charset = self.content_type if charset.lower() != "utf-8": body = body.decode(charset).encode("utf-8") return body
def parse(client, xml_data): data = StringIO.StringIO(xml_data) try: element = ElementTree.parse(data).getroot().attrib except: raise ParseError('Invalid MSNObject') creator = element["Creator"] size = int(element["Size"]) type = int(element["Type"]) location = xml.unescape(element["Location"]) friendly = base64.b64decode(xml.unescape(element["Friendly"])) shad = element.get("SHA1D", None) if shad is not None: shad = base64.b64decode(shad) shac = element.get("SHA1C", None) if shac is not None: shac = base64.b64decode(shac) result = MSNObject(creator, size, type, location, friendly, shad, shac) result._repr = xml_data return result
def _parse(self, data): data = StringIO.StringIO(data) return ElementTree.parse(data)