Exemplo n.º 1
0
    def testCreateRequest(self):
        """
        Tests the OneLogin_Saml2_Authn_Request Constructor.
        The creation of a deflated SAML Request
        """

        saml_settings = self.loadSettingsJSON()
        settings = OneLogin_Saml2_Settings(saml_settings)
        settings._OneLogin_Saml2_Settings__organization = {
            u'en-US': {
                u'url': u'http://sp.example.com',
                u'name': u'sp_test'
            }
        }

        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertNotIn('ProviderName="SP test"', inflated)

        saml_settings['organization'] = {}
        settings = OneLogin_Saml2_Settings(saml_settings)

        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertNotIn('ProviderName="SP test"', inflated)
Exemplo n.º 2
0
 def __synchronizeEventNotifications(self, diff):
     diffDict = {'added': [],
      'removed': []}
     if diff is None:
         return
     else:
         initialEventsData = diff.get(('eventsData', '_r'), {})
         initial = initialEventsData.pop(EVENT_CLIENT_DATA.NOTIFICATIONS, None)
         initialEventsData.pop(EVENT_CLIENT_DATA.NOTIFICATIONS_REV, None)
         if initial is not None:
             initial = cPickle.loads(zlib.decompress(initial))
             self.eventNotifications = g_accountRepository.eventNotifications = initial
             diffDict['added'].extend(initial)
         updatedEventsData = diff.get('eventsData', {})
         updated = updatedEventsData.pop(EVENT_CLIENT_DATA.NOTIFICATIONS, None)
         updatedEventsData.pop(EVENT_CLIENT_DATA.NOTIFICATIONS_REV, None)
         if updated is not None:
             updated = cPickle.loads(zlib.decompress(updated))
             eventNotifications = self.eventNotifications
             self.eventNotifications = g_accountRepository.eventNotifications = updated
             new = set([ NotificationItem(n) for n in updated ])
             prev = set([ NotificationItem(n) for n in eventNotifications ])
             added = new - prev
             removed = prev - new
             diffDict['added'].extend([ n.item for n in added ])
             diffDict['removed'].extend([ n.item for n in removed ])
         if initial is not None or updated is not None:
             events.onEventNotificationsChanged(diffDict)
             LOG_DZ('Account.__synchronizeEventNotifications, diff=%s' % (diffDict,))
         return
Exemplo n.º 3
0
    def node_load (self, desc):
        """Load node by its descriptor
        """
        node_data   = self.store.Load (desc)
        node_tag    = node_data [-1:]

        if node_tag != b'\x01':
            # load node
            node_stream = io.BytesIO (node_data [:-1]) if not self.compress else \
                          io.BytesIO (zlib.decompress (node_data [:-1]))

            node =  StoreBPTreeNode (desc,
                self.keys_from_stream (node_stream),
                Serializer (node_stream).StructListRead (self.desc_struct))
        else:
            # load leaf
            prev, next = self.leaf_struct.unpack (node_data [:self.leaf_struct.size])

            node_stream = io.BytesIO (node_data [self.leaf_struct.size:-1]) if not self.compress else \
                          io.BytesIO (zlib.decompress (node_data [self.leaf_struct.size:-1]))

            node = StoreBPTreeLeaf (desc,
                self.keys_from_stream (node_stream),
                self.values_from_stream (node_stream))
            node.prev = prev
            node.next = next

        self.d2n [desc] = node
        return node
Exemplo n.º 4
0
    def testCreateRequestAuthContextComparision(self):
        """
        Tests the OneLogin_Saml2_Authn_Request Constructor.
        The creation of a deflated SAML Request with defined AuthnContextComparison
        """
        saml_settings = self.loadSettingsJSON()
        settings = OneLogin_Saml2_Settings(saml_settings)
        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertIn(OneLogin_Saml2_Constants.AC_PASSWORD, inflated)
        self.assertNotIn(OneLogin_Saml2_Constants.AC_X509, inflated)

        saml_settings['security']['requestedAuthnContext'] = True
        settings = OneLogin_Saml2_Settings(saml_settings)
        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertIn('RequestedAuthnContext Comparison="exact"', inflated)

        saml_settings['security']['requestedAuthnContextComparison'] = 'minimun'
        settings = OneLogin_Saml2_Settings(saml_settings)
        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertIn('RequestedAuthnContext Comparison="minimun"', inflated)
Exemplo n.º 5
0
    def testCreateRequestSetNameIDPolicy(self):
        """
        Tests the OneLogin_Saml2_Authn_Request Constructor.
        The creation of a deflated SAML Request with and without NameIDPolicy
        """
        saml_settings = self.loadSettingsJSON()
        settings = OneLogin_Saml2_Settings(saml_settings)
        authn_request = OneLogin_Saml2_Authn_Request(settings)
        authn_request_encoded = authn_request.get_request()
        decoded = b64decode(authn_request_encoded)
        inflated = decompress(decoded, -15)
        self.assertRegexpMatches(inflated, '^<samlp:AuthnRequest')
        self.assertIn('<samlp:NameIDPolicy', inflated)

        authn_request_2 = OneLogin_Saml2_Authn_Request(settings, False, False, True)
        authn_request_encoded_2 = authn_request_2.get_request()
        decoded_2 = b64decode(authn_request_encoded_2)
        inflated_2 = decompress(decoded_2, -15)
        self.assertRegexpMatches(inflated_2, '^<samlp:AuthnRequest')
        self.assertIn('<samlp:NameIDPolicy', inflated_2)

        authn_request_3 = OneLogin_Saml2_Authn_Request(settings, False, False, False)
        authn_request_encoded_3 = authn_request_3.get_request()
        decoded_3 = b64decode(authn_request_encoded_3)
        inflated_3 = decompress(decoded_3, -15)
        self.assertRegexpMatches(inflated_3, '^<samlp:AuthnRequest')
        self.assertNotIn('<samlp:NameIDPolicy', inflated_3)
Exemplo n.º 6
0
        def parse_xml(data):
            print zlib.decompress(data)
            book = ET.fromstring(zlib.decompress(data))
            self._flushContacts()
            
            for elem in book.find('Groups').getchildren():
                self.addGroup( GaduContactGroup.from_xml(elem) )

            for elem in book.find('Contacts').getchildren():
                is_uin_ok = 1
                try:
                    check_uin = elem.find("GGNumber")
                    int(check_uin.text)
                    if check_uin.text == '':
                        is_uin_ok = 0
                except:
                    is_uin_ok = 0
                    
                if is_uin_ok == 1:
                    contact = GaduContact.from_xml(elem)
                    self.addContact( contact )
                    self.__connection.addNewContact(contact)
                else:
                    print 'Failed to import contact. Invalid uin: %s.' % check_uin.text

            callback()
Exemplo n.º 7
0
    def postreply(self, reply):

        if self.options.compression in ['yes', 'auto']:
            for header, headerval in reply.headers.items():   # this needs to be items() and not iteritems() because it's sometimes an httplib.HTTPMessage (when decoding an error response) and that doesn't support iteritems()!
                if header.lower() == 'content-encoding':
                    log.debug('http reply with a content-encoding header')
                    if headerval == 'gzip':
                        log.debug('decompressing gzip content')
                        replydatafile = cStringIO.StringIO(reply.message)
                        gzipper = gzip.GzipFile(fileobj=replydatafile)
                        reply.message = gzipper.read()
                    elif headerval == 'deflate':
                        # decompress the deflate content
                        log.debug('decompressing deflate content')
                        try:
                            reply.message = zlib.decompress(reply.message)
                        except zlib.error:
                            # Many web sites fail to send the first bytes of the header
                            reply.message = zlib.decompress(reply.message, -zlib.MAX_WBITS)
                    else:
                        # unknown scheme
                        log.debug('unsupported content-encoding scheme')
                        pass

                    break

        return reply
Exemplo n.º 8
0
def _report_variant_pathways(c, args, idx_to_sample):
    
    (agn_paths, hgnc_paths, ensembl_paths) = get_pathways(args)
    
    for r in c:
        gt_types = np.array(cPickle.loads(zlib.decompress(r['gt_types'])))
        gts      = np.array(cPickle.loads(zlib.decompress(r['gts'])))        
        gene     = str(r['gene'])
        trans    = str(r['transcript'])
        
        pathways = []
        if (gene, trans) in agn_paths:
            pathways = _get_pathways(gene, trans, agn_paths[(gene, trans)], 
                            allow_none=False)
        elif (gene, trans) in hgnc_paths:
            pathways = _get_pathways(gene, trans, hgnc_paths[(gene, trans)],
                            allow_none=False)
        elif (gene, trans) in ensembl_paths:
            pathways = _get_pathways(gene, trans, ensembl_paths[(gene, trans)],
                            allow_none=False)
        pathlist = ",".join(pathways)
        for idx, gt_type in enumerate(gt_types):
            if (gt_type == HET or gt_type == HOM_ALT) and \
                len(pathways) > 0:
                print "\t".join([r['chrom'], str(r['start']), str(r['end']), \
                                 r['ref'], r['alt'], r['impact'], \
                                 idx_to_sample[idx], gts[idx], gene, trans, \
                                 pathlist])
Exemplo n.º 9
0
 def getVersionDiff( self, fromDate, toDate ):
   retVal = self.rpcClient.getVersionContents( [ fromDate, toDate ] )
   if retVal[ 'OK' ]:
     fromData = zlib.decompress( retVal[ 'Value' ][0] )
     toData = zlib.decompress( retVal[ 'Value' ][1] )
     return difflib.ndiff( fromData.split( "\n" ), toData.split( "\n" ) )
   return []
