21
21
from __future__ import absolute_import
22
22
from __future__ import unicode_literals
23
23
import hawkey
24
- import dnf .exceptions
25
- import dnf .selector
26
- import dnf .util
27
- import time
28
24
25
+ from hawkey import Query
29
26
from dnf .i18n import ucd
30
27
from dnf .pycomp import basestring
31
28
32
29
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
-
145
30
146
31
def _by_provides (sack , patterns , ignore_case = False , get_query = False ):
147
32
if isinstance (patterns , basestring ):
@@ -157,13 +42,5 @@ def _by_provides(sack, patterns, ignore_case=False, get_query=False):
157
42
return q
158
43
return q .run ()
159
44
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
-
168
45
def _per_nevra_dict (pkg_list ):
169
46
return {ucd (pkg ):pkg for pkg in pkg_list }
0 commit comments