This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/data/oci_model/package.py

46 lines
1.8 KiB
Python
Raw Normal View History

2017-03-23 01:51:28 +00:00
from cnr.models.package_base import get_media_type, manifest_media_type
from peewee import prefetch
2017-03-23 04:21:21 +00:00
from data import model
2017-03-23 01:51:28 +00:00
from data.database import Repository, Namespace, Tag, ManifestListManifest
2017-03-23 04:21:21 +00:00
from data.oci_model import tag as tag_model
2017-03-23 01:51:28 +00:00
def list_packages_query(namespace=None, media_type=None, search_query=None, username=None):
""" List and filter repository by search query. """
fields = [model.repository.SEARCH_FIELDS.name.name]
2017-03-23 01:51:28 +00:00
if search_query is not None:
repositories = model.repository.get_app_search(search_query,
username=username,
search_fields=fields,
2017-03-23 01:51:28 +00:00
limit=50)
repo_query = (Repository
.select(Repository, Namespace.username)
.join(Namespace, on=(Repository.namespace_user == Namespace.id))
.where(Repository.id << [repo.id for repo in repositories]))
else:
repo_query = (Repository
.select(Repository, Namespace.username)
.join(Namespace, on=(Repository.namespace_user == Namespace.id))
.where(Repository.visibility == model.repository.get_public_repo_visibility(),
Repository.kind == Repository.kind.get_id('application')))
if namespace:
repo_query = (repo_query
.where(Namespace.username == namespace))
tag_query = (Tag
.select()
.where(Tag.tag_kind == Tag.tag_kind.get_id('release'))
.order_by(Tag.lifetime_start))
if media_type:
2017-03-23 04:21:21 +00:00
tag_query = tag_model.filter_tags_by_media_type(tag_query, media_type)
2017-03-23 01:51:28 +00:00
2017-03-23 04:21:21 +00:00
tag_query = tag_model.tag_alive_oci(tag_query)
2017-03-23 01:51:28 +00:00
query = prefetch(repo_query, tag_query)
return query