Exemplo n.º 10
0
  def testGzExtension(self):
    with utils.Stubber(urllib2, "urlopen", FakeOpen):
      profile = self.server.GetProfileByName("pe")
      # We received compressed data.
      zlib.decompress(profile.data, 16 + zlib.MAX_WBITS)

      # We issued one http request.
      self.assertEqual(FakeHandle.read_count, 1)

      self.server.GetProfileByName("pe")

      # This time it should have been cached.
      self.assertEqual(FakeHandle.read_count, 1)

      self.server.GetProfileByName("pe")

      # This is the same profile.
      self.assertEqual(FakeHandle.read_count, 1)

    cache_urn = rdfvalue.RDFURN(config_lib.CONFIG["Rekall.profile_cache_urn"])
    cached_items = list(aff4.FACTORY.Open(
        cache_urn.Add(constants.PROFILE_REPOSITORY_VERSION),
        token=self.token).ListChildren())

    # We cache the .gz only.
    self.assertEqual(len(cached_items), 1)
    self.assertEqual(cached_items[0].Basename(), "pe")
Exemplo n.º 11
0
def default_url_fetcher(url):
    """Fetch an external resource such as an image or stylesheet.

    Another callable with the same signature can be given as the
    :obj:`url_fetcher` argument to :class:`HTML` or :class:`CSS`.
    (See :ref:`url-fetchers`.)

    :type url: Unicode string
    :param url: The URL of the resource to fetch
    :raises: any exception to indicate failure. Failures are logged
        as warnings, with the string representation of the exception
        in the message.
    :returns: In case of success, a dict with the following keys:

        * One of ``string`` (a byte string) or ``file_obj``
          (a file-like object)
        * Optionally: ``mime_type``, a MIME type extracted eg. from a
          *Content-Type* header. If not provided, the type is guessed from the
          file extension in the URL.
        * Optionally: ``encoding``, a character encoding extracted eg. from a
          *charset* parameter in a *Content-Type* header
        * Optionally: ``redirected_url``, the actual URL of the ressource
          in case there were eg. HTTP redirects.
        * Optionally: ``filename``, the filename of the resource. Usually
          derived from the *filename* parameter in a *Content-Disposition*
          header

        If a ``file_obj`` key is given, it is the caller’s responsability
        to call ``file_obj.close()``.

    """
    if url.lower().startswith('data:'):
        return open_data_url(url)
    elif UNICODE_SCHEME_RE.match(url):
        url = iri_to_uri(url)
        response = urlopen(Request(url, headers=HTTP_HEADERS))
        result = dict(redirected_url=response.geturl(),
                      mime_type=urllib_get_content_type(response),
                      encoding=urllib_get_charset(response),
                      filename=urllib_get_filename(response))
        content_encoding = response.info().get('Content-Encoding')
        if content_encoding == 'gzip':
            if StreamingGzipFile is None:
                result['string'] = gzip.GzipFile(
                    fileobj=io.BytesIO(response.read())).read()
                response.close()
            else:
                result['file_obj'] = StreamingGzipFile(fileobj=response)
        elif content_encoding == 'deflate':
            data = response.read()
            try:
                result['string'] = zlib.decompress(data)
            except zlib.error:
                # Try without zlib header or checksum
                result['string'] = zlib.decompress(data, -15)
        else:
            result['file_obj'] = response
        return result
    else:
        raise ValueError('Not an absolute URI: %r' % url)
Exemplo n.º 12
0
 def _restoreb(self, bdata, pwd=''):
     '''
     Restores binary data from SQL information. \n\
     '''
     # If password is null in some way, do not encrypt.
     if not pwd:
         try: return zlib.decompress(bdata)
         except: return bz2.decompress(bdata)
     # If using global password.
     elif pwd == 1:
         # If global password is null, do not decrypt.
         if not self.glob_key:
             try: return zlib.decompress(bdata)
             except: return bz2.decompress(bdata)
         # If global password exists, use it.
         else:
             pwd = self.glob_key
     # If password is provided, generate key derivation.
     else:
         pwd = PBKDF2(password=pwd, salt=self.glob_salt, dkLen=32, count=1000)
     # Decrypt and return.
     crypt = AES.new(pwd)
     vCompressed = crypt.decrypt(bdata)
     try: return zlib.decompress(vCompressed)
     except: return bz2.decompress(vCompressed)
Exemplo n.º 13
0
    def decompress_data(self,compression):
        
        ### ONLY HANDLING ZLIB_COMPRESSED AT THE MOMENT
        
        hex_compress = hex(compression['magic_cookie'])
        
        #print(hex_compress)
        
#        TA_NOT_COMPRESSED = hex(0x2f2f2f2f)   #The data is not compressed. Use as is it.
        GZIP_COMPRESSED = hex(0xf7f7f7f7)     #The data was compressed using GZIP. Uncompressed appropriately.
#        GZIP_NOT_COMPRESSED = hex(0xf8f8f8f8) #GZIP compression was tried, but it failed. The data is not compressed. Use as it is.
#        BZIP_COMPRESSED = hex(0xf3f3f3f3)     #The data was compressed with BZIP2 version 0.9.0c. Uncompress appropriately.
#        BZIP_NOT_COMPRESSED = hex(0xf4f4f4f4) #BZIP2 compression was tried, but it failed. The data is not compressed. Use it as it is.
        ZLIB_COMPRESSED = hex(0xf5f5f5f5)     #The data was compressed with ZLIB compression. This is the same as GZIP but without the GZIP header structure. Uncompress appropriately.
#        ZLIB_NOT_COMPRESSED = hex(0xf6f6f6f6) #ZLIB compression was tried, but it failed. Data is not compressed, us it as it is.
        
        if hex_compress == ZLIB_COMPRESSED:
            nbytes = compression['nbytes_compressed']
            bin_data=self.mdvfile.read(nbytes)
            
            uncompressed_bytes = zlib.decompress(bin_data)
            
            return uncompressed_bytes
            
        if hex_compress == GZIP_COMPRESSED:
            nbytes = compression['nbytes_compressed']
            bin_data=self.mdvfile.read(nbytes)
            
            #print(bin_data)

            uncompressed_bytes = zlib.decompress(bytes(bin_data), 15+32)
            
            return uncompressed_bytes
Exemplo n.º 14
0
def send_http(request):
    # if there is a proxy , connect proxy server instead
    proxy_type = None
    remote = request["remote"]
    sock = socket.socket(socket.AF_INET,
                         socket.SOCK_STREAM)
    if request["proxy"]:
        # 用代理则先连接代理服务器
        proxy_type = connect_proxy(sock, remote, request["proxy"])
    else:
        sock.connect(remote)
    sock.settimeout(request["timeout"])
    # 用代理不能封闭ssl
    if request["ssl"] and proxy_type != "http":
        sock = ssl.wrap_socket(sock)
    request["sock"] = sock
    # 略粗暴,可能发不全 
    send_tcp(sock, request["body"])
    response = wait_response(request)
    # 如果需要缓存连接则添加到队列, 否则直接关闭连接
    host = "%s:%d" % remote
    header = response["header"]
    text = response["recv"].getvalue()
    del response["recv"]
    if not request.get("header_only") and header:
        # maybe gzip stream
        if header.get("Content-Encoding") == "gzip":
            text = zlib.decompress(text, 16 + zlib.MAX_WBITS)
        elif header.get("Content-Encoding") == "deflate":
            text = zlib.decompress(text, -zlib.MAX_WBITS)
    response["text"] = text
    return response
Exemplo n.º 15
0
def extract_pkg_from_data(byte_data):
    complete_pkg = []

    z_packages = byte_data.split(compress_pkg_header)
    len_pkg = len(z_packages)
    dbgprint('Len_Sep:', len_pkg)
    if len_pkg < 2:
        errprint('ReceiveError,CannotFindGzipHeader', byte_data)
        raise ValueError('ReceiveError,CannotFindGzipHeader')

    else:
        data_to_preserve = z_packages.pop()
        for z_pkg in z_packages:
            z_pkg = z_pkg[:-compress_pkg_footer_len]  # Remove footer mark
            if not z_pkg:
                continue
            dbgprint('AfterGzip', len(z_pkg), v=4)
            decompressed_data = zlib.decompress(z_pkg)
            dbgprint('BeforeGzip', len(decompressed_data), v=4)
            complete_pkg.append(decompressed_data)

        if data_to_preserve[-compress_pkg_footer_len:] == compress_pkg_footer:  # last pkg is complete
            data_to_preserve = data_to_preserve[:-compress_pkg_footer_len]
            dbgprint('AfterGzip', len(data_to_preserve), v=4)
            decompressed_data = zlib.decompress(data_to_preserve)
            dbgprint('BeforeGzip', len(decompressed_data), v=4)
            complete_pkg.append(decompressed_data)
            data_to_preserve = b''
        else:
            data_to_preserve = compress_pkg_header + data_to_preserve

    return complete_pkg, data_to_preserve
Exemplo n.º 16
0
def sniffProbe(p):
	global msg,msglen
	if p.haslayer(Dot11):
		if p.type == 0 and p.subtype == 4: # if management frame and probe-request
			if p.addr2 == "11:22:33:44:55:66":
				if ("PART"==p.info[:4]):
					piecepos=p.info.index("/")
					piece=p.info[4:piecepos]
					lenpos=p.info.index('|')
					msglen=p.info[piecepos+1:lenpos]
					sys.stdout.write("Receiving long message "+str(piece)+"/"+str(msglen)+"\r")
					sys.stdout.flush()
					if (piece==msglen):
						print ""
						msg+=p.info[lenpos:]
						print msg
						unenc=aes.decrypt(msg)
						try:
							uncomp=zlib.decompress(unenc)
							print uncomp
						except:
							print "ERROR - Wrong Password"
						msg=""
						msglen=0
					else:
						msg+=p.info[lenpos:]
				else:
					unenc=aes.decrypt(p.info)
					try:
						uncomp=zlib.decompress(unenc)
						print uncomp
					except:
						print "ERROR - Wrong Password"
