本文整理汇总了Python中models.package_version.PackageVersion.from_archive方法的典型用法代码示例。如果您正苦于以下问题:Python PackageVersion.from_archive方法的具体用法?Python PackageVersion.from_archive怎么用?Python PackageVersion.from_archive使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类models.package_version.PackageVersion
的用法示例。
在下文中一共展示了PackageVersion.from_archive方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _reload_version
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def _reload_version(self, key):
"""Reload a single package version from its tarball."""
version = PackageVersion.get(key)
with closing(cloud_storage.read(version.storage_path)) as f:
new_version = PackageVersion.from_archive(
f, uploader=version.uploader)
with models.transaction():
# Reload the old version in case anything (e.g. sort order) changed.
version = PackageVersion.get(key)
package = version.package
# We don't load new_version.package.latest_version here for two
# reasons. One is to avoid a needless data store lookup; the other
# is because it's possible that that version is being reloaded in
# another transaction and thus in a weird transitional state.
latest_version_key = Package.latest_version.get_value_for_datastore(
package)
if latest_version_key == key:
package.latest_version = new_version
new_version.created = version.created
new_version.downloads = version.downloads
new_version.sort_order = version.sort_order
version.delete()
new_version.put()
package.put()
memcache.incr('versions_reloaded')
示例2: create
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def create(self, id, **kwargs):
"""Create a new package version.
This creates a single package version. It will also create all the
package metadata if that doesn't already exist. The package archive is
uploaded to cloud storage separately.
If the user doesn't own the package or isn't logged in with admin
privileges, this will return a 403. If the package already has a version
with this number, or if the version is invalid, this will return a 400.
Arguments:
id: The id of the package in cloud storage.
"""
try:
route = handlers.request().route
if 'id' in route: del route['id']
try:
with closing(cloud_storage.read('tmp/' + id)) as f:
version = PackageVersion.from_archive(
f, uploaderEmail=handlers.get_oauth_user().email())
except (KeyError, files.ExistenceError):
handlers.http_error(
403, "Package upload " + id + " does not exist.")
# If the package for this version already exists, make sure we're an
# uploader for it. If it doesn't, we're fine to create it anew.
if version.package.is_saved():
if not version.package.has_uploader_email(
handlers.get_oauth_user().email()):
handlers.http_error(
403, "You aren't an uploader for package '%s'." %
version.package.name)
elif version.package.has_version(version.version):
message = 'Package "%s" already has version "%s".' % \
(version.package.name, version.version)
handlers.http_error(400, message)
if self._should_update_latest_version(version):
version.package.latest_version = version
else:
version.package.latest_version = version
cloud_storage.modify_object(version.storage_path,
acl='public-read',
copy_source='tmp/' + id)
with models.transaction():
version.package.put()
version.put()
version.package.invalidate_cache()
deferred.defer(self._compute_version_order, version.package.name)
return handlers.json_success('%s %s uploaded successfully.' %
(version.package.name, version.version))
finally:
cloud_storage.delete_object('tmp/' + id)
示例3: test_loads_readme_from_archive
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def test_loads_readme_from_archive(self):
pubspec = {'name': 'test-package', 'version': '1.0.0'}
archive = self.tar_package(pubspec, {
'README': 'This is a README.',
})
version = PackageVersion.from_archive(StringIO(archive),
uploader=self.admin_user())
self.assertEqual('This is a README.', version.readme.text)
示例4: test_imports_from_archive
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def test_imports_from_archive(self):
pubspec = {'name': 'test-package', 'version': '1.0.0'}
archive = self.tar_package(pubspec, {
'lib/foo.dart': '',
'lib/bar/foo.dart': '',
'lib/bar/src/foo.dart': '',
'lib/zip': '',
'lib/src/foo.dart': '',
})
version = PackageVersion.from_archive(StringIO(archive),
uploader=self.admin_user())
self.assertEqual(['bar/foo.dart', 'bar/src/foo.dart', 'foo.dart'],
version.libraries)
示例5: _reload_version
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def _reload_version(self, key):
"""Reload a single package version from its tarball."""
version = PackageVersion.get(key)
logging.info('Reloading %s %s' % (version.package.name, version.version))
with closing(cloud_storage.read(version.storage_path)) as f:
new_version = PackageVersion.from_archive(
f, uploader=version.uploader)
with models.transaction():
# Reload the old version in case anything (e.g. sort order) changed.
version = PackageVersion.get(key)
package = version.package
# We don't load new_version.package.latest_version here for two
# reasons. One is to avoid a needless data store lookup; the other
# is because it's possible that that version is being reloaded in
# another transaction and thus in a weird transitional state.
latest_version_key = Package.latest_version.get_value_for_datastore(
package)
if latest_version_key == key:
package.latest_version = new_version
new_version.created = version.created
new_version.downloads = version.downloads
new_version.sort_order = version.sort_order
version.delete()
new_version.put()
# Only save the package if its latest version has been updated.
# Otherwise, its latest version may be being updated in parallel,
# causing icky bugs.
if latest_version_key == key:
package.put()
package.invalidate_cache()
count = memcache.incr('versions_reloaded')
logging.info('%s/%s versions reloaded' %
(count, memcache.get('versions_to_reload')))
示例6: create
# 需要导入模块: from models.package_version import PackageVersion [as 别名]
# 或者: from models.package_version.PackageVersion import from_archive [as 别名]
def create(self, package_id, id, format='html', **kwargs):
"""Create a new package version.
This creates a single package version. It will also create all the
package metadata if that doesn't already exist. The package archive is
uploaded to cloud storage separately.
If the user doesn't own the package or isn't logged in with admin
privileges, this will return a 403. If the package already has a version
with this number, or if the version is invalid, this will redirect to
the new version form.
Arguments:
id: The id of the package in cloud storage.
"""
try:
is_json = format == 'json'
route = handlers.request().route
if 'id' in route: del route['id']
package = handlers.request().maybe_package
if package and handlers.get_current_user() not in package.uploaders:
handlers.request().error(
403, "You aren't an uploader for package '%s'." %
package.name)
elif not handlers.is_current_user_admin():
handlers.request().error(
403, "Only admins may create packages.")
try:
with closing(cloud_storage.read('tmp/' + id)) as f:
version = PackageVersion.from_archive(
f, uploader=handlers.get_current_user())
except (KeyError, files.ExistenceError):
handlers.request().error(
403, "Package upload " + id + " does not exist.")
if version.package.is_saved():
if handlers.get_current_user() not in version.package.uploaders:
handlers.request().error(
403, "You aren't an uploader for package '%s'." %
version.package.name)
elif version.package.has_version(version.version):
message = 'Package "%s" already has version "%s".' % \
(version.package.name, version.version)
if is_json: handlers.json_error(400, message)
handlers.flash(message)
url = handlers.request().url(
action='new', package_id=version.package.name)
raise cherrypy.HTTPRedirect(url)
if self._should_update_latest_version(version):
version.package.latest_version = version
else:
version.package.latest_version = version
cloud_storage.modify_object(version.storage_path,
acl='public-read',
copy_source='tmp/' + id)
with models.transaction():
version.package.put()
version.put()
deferred.defer(self._compute_version_order, version.package.name)
message = '%s %s uploaded successfully.' % \
(version.package.name, version.version)
if is_json:
cherrypy.response.headers['Content-Type'] = 'application/json'
return json.dumps({"success": {"message": message}})
handlers.flash(message)
raise cherrypy.HTTPRedirect('/packages/%s' % version.package.name)
finally:
cloud_storage.delete_object('tmp/' + id)