def get_package_data(name, package=None): """Retrieve metadata information for the given package name""" if not package: package = models.Package(name=name) releases = {} else: releases = package.get_all_releases() client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi') versions = client.package_releases(package.name, True) # package_releases() method is case-sensitive, if nothing found # then we search for it # XXX: Ask pypi to make it case-insensitive? if not versions: for item in client.search({'name': name}): if name.lower() == item['name'].lower(): package.name = name = item['name'] break else: logger.info("No packages found matching %r", name) return # Retry retrieving the versions with the new/correct name versions = client.package_releases(package.name, True) # Save the package if it is new if not package.pk: package.save() for version in versions: release, files = releases.get(version, (None, {})) if not release: release = models.Release(package=package, version=version) release.save() data = client.release_data(package.name, release.version) release_form = forms.PypiReleaseDataForm(data, instance=release) if release_form.is_valid(): release_form.save() release_files = client.package_urls(package.name, release.version) for info in release_files: release_file = files.get(info['filename']) if not release_file: release_file = models.ReleaseFile( release=release, filename=info['filename']) release_file.python_version = info['python_version'] release_file.filetype = info['packagetype'] release_file.url = info['url'] release_file.size = info['size'] release_file.md5_digest = info['md5_digest'] release_file.save() package.update_timestamp = now() package.save() return package
def deactivate_credential(request, access_key): credential = get_object_or_404(models.Credential, creator=request.user, access_key=access_key) credential.deactivated = now() credential.save() return redirect('permissions:credential_index')
def get_package_data(name, package=None): """Retrieve metadata information for the given package name""" if not package: package = models.Package(name=name) releases = {} else: releases = package.get_all_releases() client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi') versions = client.package_releases(package.name, True) # package_releases() method is case-sensitive, if nothing found # then we search for it # XXX: Ask pypi to make it case-insensitive? if not versions: for item in client.search({'name': name}): if name.lower() == item['name'].lower(): package.name = name = item['name'] break else: logger.info("No packages found matching %r", name) return # Retry retrieving the versions with the new/correct name versions = client.package_releases(package.name, True) # Save the package if it is new if not package.pk: package.save() for version in versions: release, files = releases.get(version, (None, {})) if not release: release = models.Release(package=package, version=version) release.save() data = client.release_data(package.name, release.version) release_form = forms.PypiReleaseDataForm(data, instance=release) if release_form.is_valid(): release_form.save() release_files = client.package_urls(package.name, release.version) for info in release_files: release_file = files.get(info['filename']) if not release_file: release_file = models.ReleaseFile(release=release, filename=info['filename']) release_file.python_version = info['python_version'] release_file.filetype = info['packagetype'] release_file.url = info['url'] release_file.size = info['size'] release_file.md5_digest = info['md5_digest'] release_file.save() package.update_timestamp = now() package.save() return package
def get_package_data(name, package=None): """Retrieve metadata information for the given package name""" if not package: package = models.Package(name=name) releases = {} else: releases = package.get_all_releases() client = get_xmlrpc_client() versions = client.package_releases(package.name, True) # package_releases() method is case-sensitive, if nothing found # then we search for it # XXX: Ask pypi to make it case-insensitive? names = get_search_names(name) if not versions: for item in client.search({'name': names}): if item['name'].lower() in [n.lower() for n in names]: package.name = name = item['name'] break else: logger.info("No packages found matching %r", name) return # Retry retrieving the versions with the new/correct name versions = client.package_releases(package.name, True) # If the matched package differs from the name we tried to retrieve then # retry to fetch the package from the database. if package.name != name: try: package = models.Package.objects.get(name=package.name) except models.Package.objects.DoesNotExist: pass # Save the package if it is new if not package.pk: package.save() for version in versions: release, files = releases.get(version, (None, {})) if not release: release = models.Release(package=package, version=version) release.save() data = client.release_data(package.name, release.version) release_form = forms.PypiReleaseDataForm(data, instance=release) if release_form.is_valid(): release_form.save() release_files = client.package_urls(package.name, release.version) for info in release_files: release_file = files.get(info['filename']) if not release_file: release_file = models.ReleaseFile( release=release, filename=info['filename']) release_file.python_version = info['python_version'] release_file.filetype = info['packagetype'] release_file.url = info['url'] release_file.size = info['size'] release_file.md5_digest = info['md5_digest'] release_file.save() package.update_timestamp = now() package.save() return package
def get_package_data(name, package=None): """Retrieve metadata information for the given package name""" if not package: package = models.Package(name=name) releases = {} else: releases = package.get_all_releases() if settings.LOCALSHOP_HTTP_PROXY: proxy = ProxiedTransport() proxy.set_proxy(settings.LOCALSHOP_HTTP_PROXY) client = xmlrpclib.ServerProxy( settings.LOCALSHOP_PYPI_URL,transport=proxy) else: client = xmlrpclib.ServerProxy(settings.LOCALSHOP_PYPI_URL) versions = client.package_releases(package.name, True) # package_releases() method is case-sensitive, if nothing found # then we search for it # XXX: Ask pypi to make it case-insensitive? names = get_search_names(name) if not versions: for item in client.search({'name': names}): if item['name'].lower() in [n.lower() for n in names]: package.name = name = item['name'] break else: logger.info("No packages found matching %r", name) return # Retry retrieving the versions with the new/correct name versions = client.package_releases(package.name, True) # If the matched package differs from the name we tried to retrieve then # retry to fetch the package from the database. if package.name != name: try: package = models.Package.objects.get(name=package.name) except models.Package.objects.DoesNotExist: pass # Save the package if it is new if not package.pk: package.save() for version in versions: release, files = releases.get(version, (None, {})) if not release: release = models.Release(package=package, version=version) release.save() data = client.release_data(package.name, release.version) release_form = forms.PypiReleaseDataForm(data, instance=release) if release_form.is_valid(): release_form.save() release_files = client.package_urls(package.name, release.version) # Some packages are hosted elsewhere, and PyPi can't provide release # infos. Create a fake structure to get workable proxy feature. (MD5 # check can't be performed by task downloader) url = data['download_url'] if not release_files and url: filename = url.split('/')[-1] release_files.append({ 'filename': filename, 'url': url, 'python_version': 'source', 'packagetype': 'Source', 'size': 0, 'md5_digest': EXTERNAL_MD5_FLAG, }) for info in release_files: release_file = files.get(info['filename']) if not release_file: release_file = models.ReleaseFile( release=release, filename=info['filename']) release_file.python_version = info['python_version'] release_file.filetype = info['packagetype'] release_file.url = info['url'] release_file.size = info['size'] release_file.md5_digest = info['md5_digest'] release_file.save() package.update_timestamp = now() package.save() return package