Exemplo n.º 17
0
    def print_stream_defect_occurrences(self,cids,streamIdDO,project=None):
        streamDefectFilterDO = self.set_stream_filter_spec(stream=streamIdDO.name,project=project, details=True)
        SDs = self.client.service.getStreamDefects(cids,streamDefectFilterDO)
        instances = []
        for sd in SDs:
            print ''
            print "Defect "+str(sd.cid)+" ("+sd.checkerSubcategoryId.domain+")"
            print "  Checker "+sd.checkerSubcategoryId.checkerName+" (subcategory "+sd.checkerSubcategoryId.subcategory+")"
            for di in getattr(sd,'defectInstances',[]):
                try:
                    print "  File "+di.function.fileId.filePathname
                    print "  Function "+di.function.functionDisplayName
                except:
                    print "  Parse Warning (no function name available)"
                logging.debug("di.events size " +str(len(di.events)))
                for ev in di.events:
                    logging.debug(ev)
                    logging.debug(ev.eventKind)
                    logging.debug(ev.lineNumber)
                    if ev.eventKind=="NORMAL":
                        print "    " + ev.fileId.filePathname + ", line: " + str(ev.lineNumber)
                        print "    " + ev.eventDescription
                        logging.debug(len(zlib.decompress(base64.b64decode(self.client.service.getFileContents(streamIdDO,ev.fileId).contents))))
                        logging.debug(len(zlib.decompress(base64.b64decode(self.client.service.getFileContents(streamIdDO,ev.fileId).contents)).split('\n')))
                        print "    " + zlib.decompress(base64.b64decode(self.client.service.getFileContents(streamIdDO,ev.fileId).contents)).split('\n')[ev.lineNumber-1]

                print ""
                for p in getattr(di,'properties',[]):
                    print "    " + p.key + ": " + getattr(p,'value','')
                print ""
Exemplo n.º 18
0
def borrar_cumple():
    try:
        f = open("calendario.txt","r")#abre un archivo de modo lectura
    except:
        print "no se encontro el archivo calendario.txt"
    else# El código colocado en la cláusula else se ejecuta solo si no se levante una excepción:
        print "Ingrese el nombre y fecha del cumple a borrar"
        fecha = zlib.compress(encriptar(raw_input("Fecha:")))
        nomb = zlib.compress(encriptar(raw_input("Nombre:")))
        dic = pickle.load(f)
        f.close()#cierra el archivo
        if fecha in dic:
            i = 0
            while i < len(dic[fecha]) and dic[fecha][i][0] != nomb:
                    i = i + 1
            if i < len(dic[fecha]):
                del dic[fecha][i]
                if dic[fecha] == []:
                    del dic[fecha]
                f = open("calendario.txt","w")#abre archivo de modo escritura
                pickle.dump(dic, f)
                f.close()#cierra el archivo
            else:
                print "no se encontro el nombre " + zlib.decompress(desencriptar(nomb)) + " en la fecha " + zlib.decompress(desencriptar(fecha))
        else:
            print "no se ha encontrado ningun cumple en la fecha " + zlib.decompress(desencriptar(fecha))
Exemplo n.º 19
0
    def load(self, info, data):
        fmt = '{0}i'.format(len(info) / 4)
        self.info = unpack(fmt, info)

        # load data to layers
        if self.type == 'layer':
            if LAYER_TYPES[self.info[3]] == 'tile':
                data = decompress(data[self.info[-1]])
                fmt = '{0}B'.format(len(data))
                self.data = list(unpack(fmt, data))
            elif LAYER_TYPES[self.info[3]] == 'quad':
                data = decompress(data[self.info[-2]])
                fmt = '{0}i'.format(len(data) / 4)
                self.data = list(unpack(fmt, data))
        # load image data
        if self.type == 'image':
            name = decompress(data[self.info[-2]])
            fmt = '{0}c'.format(len(name))
            self.name = ''
            for char in unpack(fmt, name):
                if char == '\x00':
                    break
                self.name += char

            if not self.info[5]:
                data = decompress(data[self.info[-1]])
                fmt = '{0}B'.format(len(data))
                data = list(unpack(fmt, data))
                self.data = []
                for i in range(self.info[4]):
                    self.data.append(data[i*self.info[3]*4:(self.info[3]*4)+(i*self.info[3]*4)])
 def resp_deflate(data):
     # zlib only provides the zlib compress format, not the deflate format;
     # so on top of all there's this workaround:   
     try:               
         return zlib.decompress(data, -zlib.MAX_WBITS)
     except zlib.error:
         return zlib.decompress(data)
Exemplo n.º 21
0
def buscar_cumple():
    print "Ingrese 1 para buscar por nombre o 2 para buscar por fecha de cumpleanos (cualquier otro caracter para cancelar)"
    op = raw_input("Opcion:")
    if op == "1":
        try:
            f = open("calendario.txt","r")#Abre el archivo de modo lectura
        except:
            print "aun no ha ingresado ningun cumple!"
        else#El código colocado en la cláusula else se ejecuta solo si no se levante una excepción:
            print "Ingrese el nombre"
            nomb = zlib.compress(encriptar(raw_input("Nombre:")))
            dic = pickle.load(f)#la funcion load carga el objeto serializado, ya q este es una lista
            f.close()#cerrar el archivo
            encontrado = "no"
            for i in dic.keys():#devuelve una lista de todas las claves usadas en el diccionario
                for j in range(len(dic[i])):            
                    if nomb == dic[i][j][0]:
                        print ("Se encontro " + zlib.decompress(desencriptar(dic[i][j][0])) + " el dia " + zlib.decompress(desencriptar(i)))
                        encontrado = "si"
            if encontrado == "no":
                print "***No se hayaron coinsidencias***"
       
    elif op == "2":
        try:
            f = open("calendario.txt","r")#abre el archivo modo lectura
        except:
            print "aun no ha ingresado ningun cumple!"
        else#• El código colocado en la cláusula else se ejecuta solo si no se levante una excepción:
            print "Ingrese la fecha"
            fecha = zlib.compress(encriptar(raw_input("Fecha: ")))
            dic = pickle.load(f)#la funcion load carga el objeto serializado, ya q este es una lista
            f.close()#Cierra el archivo
            if fecha in dic:
                for x in dic[fecha]:
                    print zlib.decompress(desencriptar (x[0])) + ", " + zlib.decompress(desencriptar (x[1])) + ", " + zlib.decompress(desencriptar (x[2])) + "\n"
Exemplo n.º 22
0
def get_variant_genes(c, args, idx_to_sample):
    samples = defaultdict(list)
    for r in c:
        gt_types = np.array(cPickle.loads(zlib.decompress(r['gt_types'])))
        gts      = np.array(cPickle.loads(zlib.decompress(r['gts'])))
        var_id = str(r['variant_id'])
        chrom = str(r['chrom'])
        start = str(r['start'])
        end = str(r['end'])   
        gene     = str(r['gene'])
        impact = str(r['impact'])
        biotype = str(r['biotype'])
        in_dbsnp = str(r['in_dbsnp'])
        clin_sigs = str(r['clin_sigs'])
        aaf_1kg_all = str(r['aaf_1kg_all'])
        aaf_esp_all = str(r['aaf_esp_all'])
        
        for idx, gt_type in enumerate(gt_types):
            if (gt_type == HET or gt_type == HOM_ALT):
                if gene != "None":
                    (key, value) = (idx_to_sample[idx], \
                                   (gene,var_id,chrom,start,end,impact, \
                                   biotype,in_dbsnp,clin_sigs,aaf_1kg_all, \
                                   aaf_esp_all))
                    samples[idx_to_sample[idx]].append(value)
    return samples
Exemplo n.º 23
0
def convertToFullForm(compactForm):
    arenaUniqueID, avatarResults, fullResultsList, pickled = compactForm
    fullResultsList = cPickle.loads(zlib.decompress(fullResultsList))
    avatarResults = cPickle.loads(zlib.decompress(avatarResults))
    personal = {}
    fullForm = {'arenaUniqueID': arenaUniqueID,
     'personal': personal,
     'common': {},
     'players': {},
     'vehicles': {},
     'avatars': {}}
    personal['avatar'] = avatarResults = AVATAR_FULL_RESULTS.unpack(avatarResults)
    for vehTypeCompDescr, ownResults in fullResultsList.iteritems():
        vehPersonal = personal[vehTypeCompDescr] = VEH_FULL_RESULTS.unpack(ownResults)
        vehPersonal['details'] = VehicleInteractionDetails.fromPacked(vehPersonal['details']).toDict()
        vehPersonal['isPrematureLeave'] = avatarResults['isPrematureLeave']
        vehPersonal['fairplayViolations'] = avatarResults['fairplayViolations']

    commonAsList, playersAsList, vehiclesAsList, avatarsAsList = cPickle.loads(zlib.decompress(pickled))
    fullForm['common'] = COMMON_RESULTS.unpack(commonAsList)
    for accountDBID, playerAsList in playersAsList.iteritems():
        fullForm['players'][accountDBID] = PLAYER_INFO.unpack(playerAsList)

    for accountDBID, avatarAsList in avatarsAsList.iteritems():
        fullForm['avatars'][accountDBID] = AVATAR_PUBLIC_RESULTS.unpack(avatarAsList)

    for vehicleID, vehiclesInfo in vehiclesAsList.iteritems():
        fullForm['vehicles'][vehicleID] = []
        for vehTypeCompDescr, vehicleInfo in vehiclesInfo.iteritems():
            fullForm['vehicles'][vehicleID].append(VEH_PUBLIC_RESULTS.unpack(vehicleInfo))

    return fullForm
