Skip to content

Commit 37f9568

Browse files
m-blahaj-mracek
authored andcommitted
Move Query class from dnf to libdnf/hawkey
1 parent 65cc2ad commit 37f9568

File tree

1 file changed

+1
-124
lines changed

1 file changed

+1
-124
lines changed

dnf/query.py

Lines changed: 1 addition & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -21,127 +21,12 @@
2121
from __future__ import absolute_import
2222
from __future__ import unicode_literals
2323
import hawkey
24-
import dnf.exceptions
25-
import dnf.selector
26-
import dnf.util
27-
import time
2824

25+
from hawkey import Query
2926
from dnf.i18n import ucd
3027
from dnf.pycomp import basestring
3128

3229

33-
class Query(hawkey.Query):
34-
# :api
35-
36-
def available(self):
37-
# :api
38-
return self.filter(reponame__neq=hawkey.SYSTEM_REPO_NAME)
39-
40-
def _unneeded(self, sack, history, debug_solver=False):
41-
goal = dnf.goal.Goal(sack)
42-
goal.push_userinstalled(self.installed(), history)
43-
solved = goal.run()
44-
if debug_solver:
45-
goal.write_debugdata('./debugdata-autoremove')
46-
assert solved
47-
unneeded = goal.list_unneeded()
48-
return self.filter(pkg=unneeded)
49-
50-
def downgrades(self):
51-
# :api
52-
return self.filter(downgrades=True)
53-
54-
def duplicated(self):
55-
# :api
56-
installed_name = self.installed()._name_dict()
57-
duplicated = []
58-
for name, pkgs in installed_name.items():
59-
if len(pkgs) > 1:
60-
for x in range(0, len(pkgs)):
61-
dups = False
62-
for y in range(x+1, len(pkgs)):
63-
if not ((pkgs[x].evr_cmp(pkgs[y]) == 0)
64-
and (pkgs[x].arch != pkgs[y].arch)):
65-
duplicated.append(pkgs[y])
66-
dups = True
67-
if dups:
68-
duplicated.append(pkgs[x])
69-
return self.filter(pkg=duplicated)
70-
71-
def extras(self):
72-
# :api
73-
# anything installed but not in a repo is an extra
74-
avail_dict = self.available()._pkgtup_dict()
75-
inst_dict = self.installed()._pkgtup_dict()
76-
extras = []
77-
for pkgtup, pkgs in inst_dict.items():
78-
if pkgtup not in avail_dict:
79-
extras.extend(pkgs)
80-
return self.filter(pkg=extras)
81-
82-
def filter(self, *args, **kwargs):
83-
# :api
84-
return super(Query, self).filter(*args, **kwargs)
85-
86-
def installed(self):
87-
# :api
88-
return self.filter(reponame=hawkey.SYSTEM_REPO_NAME)
89-
90-
def latest(self, limit=1):
91-
# :api
92-
if limit == 1:
93-
return self.filter(latest_per_arch=True)
94-
else:
95-
pkgs_na = self._na_dict()
96-
latest_pkgs = []
97-
for pkg_list in pkgs_na.values():
98-
pkg_list.sort(reverse=True)
99-
if limit > 0:
100-
latest_pkgs.extend(pkg_list[0:limit])
101-
else:
102-
latest_pkgs.extend(pkg_list[-limit:])
103-
return self.filter(pkg=latest_pkgs)
104-
105-
def upgrades(self):
106-
# :api
107-
return self.filter(upgrades=True)
108-
109-
def _name_dict(self):
110-
d = {}
111-
for pkg in self:
112-
d.setdefault(pkg.name, []).append(pkg)
113-
return d
114-
115-
def _na_dict(self):
116-
d = {}
117-
for pkg in self.run():
118-
key = (pkg.name, pkg.arch)
119-
d.setdefault(key, []).append(pkg)
120-
return d
121-
122-
def _pkgtup_dict(self):
123-
return _per_pkgtup_dict(self.run())
124-
125-
def _recent(self, recent):
126-
now = time.time()
127-
recentlimit = now - (recent*86400)
128-
recent = [po for po in self if int(po.buildtime) > recentlimit]
129-
return self.filter(pkg=recent)
130-
131-
def _nevra(self, *args):
132-
args_len = len(args)
133-
if args_len == 3:
134-
return self.filter(name=args[0], evr=args[1], arch=args[2])
135-
if args_len == 1:
136-
nevra = hawkey.split_nevra(args[0])
137-
elif args_len == 5:
138-
nevra = args
139-
else:
140-
raise TypeError("nevra() takes 1, 3 or 5 str params")
141-
return self.filter(
142-
name=nevra.name, epoch=nevra.epoch, version=nevra.version,
143-
release=nevra.release, arch=nevra.arch)
144-
14530

14631
def _by_provides(sack, patterns, ignore_case=False, get_query=False):
14732
if isinstance(patterns, basestring):
@@ -157,13 +42,5 @@ def _by_provides(sack, patterns, ignore_case=False, get_query=False):
15742
return q
15843
return q.run()
15944

160-
161-
def _per_pkgtup_dict(pkg_list):
162-
d = {}
163-
for pkg in pkg_list:
164-
d.setdefault(pkg.pkgtup, []).append(pkg)
165-
return d
166-
167-
16845
def _per_nevra_dict(pkg_list):
16946
return {ucd(pkg):pkg for pkg in pkg_list}

0 commit comments

Comments
 (0)