def maintainers(package_name: str) -> List[User]: p = Package.objects(id=package_name).first() if not p: return [] users = list(User.objects(id__in=p.maintainers)) return users
def do_summary(): print("Final numbers:") print("Users: {:,}".format(User.objects().count())) print("Packages: {:,}".format(Package.objects().count())) print("Releases: {:,}".format(Release.objects().count())) print("Languages: {:,}".format(ProgrammingLanguage.objects().count())) print("Licenses: {:,}".format(License.objects().count()))
def latest_packages(limit: int = 10) -> List[Package]: latest = Release.objects() \ .only('package_id') \ .order_by('-created_date') \ .limit(50) pids = [r.package_id for r in latest] return list(Package.objects(id__in=pids).limit(limit))
def latest_packages(limit: int = 10) -> List[Package]: latest_releases = Release.objects().only('package_id').order_by( '-created_date').limit(50) package_ids = [r.package_id for r in latest_releases] return [ p for p in Package.objects().filter(id__in=package_ids) if p.description and len(p.description) > 100 ][:limit]
def all_packages(limit: int) -> List[Package]: return list(Package.objects().order_by('-created_date').limit(limit))
def package_count(): return Package.objects().count()
def package_by_name(name: str) -> Optional[Package]: package = Package.objects(id=name.lower().strip()).first() return package
def all_packages(limit: int) -> List[Package]: return list(Package.objects().limit(limit))
def package_by_name(name: str) -> Optional[Package]: if not name: return None return Package.objects().filter(id=name.lower()).first()
def load_package(data: dict, user_lookup: Dict[str, User]): try: info = data.get('info', {}) # TODO: Add keywords? p = Package() p.id = data.get('package_name', '').strip() if not p.id: return # DbSessionFactory.engine.echo = True p.author = info.get('author') p.author_email = info.get('author_email') releases = build_releases(p.id, data.get("releases", {})) if releases: p.created_date = releases[0].created_date maintainers_lookup = get_email_and_name_from_text( info.get('maintainer'), info.get('maintainer_email')) for email, name in maintainers_lookup.items(): user = user_lookup.get(email) if not user: continue p.maintainers.append(user.id) p.summary = info.get('summary') p.description = info.get('description') p.home_page = info.get('home_page') p.docs_url = info.get('docs_url') p.package_url = info.get('package_url') p.author = info.get('author') p.author_email = info.get('author_email') p.license = detect_license(info.get('license')) p.save() if releases: Release.objects.insert(releases) except OverflowError: # What the hell, people just putting fake data in here # Size is terabytes... pass except Exception as x: raise