Question

I found out that Pyglet has class with which I can load zip files: http://www.pyglet.org/doc/api/pyglet.resource.ZIPLocation-class.html

There is how I use it:

myzip = zipfile.ZipFile('testzip.zip')
myzip = pyglet.resource.ZIPLocation(myzip, '')
myzip = myzip.open('test.png', mode='rb')

But what it returns is <StringIO.StringIO instance at 0x41ec670> so I can't use in the way I use pyglet.resource.image. I get actually that file as plain text. Is there any method to convert it?

Was it helpful?

Solution 2

Ok, I guess it's still unimplemented. The only thing that class does is to return file's data in StringIO. And doing that with pure zipfile is even easier. This is how I did that:

# That class is necessary, it's explained why in Loader's class comments
class Cleaner(dict):
   pass

class Loader:
    def __init__(self):
        self.sprite = pyglet.resource.image(self.unzip('test.png'))
        self.sprite = pyglet.resource.image(self.unzip('test2.png'))
    def unzip(self, file):
        zip = zipfile.ZipFile('test.zip')
        file = open('.buffer', 'wb')
        # without 'b' it wont work on windows
        file.write(zip.read(file))
        file.close()
        '''now the tricky part: pyglet save every file with weakref to
           dont load save thing more than once, it wouldnt let to load
           files from buffer so we need to block it somehow after each
           file reading i do that with empty dict class (dont need to import weakref)'''
        pyglet.resource._default_loader._cached_images = Cleaner()
        return 'data/.buffer'

OTHER TIPS

I've tried to figure out how to load files from ZIPs, too.

Apparently, ZIPLocation is mostly used for Pyglet to find its way around ZIPs you open with it. You can open ZIP files by adding them to the path:

pyglet.resource.path.append("./spam.zip")
pyglet.resource.reindex()
data = pyglet.resource.file("spam.txt").read()#Imagine spam.txt is inside the zip.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top