Skip to content

Commit 17717ff

Browse files
m-blahaj-mracek
authored andcommitted
Move Subject class from dnf to libdnf/hawkey
1 parent 59992a6 commit 17717ff

File tree

1 file changed

+1
-151
lines changed

1 file changed

+1
-151
lines changed

dnf/subject.py

Lines changed: 1 addition & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -21,155 +21,5 @@
2121
from __future__ import absolute_import
2222
from __future__ import print_function
2323
from __future__ import unicode_literals
24-
from dnf.util import is_glob_pattern, logger
25-
from dnf.i18n import _
24+
from hawkey import Subject
2625

27-
import dnf.base
28-
import dnf.selector
29-
import hawkey
30-
31-
32-
class Subject(object):
33-
# :api
34-
35-
def __init__(self, pkg_spec, ignore_case=False):
36-
self.subj = hawkey.Subject(pkg_spec) # internal subject
37-
self.icase = ignore_case
38-
39-
@property
40-
def _filename_pattern(self):
41-
return self.subj.pattern.startswith('/') or self.subj.pattern.startswith('*/')
42-
43-
@property
44-
def _pattern(self):
45-
return self.subj.pattern
46-
47-
def _is_arch_specified(self, solution):
48-
if solution['nevra'] and solution['nevra'].arch:
49-
return is_glob_pattern(solution['nevra'].arch)
50-
return False
51-
52-
def get_nevra_possibilities(self, forms=None):
53-
# :api
54-
"""
55-
:param forms: list of hawkey NEVRA forms like [hawkey.FORM_NEVRA, hawkey.FORM_NEVR]
56-
:return: generator for every possible nevra. Each possible nevra is represented by Class
57-
NEVRA object (libdnf) that have attributes name, epoch, version, release, arch
58-
"""
59-
60-
kwargs = {}
61-
if forms:
62-
kwargs['form'] = forms
63-
return self.subj.nevra_possibilities(**kwargs)
64-
65-
def _get_nevra_solution(self, sack, with_nevra=True, with_provides=True, with_filenames=True,
66-
forms=None):
67-
"""
68-
Try to find first real solution for subject if it is NEVRA
69-
@param sack:
70-
@param forms:
71-
@return: dict with keys nevra and query
72-
"""
73-
kwargs = {}
74-
if forms:
75-
kwargs['form'] = forms
76-
solution = self.subj.get_best_solution(sack, icase=self.icase, with_nevra=with_nevra,
77-
with_provides=with_provides,
78-
with_filenames=with_filenames, **kwargs)
79-
solution['query'] = dnf.query.Query(query=solution['query'])
80-
return solution
81-
82-
def get_best_query(self, sack, with_nevra=True, with_provides=True, with_filenames=True,
83-
forms=None):
84-
# :api
85-
86-
solution = self._get_nevra_solution(sack, with_nevra=with_nevra,
87-
with_provides=with_provides,
88-
with_filenames=with_filenames,
89-
forms=forms)
90-
return solution['query']
91-
92-
def get_best_selector(self, sack, forms=None, obsoletes=True, reponame=None, reports=False):
93-
# :api
94-
95-
solution = self._get_nevra_solution(sack, forms=forms)
96-
if solution['query']:
97-
q = solution['query']
98-
q = q.filter(arch__neq="src")
99-
if obsoletes and solution['nevra'] and solution['nevra'].has_just_name():
100-
q = q.union(sack.query().filter(obsoletes=q))
101-
installed_query = q.installed()
102-
if reports:
103-
self._report_installed(installed_query)
104-
if reponame:
105-
q = q.filter(reponame=reponame).union(installed_query)
106-
if q:
107-
return self._list_or_query_to_selector(sack, q)
108-
109-
return dnf.selector.Selector(sack)
110-
111-
def _get_best_selectors(self, base, forms=None, obsoletes=True, reponame=None, reports=False,
112-
solution=None):
113-
if solution is None:
114-
solution = self._get_nevra_solution(base.sack, forms=forms)
115-
q = solution['query']
116-
q = q.filter(arch__neq="src")
117-
if len(q) == 0:
118-
if reports and not self.icase:
119-
base._report_icase_hint(self._pattern)
120-
return []
121-
q = self._apply_security_filters(q, base)
122-
if not q:
123-
return []
124-
125-
if not self._filename_pattern and is_glob_pattern(self._pattern) \
126-
or solution['nevra'] and solution['nevra'].name is None:
127-
with_obsoletes = False
128-
129-
if obsoletes and solution['nevra'] and solution['nevra'].has_just_name():
130-
with_obsoletes = True
131-
installed_query = q.installed()
132-
if reponame:
133-
q = q.filter(reponame=reponame)
134-
available_query = q.available()
135-
installed_relevant_query = installed_query.filter(
136-
name=[pkg.name for pkg in available_query])
137-
if reports:
138-
self._report_installed(installed_relevant_query)
139-
q = available_query.union(installed_relevant_query)
140-
sltrs = []
141-
for name, pkgs_list in q._name_dict().items():
142-
if with_obsoletes:
143-
pkgs_list = pkgs_list + base.sack.query().filter(
144-
obsoletes=pkgs_list).run()
145-
sltrs.append(self._list_or_query_to_selector(base.sack, pkgs_list))
146-
return sltrs
147-
else:
148-
if obsoletes and solution['nevra'] and solution['nevra'].has_just_name():
149-
q = q.union(base.sack.query().filter(obsoletes=q))
150-
installed_query = q.installed()
151-
152-
if reports:
153-
self._report_installed(installed_query)
154-
if reponame:
155-
q = q.filter(reponame=reponame).union(installed_query)
156-
if not q:
157-
return []
158-
159-
return [self._list_or_query_to_selector(base.sack, q)]
160-
161-
def _apply_security_filters(self, query, base):
162-
query = base._merge_update_filters(query, warning=False)
163-
if not query:
164-
logger.warning(_('No security updates for argument "{}"').format(self._pattern))
165-
return query
166-
167-
@staticmethod
168-
def _report_installed(iterable_packages):
169-
for pkg in iterable_packages:
170-
dnf.base._msg_installed(pkg)
171-
172-
@staticmethod
173-
def _list_or_query_to_selector(sack, list_or_query):
174-
sltr = dnf.selector.Selector(sack)
175-
return sltr.set(pkg=list_or_query)

0 commit comments

Comments
 (0)