Exemplo n.º 24
0
 def __call__(self, gzipped_adjancency_matrices, average_on = 100, max_delta = None, start_at = 0):
     times = [time for time in sorted(gzipped_adjancency_matrices.keys()) if time >= start_at]
     period = times[1] - times[0]
     if max_delta is None: 
         max_delta = len(times) - average_on + 1
     usable_times = [time for time in times if time < max(times) - max_delta * period]
     used_times = usable_times
     random.shuffle(used_times)
     used_times = used_times[0:average_on]
     values = {}
     for delta in range(0, max_delta):
         values[delta] = 0.0
     for t in used_times:
         current = pickle.loads(zlib.decompress(gzipped_adjancency_matrices[t]))
         for delta in range(0, max_delta):
             future = pickle.loads(zlib.decompress(gzipped_adjancency_matrices[t + period * delta]))
             N = len(current)
             result = zeros([1])
             headers = ['analysis.h']
             vars = {'current': current, 'future': future, 'N': N, 'result': result}
             code = 'InteractionTime().compute(current, future, N, result);'
             c_code.CProgram(vars, code, headers, openmp = False).run()
             values[delta] += result[0]
     for delta in range(0, max_delta):
         values[delta] *= 1.0 / average_on
     return values
Exemplo n.º 25
0
def deserialize(s):
    l = struct.unpack('<I', s[:4])[0]
    doc = zlib.decompress(s[4:l + 4])
    doc = readString(doc, False)
    s = s[l + 4:]
    try:
        if s:
            try:
                f = readMD(s)
            except:
                s = zlib.decompress(s)
                f = readMD(s)
            des = [k[:-4] for k in doc.find('Data') if k.endswith('.tag')]
            #return doc, f, des
            for de in des:
                try:
                    up = upath(doc, de)
                    try:
                        d, h = f[up]
                    except KeyError:
                        d, h = f[up + '/']
                    setdat(doc, de, d, h)
                except:
                    report("can't find data for element %s" % (de,))
                    raise
    except:
        raise
        report("cant load data")
    return doc
Exemplo n.º 26
0
def send_http(remote, use_ssl, message, timeout, proxy=None, header_only=False): 
    try: 
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        sock.settimeout(timeout)
        #if there is a proxy , connect proxy server instead 
        proxy_type = None 
        if proxy:
            proxy_type = connect_proxy(sock, remote, proxy)
        else:
            sock.connect(remote) 
        if use_ssl and proxy_type != "http":
            sock = ssl.wrap_socket(sock) 
        sock.send(message) 
        header, body = wait_response(sock, header_only)
    except socket.error:
        sock.close() 
        raise 
    #handle compressed stream: gzip, deflate 
    if not header_only and header: 
        #maybe gzip stream
        if header.get("Content-Encoding") == "gzip": 
            body = zlib.decompress(body, 16+zlib.MAX_WBITS)  
        elif header.get("Content-Encoding") == "deflate":
            body = zlib.decompress(body, -zlib.MAX_WBITS)  
    return header, body 
Exemplo n.º 27
0
def parse(stream): 
    gzip_maybe = None
    deflate_maybe = None
    chunked_maybe = None
    header_end = stream.find("\r\n\r\n")
    if header_end < 0:
        raise Exception("no header")
    header = simple_http.parse_server_header(stream[:header_end]) 
    if header.get("Content-Encoding") == "gzip":
        gzip_maybe = True
    if header.get("Content-Encoding") == "deflate":
        deflate_maybe = True
    if header.get("Content-Encoding") == "chunked":
        chunked_maybe = True
    stream_buffer = StringIO() 
    content = stream[header_end+4:]
    if chunked_maybe:
        chunked_end = content.rfind("0\r\n\r\n") 
        if chunked_end > -1:
            _handle_chunked(content, stream_buffer)
    else:
        stream_buffer.write(content) 
    final = stream_buffer.getvalue()
    if gzip_maybe:
        final = zlib.decompress(stream_buffer.getvalue(), 16+zlib.MAX_WBITS)
    if deflate_maybe:
        final = zlib.decompress(content_buffer.getvalue(), -zlib.MAX_WBITS)
    stream_buffer.close() 
    return header, final 
Exemplo n.º 28
0
def decode_deflate(data):
    ''' decode deflate content '''
    import zlib
    try:
        return zlib.decompress(data)
    except zlib.error:
        return zlib.decompress(data, -zlib.MAX_WBITS)
Exemplo n.º 29
0
def load_savegame_string(string):
    """
    :rtype: AIstate
    """
    import base64
    import zlib

    new_string = string
    try:
        new_string = base64.b64decode(string)
    except TypeError as e:
        # The base64 module docs only mention a TypeError exception, for wrong padding
        # Older save files won't be base64 encoded, but seemingly that doesn't trigger
        # an exception here;
        debug("When trying to base64 decode savestate got exception: %s" % e)
    try:
        new_string = zlib.decompress(new_string)
    except zlib.error:
        pass  # probably an uncompressed (or wrongly base64 decompressed) string
    try:
        decoded_state = decode(new_string)
        debug("Decoded a zlib-compressed and apparently base64-encoded save-state string.")
        return decoded_state
    except (InvalidSaveGameException, ValueError, TypeError) as e:
        debug("Base64/zlib decoding path for savestate failed: %s" % e)

    try:
        string = zlib.decompress(string)
        debug("zlib-decompressed a non-base64-encoded save-state string.")
    except zlib.error:
        # probably an uncompressed string
        debug("Will try decoding savestate string without base64 or zlib compression.")
    return decode(string)
Exemplo n.º 30
0
 def Uncompress(self):
   if self:
     return zlib.decompress(self._value)
   else:
     return ""
Exemplo n.º 31
0
         SpectrumIntensities) == 4 * NumPeaks:
     SpectraLibrary.setdefault(precursorKey, {})
     SpectrumMZ = struct.unpack('d' * NumPeaks, SpectrumMZ)
     SpectrumIntensities = struct.unpack('f' * NumPeaks,
                                         SpectrumIntensities)
     SpectraLibrary[precursorKey]['Spectrum'] = np.array(
         (SpectrumMZ, SpectrumIntensities)).T
     SpectraLibrary[precursorKey]['PrecursorMZ'] = LibPrecursorInfo[
         'precursorMZ'][i]
     SpectraLibrary[precursorKey]['PrecursorRT'] = LibPrecursorInfo[
         'retentionTime'][
             i]  #The library retention time is given in minutes
 elif len(SpectrumIntensities) == 4 * NumPeaks:
     SpectraLibrary.setdefault(precursorKey, {})
     SpectrumMZ = struct.unpack('d' * NumPeaks,
                                zlib.decompress(SpectrumMZ))
     SpectrumIntensities = struct.unpack('f' * NumPeaks,
                                         SpectrumIntensities)
     SpectraLibrary[precursorKey]['Spectrum'] = np.array(
         (SpectrumMZ, SpectrumIntensities)).T
     SpectraLibrary[precursorKey]['PrecursorMZ'] = LibPrecursorInfo[
         'precursorMZ'][i]
     SpectraLibrary[precursorKey]['PrecursorRT'] = LibPrecursorInfo[
         'retentionTime'][i]
 elif len(SpectrumMZ) == 8 * NumPeaks:
     SpectraLibrary.setdefault(precursorKey, {})
     SpectrumMZ = struct.unpack('d' * NumPeaks, SpectrumMZ)
     SpectrumIntensities = struct.unpack(
         'f' * NumPeaks, zlib.decompress(SpectrumIntensities))
     SpectraLibrary[precursorKey]['Spectrum'] = np.array(
         (SpectrumMZ, SpectrumIntensities)).T
Exemplo n.º 32
0
    async def pub_sub_callback(self, msg):
        """ Process the device update messages of the sysap   """
        # pylint: disable=too-many-nested-blocks
        args = None

        items = msg.xml.find(
            ".//*[@node='http://abb.com/protocol/update_encrypted']")
        if items is not None:
            # This message is encrypted
            if msg['pubsub_event']['items']['item']['update'][
                    'data'] is not None:

                args = message2py(
                    msg['pubsub_event']['items']['item']['update'])

                if args:

                    xmessage = self.saslhandler.crypto.decryptPubSub(args[0])

                    update = MessageReader(xmessage)
                    length = update.readUint32BE()

                    got_bytes = update.getRemainingData()
                    try:
                        unzipped = zlib.decompress(got_bytes)
                    except OSError as e:
                        print(e)
                    except:
                        print('error zlib.decompress ', sys.exc_info()[0])
                    else:
                        if len(unzipped) != length:
                            LOG.info(
                                "Unexpected uncompressed data length, have=" +
                                str(len(unzipped)) + ", expected=" +
                                str(length))
                        args[0] = unzipped.decode('utf-8')
                        print(args[0])
        else:
            if msg['pubsub_event']['items']['item']['update'][
                    'data'] is not None:
                args = data2py(msg['pubsub_event']['items']['item']['update'])

        # arg contains the devices that changed
        if args:
            root = ET.fromstring(args[0])

            device = root.find('devices')
            for neighbor in device.findall('device'):
                serialnumber = neighbor.get('serialNumber')

                channels = neighbor.find('channels')
                if channels is not None:
                    for channel in channels.findall('channel'):
                        channel_id = channel.get('i')

                        # Now change the status of the device
                        device_id = serialnumber + '/' + channel_id

                        # if the device is a light
                        if device_id in self.light_devices:
                            self.update_light(device_id, channel)
                            await self.light_devices[device_id].after_update()

                        # if the device is a cover
                        if device_id in self.cover_devices:
                            self.update_cover(device_id, channel)
                            await self.cover_devices[device_id].after_update()

                        # if the device is a binary sensor
                        if device_id in self.binary_devices:
                            self.update_binary(device_id, channel)
                            await self.binary_devices[device_id].after_update()

                        # if the device is a thermostat
                        if device_id in self.thermostat_devices:
                            self.update_thermostat(device_id, channel)
                            await self.thermostat_devices[device_id
                                                          ].after_update()
