Skip to content

Instantly share code, notes, and snippets.

@mouseroot
Created April 30, 2013 16:39
Show Gist options
  • Save mouseroot/5489951 to your computer and use it in GitHub Desktop.
Save mouseroot/5489951 to your computer and use it in GitHub Desktop.
Zip based filesystem
#ZipFS
import zipfile
import os
class FileSystem:
def __init__(self,name="fs.zip"):
self.drive = name
self.apps = []
self.zipfs = None
self.name = "ZipFS"
def open(self):
try:
self.zipfs = zipfile.ZipFile(self.drive,mode="a")
except IOError:
print "Error opening",self.drive
def writeFile(self,source,dest):
data = open(source,mode="rb").read()
if data:
self.zipfs.writestr(dest,data)
else:
print "Error writing",source,"to",dest
def writeStr(self,s,dest):
self.zipfs.writestr(dest,s)
def readFile(self,source):
data = self.getZip().read(source)
if data:
return data
else:
return None
def exists(self,src):
try:
if self.zipfs.read(src) > 0:
return True
except KeyError:
return False
def close(self):
self.zipfs.close()
def getZip(self):
return self.zipfs
def getApps(self):
return self.apps
def installApp(self,app):
app_file = "Apps/%s" % app
self.writeFile(app_file,app_file)
self.getApps().append(app.replace(".py",""))
def runApp(self,app,args):
if self.exists("Apps/%s" % app):
app_file = self.readFile("Apps/%s" % app)
app_code = compile(app_file,"<app_%s>" % app,"exec")
namespace = {}
exec app_code in namespace
namespace["app_main"](self,args)
def createDrive(self,name="drive.zip",pwd=None):
drive = FileSystem(name=name)
drive.open()
for item in os.listdir("Drive/"):
if os.path.isdir("Drive/%s" % item):
print "Folder",item
for i in os.listdir("Drive/%s" % item):
print "%s/%s" % (item,i)
else:
print item
drive.close()
def mountDrive(self,source="Drive/",pwd=None):
print "Mounting",source
drive = FileSystem(name="drive.zip")
drive.open()
for item in os.listdir(source):
file_item = "%s%s/" % (source,item)
if os.path.isdir(file_item):
print "Folder",file_item
for i in os.listdir(file_item):
item_src = "%s%s" % (file_item,i)
drive.writeFile(item_src,item_src)
else:
print item
drive.close()
#Testing
if __name__ == "__main__":
fs = FileSystem()
fs.open()
#fs.installApp("shell.py")
#fs.runApp("shell.py",[1,2,3,4])
#fs.createDrive()
fs.mountDrive(source="Drive/")
fs.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment