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 """ 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