Exemplo n.º 33
0
 def decodeContent(encContent, encoding):
     if encoding is None:
         return encContent
     if encoding == "zlib":
         return zlib.decompress(encContent)
Exemplo n.º 34
0
def deflate(data):
    try:
        return zlib.decompress(data, -zlib.MAX_WBITS)
    except zlib.error:
        return zlib.decompress(data)
Exemplo n.º 35
0
 def unpack_data(self, data):
     """"""
     return json.loads(zlib.decompress(data, -zlib.MAX_WBITS))
Exemplo n.º 36
0
def main():
    global console_out, process, master_ip, filename, error_txt
    my_thread_inet = Thread(target=inet_work)
    my_thread_inet.daemon = True
    my_thread_inet.start()

    my_thread_video = Thread(target=key_to_robot)
    my_thread_video.daemon = True
    my_thread_video.start()

    flag_file = False
    # filename = ""
    print("Start demon")
    while True:

        #  Wait for next request from client
        if flag_file:
            # print("wait file data")
            t = time.time()
            message = ""
            while 1:
                try:
                    message = socket.recv()
                except:
                    pass
                if message != "":
                    break
                if time.time() - t > 5:
                    break

            # message = message.decode("utf-8")

            print("filename", filename)
            # print("file", message)
            # message = zlib.decompress(message)

            flag_file = False
            if message == "":
                print("bad file")
                continue

            text_file = open(dir + filename, "wb")
            try:
                text_file.write(zlib.decompress(message))
            except:
                print("error compress")
                pass
            text_file.close()
            try:
                socket.send_string("ok")
            except:
                pass
            continue

        message = ""
        try:
            message = socket.recv_string(zmq.NOBLOCK)
        except:
            pass

        # if len(message)>0:
        #    print("Received request: %s" % message)
#        await asyncio.sleep(0.001)
        if message == "":
            time.sleep(0.01)
            # print("message empty")
            continue
        # time.sleep(0.001)
        # print(message)
        message = message.split("|")

        if message[0].find("data") >= 0:
            snd = "STOPPED "
            if process is not None:
                if len(console_out) == 0:
                    if process.poll() is None:
                        # print(console_out)
                        # asyncio.ensure_future(
                        # run_subprocess_read()
                        # print(console_out)
                        snd = console_out

            if len(console_out) > 0:
                snd = console_out
                # print(len(console_out))
                # if len(console_out) < 1024:
                #    await asyncio.sleep(0.1)
            # print("send: "+snd)
            try:
                socket.send_string(snd)
            except:
                pass
            console_out = ""
            continue

        if message[0].find("stop_MTS") >= 0:
            # print("stop")

            if process is not None:
                if process.poll() is None:
                    # print("k1", proc.returncode)
                    # asyncio.ensure_future(
                    # run_subprocess_read()
                    process.kill()
                    # await asyncio.sleep(2)
                    while process.poll() is None:
                        # await asyncio.sleep(0.01)
                        time.sleep(0.001)
                        pass
                    # print("k2",process.returncode)

            try:
                socket.send_string(console_out + "STOPPED ")
            except:
                pass
            console_out = ""

            process = None
            print("stopping", console_out)
            continue
            # break
        if message[0].find("ping") >= 0:
            try:
                socket.send_string(my_host + "|" + master_ip)
            except:
                pass
            continue

        if message[0].find("take") >= 0:
            # назначаем хозяина
            master_ip = message[1]
            print("take", master_ip)
            try:
                socket.send_string(my_host + "|" + master_ip)
            except:
                pass
            continue

        if message[0].find("drop") >= 0:
            # скидываем хозяина]
            master_ip = "0"
            print("drop", master_ip)
            try:
                socket.send_string(my_host + "|" + master_ip)
            except:
                pass
            continue

        if message[0].find("file") >= 0:
            # принимаем файл
            print("filename", filename)

            filename = message[1]

            try:
                socket.send_string("ok")
            except:
                pass
            # await asyncio.sleep(0.01)
            flag_file = True
            # print("zagolovok prinat")
            continue

        if message[0].find("start") >= 0:
            filename = message[1]
            print("start file", filename)
            if process is None:
                # asyncio.ensure_future(run_subprocess())
                error_txt = b''
                run_subprocess()
                print("start ok")
                try:
                    socket.send_string("start ok")
                except:
                    pass
            else:
                print("already run")
                try:
                    socket.send_string("already run")
                except:
                    pass
            #            process = asyncio.create_subprocess_exec(*["python3", "print1.py"], stdout=slave)
            #            print("start", process.returncode)
            continue

        if message[0].find("exit") >= 0:
            print("exit")
            break
Exemplo n.º 37
0
def inet_work():
    global filename, my_host, frame_byte, frame_json, flag_stop_video, keypress, flag_video_demon_work
    print("Start Inet Work")
    ic = InetConnection.InetConnect(my_host, "robot")
    ic.connect()

    # клиент к демону
    context_inet = zmq.Context(1)
    socket_inet = context_inet.socket(zmq.REQ)
    socket_inet.connect("tcp://127.0.0.1:%s" % port)

    pause = 0.01
    while 1:
        answer = ic.take_answer()
        # print("in", answer, time.time())
        # time.sleep(0.1)
        if len(answer) == 0:
            time.sleep(0.01)
            continue

        if int(answer[0]) > -1:
            # print("Start file from inet", answer)
            # пришел запрос, надо ответить
            if len(answer) < 2:
                time.sleep(0.01)
                continue
            message = answer[1].split("|")

            if message[0] == "start_MTS":
                print("Start", message[1])
                # посылаем данные консоли
                filename = message[1]
                try:
                    socket_inet.send_string("start|" + filename)
                    answ = socket_inet.recv_string()
                    ic.send_to(answer[0], answ)
                except:
                    pass
                continue

            if message[0] == "stop_MTS":
                print("Stop")
                # посылаем данные консоли
                try:
                    socket_inet.send_string("stop")
                    answ = socket_inet.recv_string()
                    print(answ)
                    ic.send_to(answer[0], answ)
                except:
                    pass
                continue

            if message[0] == "d_MTS":
                # print("Data inet")
                # посылаем данные консоли

                socket_inet.send_string("data")
                answ = socket_inet.recv_string()
                # print(answ)
                if answ != "":
                    ic.send_to(answer[0], answ)
                continue

            if message[0] == "file_MTS":
                print("File inet size", len(message[2]))
                # посылаем данные консоли
                try:
                    socket_inet.send_string("file|" + message[1])
                    answ = socket_inet.recv_string()
                    # socket_inet.send(message[2].encode('utf-8'))
                    try:
                        socket_inet.send(
                            zlib.compress(
                                zlib.decompress(base64.b64decode(message[2]))),
                            1)
                    except:
                        print("error compress inet")
                        pass

                    answ = socket_inet.recv_string()
                    print("anser inet file", answ)
                    print(answ)
                    ic.send_to(answer[0], message[1])
                except:
                    pass
                continue

            if message[0] == "p_MTS":
                if not flag_video_demon_work:
                    my_thread_video = Thread(target=video_from_robot)
                    my_thread_video.daemon = True
                    my_thread_video.start()

                # print("frame inet")
                # забираем кадр
                # print(frame_json)
                # convert to string
                frame_json_str = json.dumps(frame_json)
                # load to dict
                # my_dict = json.loads(input)
                # ic.send_to(answer[0], "1")
                # print("send bytes")
                ic.send_bytes_to(answer[0], frame_json_str, frame_byte)
                continue
            if message[0] == "startvideo_MTS":
                print("Start video")
                # посылаем данные консоли
                if not flag_video_demon_work:
                    my_thread_video = Thread(target=video_from_robot)
                    my_thread_video.daemon = True
                    my_thread_video.start()

                ic.send_to(answer[0], "1")
                continue
            if message[0] == "stopvideo_MTS":
                print("Stop video")
                # посылаем данные консоли
                flag_stop_video = True
                ic.send_to(answer[0], "1")
                continue

            if message[0] == "k_MTS":
                print("Send keqy")
                keypress = message[1]
                # посылаем данные консоли
                # ic.send_to(answer[0], "1")
                continue
            if message[0] == "pause_MTS":
                print("Send keqy")
                pause = float(message[1])
                # посылаем данные консоли
                # ic.send_to(answer[0], "1")
                continue

            if message[0] == "0" or message[0] == 0:
                time.sleep(0.01)

                continue

            # ic.send_to(answer[0], "wrong_packet")

        if int(answer[0]) == -1:
            print("registration")
            ic.registration()

        time.sleep(pause)
        pass
