Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Side by Side Diff: chrome/common/extensions/docs/server2/zip_file_system.py

Issue 10825067: Extensions Docs Server: Apps samples page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import json
6 import os
7
8 import file_system
9 from io import BytesIO
10 from future import Future
11 from zipfile import ZipFile
12
13 class ZipFileSystem(file_system.FileSystem):
not at google - send to devlin 2012/07/30 11:24:05 This is super cool, though it would be nice to re-
cduvall 2012/08/02 01:14:53 So I switched to fetching individual files and dir
not at google - send to devlin 2012/08/02 13:27:48 Ah. I wonder if that's because we're getting rate
14 """FileSystem implementation which fetches resources from a zip file.
15 """
16 def __init__(self, fetcher):
17 self._fetcher = fetcher
18 self._GetZip()
19
20 def _GetZip(self):
21 self._version = self.Stat('zipball').version
22 self._zip_file = ZipFile(BytesIO(self._fetcher.Fetch('zipball')))
23
24 def _ReadFile(self, path):
25 prefix = self._zip_file.namelist()[0][:-1]
26 return self._zip_file.read(prefix + path)
27
28 def _ListDir(self, path):
29 filenames = self._zip_file.namelist()
30 # Take out parent directory name (GoogleChrome-chrome-app-samples-c78a30f)
31 filenames = [f[len(filenames[0]) - 1:] for f in filenames]
32 # Remove the path of the directory we're listing from the filenames.
33 filenames = [f[len(path):] for f in filenames
34 if f != path and f.startswith(path)]
35 # Remove all files not directly in this directory.
36 return [f for f in filenames if f[:-1].count('/') == 0]
37
38 def Read(self, paths, binary=False):
39 if self.Stat('zipball').version != self._version:
40 self._GetZip()
not at google - send to devlin 2012/07/30 11:24:05 You should try to put these expensive operations (
cduvall 2012/08/02 01:14:53 Done.
41 result = {}
42 for path in paths:
43 if path.endswith('/'):
44 result[path] = self._ListDir(path)
45 else:
46 result[path] = self._ReadFile(path)
47 return Future(value=result)
48
49 def Stat(self, path):
50 return self.StatInfo(json.loads(self._fetcher.Fetch('commits'))[0]['sha'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698