def all_redirects() -> List[Redirect]: session: Session = DbSession.create() try: return session.query(Redirect).order_by( Redirect.created_date.desc()).all() finally: session.close()
def insert_a_package(): p = Package() p.id = input("Package name: ") p.summary = input("Package summary: ") p.author_name = input("Author name: ") p.author_email = input("Author email: ") p.license = input("license: ") r1 = Release() print("Release 1: ") r1.major_ver = int(input('Major version:')) r1.minor_ver = int(input('Minor version:')) r1.build_ver = int(input('Build version:')) r1.size = 100_000 r2 = Release() print("Release 2: ") r2.major_ver = int(input('Major version:')) r2.minor_ver = int(input('Minor version:')) r2.build_ver = int(input('Build version:')) r2.size = 200_000 p.releases.append(r1) p.releases.append(r2) session = DbSession.create() session.add(p) session.commit()
def find_package_by_name(package_name: str) -> Optional[Package]: session = DbSession.factory() # .options(subqueryload(Package.releases)) return session.query(Package) \ .filter(Package.id == package_name) \ .first()
def get_page_by_id(page_id: int) -> Optional[Page]: if not page_id: return None session = DbSession.create() try: return session.query(Page).filter(Page.id == page_id).first() finally: session.close()
def get_page(url: str) -> Optional[Page]: if url: url = url.lower().strip() session = DbSession.create() try: return session.query(Page).filter(Page.url == url).first() finally: session.close()
def create_user(email: str, name: str, password: str) -> User: user = User() user.name = name user.email = email.lower().strip() user.hashed_password = hash_text(password) session = DbSession.factory() session.add(user) session.commit() return user
def get_redirect(url: str) -> Optional[Redirect]: if url: url = url.lower().strip() session: Session = DbSession.create() try: return session.query(Redirect).filter( Redirect.short_url == url).first() finally: session.close()
def get_redirect_by_id(redirect_id: int) -> Optional[Redirect]: if not redirect_id: return None session: Session = DbSession.create() try: return session.query(Redirect).filter( Redirect.id == redirect_id).first() finally: session.close()
def create_redirect(name: str, short_url: str, url: str, user_email: str): session: Session = DbSession.create() redirect = Redirect() redirect.url = url.strip() redirect.short_url = short_url.strip().lower() redirect.name = name.strip() redirect.creating_user = user_email session.add(redirect) session.commit() return redirect
def migrate_users(): if MongoUser.objects().count(): return session = DbSession.factory() sql_users = session.query(SqlUser).all() for sut in sql_users: su: SqlUser = sut u = MongoUser() u.created_date = su.created_date u.hashed_password = su.hashed_password u.name = su.name u.email = su.email u.save()
def login_user(email: str, password: str) -> Optional[User]: if not email: return None email = email.lower().strip() session = DbSession.factory() user = session.query(User).filter(User.email == email).first() if not user: return None if not verify_hash(user.hashed_password, password): return None return user
def get_page(url: str, allow_shared=False) -> Optional[Page]: if url: url = url.lower().strip() session = DbSession.create() try: query = session.query(Page).filter(Page.url == url) if not allow_shared: query = query.filter( sa.or_(Page.is_shared == None, Page.is_shared == False)) page = query.first() return page finally: session.close()
def update_redirect(redirect_id, name, short_url, url): session: Session = DbSession.create() try: redirect = session.query(Redirect).filter( Redirect.id == redirect_id).first() if not redirect: return redirect.name = name.strip() redirect.short_url = short_url.lower().strip() redirect.url = url.strip() session.commit() finally: session.close()
def latest_releases(limit=10) -> List[Package]: session = DbSession.factory() releases = session.query(Release).order_by(Release.created_date.desc()).limit(limit * 2) packages_in_order = [r.package_id for r in releases] package_ids = {r.package_id for r in releases} # gives distict packages using set packages = {p.id: p for p in session.query(Package).filter(Package.id.in_(package_ids))} results = [] for r in releases: if len(results) >= limit: break results.append(packages[r.package_id]) return results
def create_page(title: str, url: str, contents: str, user_email: str) -> Page: session = DbSession.create() url = url.lower().strip() if contents: contents = contents.strip() if title: title = title.strip() page = Page() page.title = title page.url = url page.contents = contents page.creating_user = user_email session.add(page) session.commit() return page
def migrate_releases(): if MongoRelease.objects().count(): return session = DbSession.factory() sql_releases = session.query(SqlRelease).all() for srp in sql_releases: sr: SqlRelease = srp r = MongoRelease() r.created_date = sr.created_date r.comment = sr.comment r.major_ver = sr.major_ver r.minor_ver = sr.minor_ver r.build_ver = sr.build_ver r.url = sr.url r.size = sr.size r.package_id = sr.package_id r.save()
def update_page(page_id, title, url, contents): session = DbSession.create() try: page = session.query(Page).filter(Page.id == page_id).first() if not page or not url: return url = url.lower().strip() if contents: contents = contents.strip() if title: title = title.strip() page.title = title page.url = url page.contents = contents session.commit() finally: session.close()
def update_page(page_id: int, title: str, url: str, contents: str, is_shared: bool): session = DbSession.create() try: page = session.query(Page).filter(Page.id == page_id).first() if not page or not url: return url = url.lower().strip() if contents: contents = contents.strip() if title: title = title.strip() page.title = title page.url = url page.contents = contents page.is_shared = is_shared session.commit() return page finally: session.close()
def migrate_packages(): if MongoPackage.objects().count(): return session = DbSession.factory() sql_packages = session.query(SqlPackage).all() for sup in sql_packages: sp: SqlPackage = sup p = MongoPackage() p.id = sp.id p.created_date = sp.created_date p.summary = sp.summary p.description = sp.description p.home_page = sp.home_page p.docs_url = sp.docs_url p.package_url = sp.package_url p.author = sp.author_name p.author_email = sp.author_email p.license = sp.license p.maintainers = [] # Find, load, and copy over maintainer IDs. p.save()
def release_count() -> int: session = DbSession.factory() return session.query(Release).count()
def all_packages(limit: int) -> List[Package]: session = DbSession.factory() return list(session.query(Package).limit(limit))
def all_pages() -> List[Page]: session = DbSession.create() try: return session.query(Page).order_by(Page.created_date.desc()).all() finally: session.close()
def init_dbs(): db_file = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', 'db', 'pypi.sqlite')) DbSession.global_init(db_file) mongo_setup.global_init(db_name='pypi_nosql')
def user_count() -> int: session = DbSession.create() return session.query(User).count()
def package_count() -> int: session = DbSession.create() return session.query(Package).count()
def release_count() -> int: session = DbSession.create() return session.query(Release).count()
def find_package_by_name(package_name: str) -> Optional[Package]: session = DbSession.create() return session.query(Package) \ .filter(Package.id == package_name) \ .first()
def user_count() -> int: session = DbSession.factory() return session.query(User).count()
def package_count() -> int: session = DbSession.factory() return session.query(Package).count()
def find_user_by_id(user_id: int) -> Optional[User]: session = DbSession.factory() return session.query(User).filter(User.id == user_id).first()