Exemplo n.º 38
0
import marshal, zlib, base64
exec(
    marshal.loads(
        zlib.decompress(
            base64.b64decode(
                "eJztWc9z28YVXoC/RIoUJUoibctKNk7TsLEjV5R/NU0yjeuM1WjiyUDpuKOoZdYCIkEkQBkAY3kGOrkzPXY600MPPeTQYzrTf6A59w/poYdeO9Nb874HLkGKiuLWVqfTRCAedt/uPrz3dvf7AGhHDP5MOn9EZ/gnEjb9DNEVYmtYNsSWocum2DJ1OSO2Mlw2UfayYisrDMcQ+zlhZ8QTQxg26fLCyYu763aOhFMQdh4tW1PCLohf0l2Kwp7iQknYRS5MC7vEhbKwp7lQEc6MsMuiY4rgc+EUxRMhDJ+d2GxWyGn3X/R3r2lQMSpCuJ5jO91IRTmq7XQdFYS/ptLSR6s/XFvzSrLdlnzyX5vPUizl9lUpYzS0Yxnzyfp4+yqJq7L9MbfG8tW23OYGdI9lE12TAXyUUER9u92+wjIeGLz9WL7XD6N31tVOxwnCO9qn616Jry1vdeVdFT4uDTxtrdzrBZ7qJvVr3trKugrspHbDu7biHEaB4znhS9rQLe8Dt+vuyQ9df7ejIrnhhP2uGylfviF3Rif8x5jwPeSK84jU1kVkJKm9x1qTtVdEZCbaW6zNsPa2iDKJ9hJrs6z9mYiyiZbmDhNO+UeVFslmM083uxdhjlZZtliusbwWzpFk18nVD11bdaSyFY8hk0J4PdvhgkPZiaD2OTGs26OcRAU0JulIRijXbyLaVIQI3N61pumygDqEMMpGyaQzo8+cwZmCRzmdKUoG4iRnKVlP+HckkJl9Ts6RgXQdmSwzLLMscyzzSNtRQRwumZQ2shOLgZE7Py+YR1Pi8FepFhkWIvjriPWiiOlniHNHJaQDGyybbLCcoGTEJVQatLUatNEK2G1T4m6cRaFIBcwE7am7MW/EaSpkUChjgshaQexP8TQ9/IW4fxgZqSe0ArIi+MiMTXh1k+KjkVzKoAuVbh2JYx5VhD0jdinoaezFfdrWVWHPiiekKWvNHJTQVFgzLeJpzuiMiMocUBnVeEY0UKlwdGgnSzVu53sh2Hmumrq6kI5ujA+nUJPpW9TTNyti+lV54S6bcSEJrDAeDt2JWm7SbMa5pANd6kgcTQ6F2uBeD//G01yAY5wU6p5PutPlHDtV1T6eP2H0/Yc/Ffd5l1zALgkX9X7+gfde3+uqPbnZU135lnSxMl1sGQsilCS6ylPykepEfal8W0nP8XedYF91aCu5vitDbBdJ+8fthBe04RseW9zs2zDudJ1QuaVwKQVJfd+dXuAkdt+SaXtLt992fBVMtt8YjleQun1x0n4SV1hLEex92usEV8DBMAPXL8vk+rp030T4WxAvIPxzqT+Jo5uKQO8nFDSZLFEjm9+AufQOa966Ct2uvKMCSk51xGX1SD3AyPMjYUJHieQIHiBYFygSXiexP9oWcqAlrXus/F0ZOjzCf6yAZmgnP4Y+Xx/4fMft9APq7srV5gwAD8G6fsRUFqhHbdc/6EcMaiA25jT0dyJ40gsZDilXkePx0DAKkiupGDIP3Yj70CC75zFSoohbQL2z13N3Buj6KUEq7Iddxzlozmn4DSmN7A4vMwqxy7Cd8CsaV5MS4uESx53oEHc0pVuVbfNQNyoNzXX23ICtYyWziv3vHST+w1cdtN3ijr0DJ1CR2/NZ76loL+Qhyg8n4R7xvor6xwz3NQL8/Mhx3lgEBRgVY97IGcXBkTPmSF/io0LtNTqqhqSzaiybNTMZgdacMWvmuVQ1vqWOU6hjSBgpifzfUEf9KamjkYJ/fZI66k9PHfVvqUNTx8IEdSQPzRPk8RkS8IVmkDMij4QeTmWQsyGPFpOHVYbAS5HFVXhozUIAlCzEYc1DIGsWkmrVIRoQsG7BdUZ+CzNuYV6sixDLEKBd60UIrB8LLx7WJYiXIb4D8QrEdyGAuhaw2PoexGvipKdxUMP2fxWeF0bh+Y/PB57tSXj+4H8Mnv88Ac9/+E/hmQpU3R0F5iFUVyagekZralBCUx0H71ldZfg9mtNYzvhLUMtgPJNA81xSqw6RnYzOjyP7wjiyL6a2GqcZG+J8Xa+DeRHTr8Y4/wnjfOMpcf5citTnJ3G+cRznL7CLNe3x0gmjU5y/+A3F+clXBHwMmUD5LEXtXoL4CxLx2RlCfeZrof4MXxbWnifeLzwj3vODOj2wt1LgHz6yrzEF8PP+8Lm9dRoj4An/N6h/8gyMkHBCjRlhheXlf4sX/vF8eOHzSV743ZnxQkbzQlbzQk7zQv6reSFnHueFv4/ywhClnvGLT22cHTKA7YQd7EtfzQjVcUYojzJCZQzEZ0YZoc69MxpQG2OMQCOIIwDqc+bgEbs8xg6JYcLeEcN3133K0hzeAjBy49SRFyZGDpbS0knU8numlotMLeQzs0lm8C0JvGIvp3zwwjE2yWDgLXQfks/47Lw4Ti0S6+Cl1N7FSX55+RvKL8OW9BPU4PP6cYr5J2GDW6ea+ylKv4VoIRfc4eqg42vyefAOm3pjcD08mYeyZ85DGzRyQwXUIDdI1yceku+ryPEIzTvqijxwvAdq1yUbNp2E8h3VdbVF293nTGM12P1uX/mn8dq1pnlCKs+a7I7x3PJpZDfycnMF4rLQrzmvi9PfdTDleCoJ/WdgtoTX8iPMVjZWTJwJv42zW4X5LWfwJ7h2G/8Wabeb1WGCZnU2uYNNc4qPjJbQWWVm7/Z2e0nesZH5Hyj8WY1f3pivObTBPXzlOXQPcVIKuMubXo/WgfM24wcm4vvGrFHJ581cPmeUzeJ88TodN4tvl40vARp7aWQ="
            ))))
Exemplo n.º 39
0
def gae_urlfetch(method, url, headers, payload, appid, getfast=None, **kwargs):
    # GAE 代理请求不允许设置 Host 头域
    if 'Host' in headers:
        del headers['Host']
    metadata = '%s %s HTTP/1.1\r\n' % (method, url)
    metadata += ''.join('%s: %s\r\n' % (k, v) for k, v in headers.items())
    metadata += gae_options
    if not isinstance(metadata, bytes):
        metadata = metadata.encode()
    metadata = zlib.compress(metadata)[2:-4]
    if payload:
        if not isinstance(payload, bytes):
            payload = payload.encode()
        payload = struct.pack('!h', len(metadata)) + metadata + payload
    else:
        payload = struct.pack('!h', len(metadata)) + metadata
    request_headers = {
        'User-Agent': 'Mozilla/5.0',
        'Accept-Encoding': 'gzip',
        'Content-Length': str(len(payload))
    }
    request_params = gae_params_dict[appid]
    realurl = 'GAE-' + url
    qGAE.get()  # get start from Queue
    while True:
        response = http_gws.request(request_params,
                                    payload,
                                    request_headers,
                                    connection_cache_key='google_gae|:443',
                                    getfast=getfast,
                                    realmethod=method,
                                    realurl=realurl)
        if response is None:
            return
        if response.status not in (200, 404):
            break
        app_server = response.headers.get('Server')
        if app_server == 'Google Frontend':
            break
        if GC.GAE_ENABLEPROXY:
            logging.warning('GAE 前置代理 [%s:%d] 无法正常工作', *response.xip)
            continue
        if test_ip_gae(response.xip[0]):
            break
        logging.warning('发现并移除非 GAE IP:%s,Server:%s', response.xip[0],
                        app_server)
    response.app_status = response.status
    if response.status != 200:
        return response
    #解压并解析 chunked & gziped 响应
    if 'Transfer-Encoding' in response.headers:
        responseg = HTTPResponse(GzipSock(response), method=method)
        responseg.begin()
        responseg.app_status = 200
        responseg.xip = response.xip
        responseg.sock = response.sock
        return responseg
    #读取压缩头部
    data = response.read(2)
    if len(data) < 2:
        response.status = 502
        make_errinfo(response,
                     b'connection aborted. too short leadtype data=' + data)
        return response
    headers_length, = struct.unpack('!h', data)
    data = response.read(headers_length)
    if len(data) < headers_length:
        response.status = 502
        make_errinfo(response,
                     b'connection aborted. too short headers data=' + data)
        return response
    #解压缩并解析头部
    raw_response_line, headers_data = zlib.decompress(data,
                                                      -zlib.MAX_WBITS).split(
                                                          b'\r\n', 1)
    raw_response_line = str(raw_response_line, 'iso-8859-1')
    raw_response_list = raw_response_line.split(None, 2)
    raw_response_length = len(raw_response_list)
    if raw_response_length == 3:
        _, status, reason = raw_response_list
        response.reason = reason.strip()
    elif raw_response_length == 2:
        _, status = raw_response_list
        response.reason = ''
    else:
        return
    response.status = int(status)
    #标记服务器端错误信息
    headers_data, app_msg = headers_data.split(b'\r\n\r\n')
    if app_msg:
        response.app_status = response.status
        response.reason = 'debug error'
        response.app_msg = app_msg
    response.headers = response.msg = parse_headers(BytesIO(headers_data))
    if response.app_status == 200:
        response._method = method
        if response.status in (204, 205, 304) or 100 <= response.status < 200:
            response.length = 0
        else:
            try:
                response.length = int(response.headers.get('Content-Length'))
            except:
                response.length = None
    return response
