diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-10-07 15:18:09 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-10-07 15:18:09 (GMT) |
commit | ad04812dee4b65cc2b7580c661b3e94bb50e8c60 (patch) | |
tree | 30ef2aa8e87bb1426902132b7ae99d764bce2842 /sugar_network/resources/volume.py | |
parent | 0455f6f0a8fda5586ac2b708acd68abda864b230 (diff) |
With --lazy-open populate didn't happends
Diffstat (limited to 'sugar_network/resources/volume.py')
-rw-r--r-- | sugar_network/resources/volume.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/sugar_network/resources/volume.py b/sugar_network/resources/volume.py index 440551a..4266fa5 100644 --- a/sugar_network/resources/volume.py +++ b/sugar_network/resources/volume.py @@ -20,6 +20,7 @@ from os.path import join import active_document as ad from active_document import directory as ad_directory from sugar_network import local, node, toolkit +from sugar_network.local import datastore from sugar_network.toolkit.sneakernet import DiskFull from sugar_network.toolkit.collection import Sequence from sugar_network.toolkit import http @@ -77,8 +78,16 @@ class Volume(ad.SingleVolume): def __init__(self, root, document_classes=None, lazy_open=False): if document_classes is None: document_classes = Volume.RESOURCES - ad.SingleVolume.__init__(self, root, document_classes, lazy_open) self._downloader = None + self._populators = coroutine.Pool() + ad.SingleVolume.__init__(self, root, document_classes, lazy_open) + + def close(self): + if self._downloader is not None: + self._downloader.close() + self._downloader = None + self._populators.kill() + ad.SingleVolume.close(self) def notify(self, event): if event['event'] == 'update' and 'props' in event and \ @@ -150,6 +159,17 @@ class Volume(ad.SingleVolume): orig_seq.floor(push_seq.last) out_packet.push(force=True, cmd='sn_commit', sequence=orig_seq) + def _open(self, name, document): + directory = ad.SingleVolume._open(self, name, document) + self._populators.spawn(self._populate, directory) + return directory + + def _populate(self, directory): + for __ in directory.populate(): + coroutine.dispatch() + if directory.metadata.name == 'artifact': + datastore.populate(directory) + def _download_blob(self, url): _logger.debug('Download %r blob', url) |