Source code for repoman.common.sources.copr
#!/usr/bin/env python
"""
Usage::
https?://${copr_host}/*
Handles copr build urls
"""
import logging
import re
import requests
from . import ArtifactSource
from .url import URLSource
from ..utils import split
logger = logging.getLogger(__name__)
[docs]class CoprURLSource(ArtifactSource):
__doc__ = __doc__
DEFAULT_CONFIG = {
'copr_host_re': r'copr\.fedorainfracloud\.org',
}
CONFIG_SECTION = 'CoprURLSource'
[docs] def expand(self, source_str):
art_list = []
if not re.match('https://%s/' % self.config.get('copr_host_re'),
source_str):
return '', art_list
# remove filters
_, url = source_str.split('://', 1)
url, filters_str = split(url, ':', 1)
lvl1_url = 'https://%s' % url
lvl1_page = requests.get(lvl1_url).text
lvl2_reg = re.compile(r'(?<=href=")[^"]+/results/[^"]+(?=")')
logger.info('Parsing Copr URL: %s', lvl1_url)
lvl2_urls = [
URLSource.get_link(lvl1_url, match.group())
for match in (lvl2_reg.search(i) for i in lvl1_page.splitlines())
if match
]
for url in lvl2_urls:
logger.info(' Got 2nd level URL: %s', url)
art_list.extend(
URLSource(
config=self.config,
stores=self.stores
).expand_page(url)
)
if not art_list:
logger.warn(' No packages found')
logger.info(' Done')
return filters_str, art_list