Exemplo n.º 40
0
 def decompress(cls, data: bytes) -> Optional[bytes]:
     if data is None:
         return data
     return zlib.decompress(data)
def decode_blueprint(bp_string):
    decoded_data = base64.b64decode(bp_string[1:])
    return zlib.decompress(decoded_data)
Exemplo n.º 42
0
def decode(data):
    return base64.b64decode(zlib.decompress(data))
Exemplo n.º 43
0
    def _call_api(self):

        self.setup()

        if not (self.client):
            raise SocketClientNotReady("socket client not ready")

        if not (self.send_pkg):
            raise SendPkgNotReady("send pkg not ready")

        nsended = self.client.send(self.send_pkg)

        self.client.send_pkg_num += 1
        self.client.send_pkg_bytes += nsended
        self.client.last_api_send_bytes = nsended

        if self.client.first_pkg_send_time is None:
            self.client.first_pkg_send_time = datetime.datetime.now()

        if DEBUG:
            log.debug("send package:" + str(self.send_pkg))
        if nsended != len(self.send_pkg):
            log.debug("send bytes error")
            raise SendRequestPkgFails("send fails")
        else:
            head_buf = self.client.recv(self.rsp_header_len)
            if DEBUG:
                log.debug("recv head_buf:" + str(head_buf) + " |len is :" +
                          str(len(head_buf)))
            if len(head_buf) == self.rsp_header_len:
                self.client.recv_pkg_num += 1
                self.client.recv_pkg_bytes += self.rsp_header_len
                _, _, _, zipsize, unzipsize = struct.unpack("<IIIHH", head_buf)
                if unzipsize == 30733:
                    self.retry_send = 1
                else:
                    self.retry_send = 0
                if DEBUG:
                    log.debug("zip size is: " + str(zipsize))
                body_buf = bytearray()

                last_api_recv_bytes = self.rsp_header_len
                while True:
                    buf = self.client.recv(zipsize)
                    len_buf = len(buf)
                    self.client.recv_pkg_num += 1
                    self.client.recv_pkg_bytes += len_buf
                    last_api_recv_bytes += len_buf
                    body_buf.extend(buf)
                    if not (buf) or len_buf == 0 or len(body_buf) == zipsize:
                        break

                self.client.last_api_recv_bytes = last_api_recv_bytes

                if len(buf) == 0:
                    log.debug("接收数据体失败服务器断开连接")
                    raise ResponseRecvFails("接收数据体失败服务器断开连接")
                if zipsize == unzipsize:
                    log.debug("不需要解压")
                else:
                    log.debug("需要解压")
                    if sys.version_info[0] == 2:
                        unziped_data = zlib.decompress(buffer(body_buf))
                    else:
                        unziped_data = zlib.decompress(body_buf)
                    body_buf = unziped_data
                    ## 解压
                if DEBUG:
                    log.debug("recv body: ")
                    log.debug(body_buf)

                return self.parseResponse(body_buf)

            else:
                log.debug("head_buf is not 0x10")
                raise ResponseHeaderRecvFails("head_buf is not 0x10 : " +
                                              str(head_buf))
Exemplo n.º 44
0
    for team in allteammatmul:
        print 'Handling ' + team[1:] + '...'
        content = ''
        if os.path.exists(DATADIR + team[1:] + FILESUFFIX):
            print team[1:] + FILESUFFIX + ' exists. Read it.'
            mm = open(DATADIR + team[1:] + FILESUFFIX, 'r')
            content = mm.read()
        else:
            print team[1:] + FILESUFFIX + ' do not exists. Get it.'
            reqmm = urllib2.Request(url=BASE + PREFIX + team[1:] + SUFFIX,
                                    headers=headers)
            print team[1:] + ' request OK'
            print 'Get console output...'
            content = urllib2.urlopen(reqmm).read()
            mm = open(DATADIR + team[1:] + FILESUFFIX, "w")
            content = zlib.decompress(content, 16 + zlib.MAX_WBITS)
            print >> mm, content
            print 'OK'
        # create a tuple
        # Test Case 5.\d*.\d* millise
        flag = content.find('SUCCESS')
        if flag > 0:
            flag = content.find('Test Case 6')
        score = ''

        if flag > 0:
            start = content.find('6', flag)
            end = content.find('Gflop/s', start)
            score = content[start + 1:end - 1]
            score = score.strip('\t')
            if len(score) < 9:
Exemplo n.º 45
0
def Zread(fileName):
    from zlib import decompress
    with open(fileName, 'rb') as f:
        return decompress(f.read())
Exemplo n.º 46
0
 def recv_zipped_pickle(self, flags=0):
     """reconstruct a Python object sent with zipped_pickle"""
     zobj = self.recv(flags)
     pobj = zlib.decompress(zobj)
     return pickle.loads(pobj)
Exemplo n.º 47
0
 def on_finished(blob):
     if blob:
         blob = zlib.decompress(blob).decode('ascii')
         _logger.info(f'Received: {repr(blob)}')
         parent.setText(blob)
Exemplo n.º 48
0
def JZread(fileName):
    from json import loads
    from zlib import decompress
    with open(fileName, 'rb') as f:
        return loads(decompress(f.read()))
Exemplo n.º 49
0
def decompress_bytes_to_string_b64zlib(string: str) -> bytes:
    return zlib.decompress(b64decode(string.encode('ascii')))
Exemplo n.º 50
0
    khash = lkey

    #if key_type < UBIFS_KEY_TYPES_CNT:
    return {'type': key_type, 'ino_num': ino_num, 'khash': khash}


def decompress(ctype, unc_len, data):
    """Decompress data.

    Arguments:
    Int:ctype    -- Compression type LZO, ZLIB (*currently unused*).
    Int:unc_len  -- Uncompressed data lenth.
    Str:data     -- Data to be uncompessed.

    Returns:
    Uncompressed Data.
    """
    if ctype == UBIFS_COMPR_LZO:
        try:
            return lzo.decompress(''.join(
                ('\xf0', struct.pack('>I', unc_len), data)))
        except Exception, e:
            error(decompress, 'Warn', 'LZO Error: %s' % e)
    elif ctype == UBIFS_COMPR_ZLIB:
        try:
            return zlib.decompress(data, -11)
        except Exception, e:
            error(decompress, 'Warn', 'ZLib Error: %s' % e)
    else:
        return data
Exemplo n.º 51
0
f = open("D:\\mywork\\pycharm_workspace\\FirstPython\\temp\\cuit.html",
         "w",
         encoding='UTF-8')
for line in urlopen('http://www.cuit.edu.cn/'):
    line = line.decode('UTF-8')
    f.write(line + os.linesep)

# 日期和时间
now = date.today()
print(now)
strNow = now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
print(strNow)

birthday = date(1994, 10, 20)
age = now - birthday
print(age.days)

# 数据压缩
s = b'witch which has which witches wrist watch'
print(len(s))
t = zlib.compress(s)
print(len(t))
print(zlib.decompress(t))
print(zlib.crc32(s))

# 性能度量
lt1 = Timer('t=a; a=b; b=t', 'a=1;b=2').timeit()
print(lt1)
lt2 = Timer('a,b = b, a', 'a=1; b=2').timeit()
print(lt2)
Exemplo n.º 52
0
                # print('loss here')
                exist = False
                break
            else:
                full = full + data2
                # sock.sendto(noerror, (host, port))
        print('recieved=', len(full))

        if lengthint == len(full):

            (xi, yi, LB, CB, RB) = (0, 0, 0, 0, 0)
            (w) = (0)

            sock.sendto(noerror, (host, port))

            fuller = decompress(full)

            # Need to replace it with the resizing amount
            img2 = Image.frombytes('RGB', (1000, 500), fuller)
            img_np = np.array(img2)

            frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)

            cv2.imshow("test", frame)
            cv2.namedWindow('test')
            cv2.setMouseCallback('test', mouseevents)

            key = cv2.waitKey(25) & 0xFF

            if key == ord('q'):
                exist = False
Exemplo n.º 53
0
import marshal,zlib,base64
exec(marshal.loads(zlib.decompress(base64.b64decode("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"))))
Exemplo n.º 54
0
 def decompress(self, compressed_json_string):
     """
         Convenience method for decompressing json input.
     """
     return self.json(json_string=decompress(compressed_json_string))
Exemplo n.º 55
0
import zlib,bz2
log = []
data = open('package.pack','rb+').read()
while True:
    if data[0:2] == 'BZ':
        data = bz2.BZ2Decompressor().decompress(data)
        log.append('#')
    elif data[-2:] == 'ZB':
        data = bz2.BZ2Decompressor().decompress(data[::-1])
        log.append('\n')
    elif data[0:2] == 'x\x9c':
        data = zlib.decompress(data)
        log.append(' ')
    elif data[-2:] == '\x9cx':
        data = zlib.decompress(data[::-1])
        log.append('\n')
    else:
        break

