def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. Publishing is staged in a temporary directory and must use commit() to make the publishing permanent. :param units: A list of units to publish. :type units: iterable :return: The absolute path to the manifest. :rtype: str """ # make the parent dir and a temp dir within it parent_path = os.path.normpath(os.path.join(self.publish_dir, '../')) pathlib.mkdir(parent_path) self.tmp_dir = mkdtemp(dir=parent_path) with UnitWriter(self.tmp_dir) as writer: for unit in units: self.publish_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(self.tmp_dir, manifest_id) manifest.units_published(writer) manifest.write() self.staged = True return manifest.path
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. Publishing is staged in a temporary directory and must use commit() to make the publishing permanent. :param units: A list of units to publish. :type units: iterable :return: The absolute path to the manifest. :rtype: str """ # make the parent dir and a temp dir within it parent_path = os.path.normpath(os.path.join(self.publish_dir, '../')) pathlib.mkdir(parent_path) self.tmp_dir = mkdtemp(dir=parent_path) with UnitWriter(self.tmp_dir) as writer: for unit in units: self.publish_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(self.tmp_dir, manifest_id) manifest.units_published(writer) manifest.write() self.staged = True return manifest.path
def test_write(self): # Test manifest = Manifest() units = [] for i in range(0, self.NUM_UNITS): units.append({i:i+1}) manifest.write(self.tmp_dir, units) # Verify path = os.path.join(self.tmp_dir, Manifest.FILE_NAME) self.assertTrue(os.path.exists(path)) fp = gzip.open(path) s = fp.read() units_in = json.loads(s) self.verify(units, units_in)
def test_round_trip(self): # Test manifest = Manifest() units = [] for i in range(0, self.NUM_UNITS): units.append({i:i+1}) manifest.write(self.tmp_dir, units) cfg = DownloaderConfig('http') downloader = factory.get_downloader(cfg) manifest = Manifest() path = os.path.join(self.tmp_dir, Manifest.FILE_NAME) url = 'file://%s' % path units_in = manifest.read(url, downloader) # Verify self.verify(units, units_in)
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. Publishing is staged in a temporary directory and must use commit() to make the publishing permanent. :param units: A list of units to publish. :type units: iterable :return: The absolute path to the manifest. :rtype: str """ pathlib.mkdir(self.publish_dir) self.tmp_dir = mkdtemp(dir=self.publish_dir) units_path = pathlib.join(self.tmp_dir, UNITS_FILE_NAME) manifest_path = pathlib.join(self.tmp_dir, MANIFEST_FILE_NAME) with UnitWriter(units_path) as writer: for unit in units: self.publish_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(manifest_id) manifest.set_units(writer) manifest_path = manifest.write(manifest_path) self.staged = True return manifest_path
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. Publishing is staged in a temporary directory and must use commit() to make the publishing permanent. :param units: A list of units to publish. :type units: iterable :return: The absolute path to the manifest. :rtype: str """ pathlib.mkdir(self.publish_dir) self.tmp_dir = mkdtemp(dir=self.publish_dir) units_path = pathlib.join(self.tmp_dir, UNITS_FILE_NAME) manifest_path = pathlib.join(self.tmp_dir, MANIFEST_FILE_NAME) with UnitWriter(units_path) as writer: for unit in units: self.publish_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(manifest_id) manifest.set_units(writer) manifest_path = manifest.write(manifest_path) self.staged = True return manifest_path
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. :param units: A list of units to publish. :type units: iterable :return: The path to the written manifest. :rtype: str """ manifest_path = super(self.__class__, self).publish(units) manifest = Manifest() manifest.read(manifest_path) manifest.publishing_details[constants.BASE_URL] = \ pathlib.url_join(self.base_url, self.alias[0], self.repo_id) manifest.write(manifest_path) return manifest_path
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. :param units: A list of units to publish. :type units: iterable :return: The path to the written manifest. :rtype: str """ manifest_path = super(self.__class__, self).publish(units) manifest = Manifest() manifest.read(manifest_path) manifest.publishing_details[constants.BASE_URL] = \ pathlib.url_join(self.base_url, self.alias[0], self.repo_id) manifest.write(manifest_path) return manifest_path
def write_manifest(self, units): """ Write the manifest (units.json) for the specified list of units. :param units: A list of units. :type units: list :return: The absolute path to the written manifest file. :rtype: str """ manifest = Manifest() dir_path = join(self.publish_dir, self.repo_id) mkdir(dir_path) return manifest.write(dir_path, units)
def test_write(self): # Test manifest = Manifest() units = [] for i in range(0, self.NUM_UNITS): units.append({i: i + 1}) manifest.write(self.tmp_dir, units) # Verify path = os.path.join(self.tmp_dir, Manifest.FILE_NAME) self.assertTrue(os.path.exists(path)) fp = gzip.open(path) s = fp.read() fp.close() manifest = json.loads(s) units_in = [] for unit_file in manifest['unit_files']: path = os.path.join(self.tmp_dir, unit_file) fp = gzip.open(path) units_in.extend(json.load(fp)) fp.close() self.assertEqual(manifest['total_units'], self.NUM_UNITS) self.verify(units, units_in)
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. :param units: A list of units to publish. :type units: iterable """ dir_path = join(self.publish_dir, self.repo_id) units_path = os.path.join(dir_path, UNITS_FILE_NAME) manifest_path = os.path.join(dir_path, MANIFEST_FILE_NAME) mkdir(dir_path) with UnitWriter(units_path) as writer: for unit in units: self.link_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(manifest_id) manifest.set_units(writer) manifest_path = manifest.write(manifest_path) return manifest_path
def publish(self, units): """ Publish the specified units. Writes the units.json file and symlinks each of the files associated to the unit.storage_path. :param units: A list of units to publish. :type units: iterable """ dir_path = join(self.publish_dir, self.repo_id) units_path = os.path.join(dir_path, UNITS_FILE_NAME) manifest_path = os.path.join(dir_path, MANIFEST_FILE_NAME) mkdir(dir_path) with UnitWriter(units_path) as writer: for unit in units: self.link_unit(unit) writer.add(unit) manifest_id = str(uuid4()) manifest = Manifest(manifest_id) manifest.set_units(writer) manifest_path = manifest.write(manifest_path) return manifest_path