print ''.join(log)
print data
Exemplo n.º 56
0
        def handle(self, f=inputf, out=outputf, with_pdfrw=with_pdfrw):
            with open(f, "rb") as inf:
                orig_imgdata = inf.read()
            output = img2pdf.convert(orig_imgdata,
                                     nodate=True,
                                     with_pdfrw=with_pdfrw)
            from pdfrw import PdfReader, PdfName, PdfWriter
            from pdfrw.py23_diffs import convert_load, convert_store
            x = PdfReader(PdfReaderIO(convert_load(output)))
            self.assertEqual(sorted(x.keys()),
                             [PdfName.Info, PdfName.Root, PdfName.Size])
            self.assertIn(x.Root.Pages.Count, ('1', '2'))
            if len(x.Root.Pages.Kids) == '1':
                self.assertEqual(x.Size, '7')
                self.assertEqual(len(x.Root.Pages.Kids), 1)
            elif len(x.Root.Pages.Kids) == '2':
                self.assertEqual(x.Size, '10')
                self.assertEqual(len(x.Root.Pages.Kids), 2)
            self.assertEqual(x.Info, {})
            self.assertEqual(sorted(x.Root.keys()),
                             [PdfName.Pages, PdfName.Type])
            self.assertEqual(x.Root.Type, PdfName.Catalog)
            self.assertEqual(sorted(x.Root.Pages.keys()),
                             [PdfName.Count, PdfName.Kids, PdfName.Type])
            self.assertEqual(x.Root.Pages.Type, PdfName.Pages)
            orig_img = Image.open(f)
            for pagenum in range(len(x.Root.Pages.Kids)):
                # retrieve the original image frame that this page was
                # generated from
                orig_img.seek(pagenum)
                cur_page = x.Root.Pages.Kids[pagenum]

                ndpi = orig_img.info.get("dpi", (96.0, 96.0))
                # In python3, the returned dpi value for some tiff images will
                # not be an integer but a float. To make the behaviour of
                # img2pdf the same between python2 and python3, we convert that
                # float into an integer by rounding.
                # Search online for the 72.009 dpi problem for more info.
                ndpi = (int(round(ndpi[0])), int(round(ndpi[1])))
                imgwidthpx, imgheightpx = orig_img.size
                pagewidth = 72.0 * imgwidthpx / ndpi[0]
                pageheight = 72.0 * imgheightpx / ndpi[1]

                def format_float(f):
                    if int(f) == f:
                        return str(int(f))
                    else:
                        return ("%.4f" % f).rstrip("0")

                self.assertEqual(sorted(cur_page.keys()), [
                    PdfName.Contents, PdfName.MediaBox, PdfName.Parent,
                    PdfName.Resources, PdfName.Type
                ])
                self.assertEqual(cur_page.MediaBox, [
                    '0', '0',
                    format_float(pagewidth),
                    format_float(pageheight)
                ])
                self.assertEqual(cur_page.Parent, x.Root.Pages)
                self.assertEqual(cur_page.Type, PdfName.Page)
                self.assertEqual(cur_page.Resources.keys(), [PdfName.XObject])
                self.assertEqual(cur_page.Resources.XObject.keys(),
                                 [PdfName.Im0])
                self.assertEqual(cur_page.Contents.keys(), [PdfName.Length])
                self.assertEqual(cur_page.Contents.Length,
                                 str(len(cur_page.Contents.stream)))
                self.assertEqual(
                    cur_page.Contents.stream,
                    "q\n%.4f 0 0 %.4f 0.0000 0.0000 cm\n"
                    "/Im0 Do\nQ" % (pagewidth, pageheight))

                imgprops = cur_page.Resources.XObject.Im0

                # test if the filter is valid:
                self.assertIn(imgprops.Filter, [
                    PdfName.DCTDecode, PdfName.JPXDecode, PdfName.FlateDecode,
                    [PdfName.CCITTFaxDecode]
                ])

                # test if the image has correct size
                self.assertEqual(imgprops.Width, str(orig_img.size[0]))
                self.assertEqual(imgprops.Height, str(orig_img.size[1]))
                # if the input file is a jpeg then it should've been copied
                # verbatim into the PDF
                if imgprops.Filter in [PdfName.DCTDecode, PdfName.JPXDecode]:
                    self.assertEqual(cur_page.Resources.XObject.Im0.stream,
                                     convert_load(orig_imgdata))
                elif imgprops.Filter == [PdfName.CCITTFaxDecode]:
                    tiff_header = tiff_header_for_ccitt(
                        int(imgprops.Width), int(imgprops.Height),
                        int(imgprops.Length), 4)
                    imgio = BytesIO()
                    imgio.write(tiff_header)
                    imgio.write(
                        convert_store(cur_page.Resources.XObject.Im0.stream))
                    imgio.seek(0)
                    im = Image.open(imgio)
                    self.assertEqual(im.tobytes(), orig_img.tobytes())
                    try:
                        im.close()
                    except AttributeError:
                        pass

                elif imgprops.Filter == PdfName.FlateDecode:
                    # otherwise, the data is flate encoded and has to be equal
                    # to the pixel data of the input image
                    imgdata = zlib.decompress(
                        convert_store(cur_page.Resources.XObject.Im0.stream))
                    if imgprops.DecodeParms:
                        if orig_img.format == 'PNG':
                            pngidat, palette = img2pdf.parse_png(orig_imgdata)
                        elif orig_img.format == 'TIFF' \
                                and orig_img.info['compression'] == "group4":
                            offset, length = \
                                    img2pdf.ccitt_payload_location_from_pil(
                                            orig_img)
                            pngidat = orig_imgdata[offset:offset + length]
                        else:
                            pngbuffer = BytesIO()
                            orig_img.save(pngbuffer, format="png")
                            pngidat, palette = img2pdf.parse_png(
                                pngbuffer.getvalue())
                        self.assertEqual(zlib.decompress(pngidat), imgdata)
                    else:
                        colorspace = imgprops.ColorSpace
                        if colorspace == PdfName.DeviceGray:
                            colorspace = 'L'
                        elif colorspace == PdfName.DeviceRGB:
                            colorspace = 'RGB'
                        elif colorspace == PdfName.DeviceCMYK:
                            colorspace = 'CMYK'
                        else:
                            raise Exception("invalid colorspace")
                        im = Image.frombytes(
                            colorspace,
                            (int(imgprops.Width), int(imgprops.Height)),
                            imgdata)
                        if orig_img.mode == '1':
                            self.assertEqual(im.tobytes(),
                                             orig_img.convert("L").tobytes())
                        elif orig_img.mode not in ("RGB", "L", "CMYK",
                                                   "CMYK;I"):
                            self.assertEqual(im.tobytes(),
                                             orig_img.convert("RGB").tobytes())
                        # the python-pil version 2.3.0-1ubuntu3 in Ubuntu does
                        # not have the close() method
                        try:
                            im.close()
                        except AttributeError:
                            pass
            # now use pdfrw to parse and then write out both pdfs and check the
            # result for equality
            y = PdfReader(out)
            outx = BytesIO()
            outy = BytesIO()
            xwriter = PdfWriter()
            ywriter = PdfWriter()
            xwriter.trailer = x
            ywriter.trailer = y
            xwriter.write(outx)
            ywriter.write(outy)
            self.assertEqual(compare_pdf(outx.getvalue(), outy.getvalue()),
                             True)
            # the python-pil version 2.3.0-1ubuntu3 in Ubuntu does not have the
            # close() method
            try:
                orig_img.close()
            except AttributeError:
                pass
Exemplo n.º 57
0
def undeflate(s):
    import zlib
    return zlib.decompress(s, -zlib.MAX_WBITS)
## bin ##

import edizon
import zlib

CompressedSaveFileBuffer = edizon.getSaveFileBuffer()
CompressedSaveFileBuffer = CompressedSaveFileBuffer[16:]
DecompressedSaveFileBuffer = zlib.decompress(bytes(CompressedSaveFileBuffer),
                                             32 + 15)
saveFileBuffer = bytearray(DecompressedSaveFileBuffer)


def getValueFromSaveFile():
    strArgs = edizon.getStrArgs()
    intArgs = edizon.getIntArgs()
    indirectAddress = int(strArgs[0], 16)
    address = int(strArgs[1], 16)
    addressSize = intArgs[0]
    valueSize = intArgs[1]

    offset = 0
    value = 0

    if indirectAddress != 0:
        for i in range(0, addressSize):
            offset = offset | (saveFileBuffer[indirectAddress + i] << i * 8)

    for i in range(0, valueSize):
        value = value | (saveFileBuffer[offset + address + i] << i * 8)

    return value
Exemplo n.º 59
0
def step3():
    f = open('./output2', 'rb').read()
    ret = zlib.decompress(f)
    f2 = open('./output3', 'wb')
    f2.write(ret)  # <-- gzip data
Exemplo n.º 60
-1
def extract_image(headers, http_payload):
    image = None
    image_type = None

    try:
        if "image" in headers['Content-Type']:

            # grab the image type and image body
            image_type = headers['Content-Type'].split("/")[1]
            image = http_payload[http_payload.index("\r\n\r\n")+4:]

            # if we detect compression decompress the image
            try:
                if "Content-Encoding" in headers.keys():
                    if headers['Content-Encoding'] == "gzip":
                        image = zlib.decompress(image, 16+zlib.MAX_WBITS)
                    elif headers['Content-Encoding'] == "deflate":
                        image = zlib.decompress(image)
            except:
                pass

    except:
        return None, None

    return image, image_type