Completed
Push — master ( 9821e6...398a65 )
by Jasper
8s
created

Query   A

Complexity

Total Complexity 25

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Importance

Changes 6
Bugs 0 Features 0
Metric Value
c 6
b 0
f 0
dl 0
loc 85
rs 10
wmc 25

20 Methods

Rating   Name   Duplication   Size   Complexity  
A __len__() 0 4 2
A __iter__() 0 4 2
A __init__() 0 5 1
A _fieldAllValues() 0 2 1
A _fieldHasValue() 0 2 1
A statistics() 0 2 1
A __contains__() 0 4 2
A latest() 0 2 1
A byModality() 0 3 1
A getFields() 0 2 1
A bySubject() 0 3 1
A byLocation() 0 3 1
A all() 0 2 1
A byUser() 0 3 1
A byProject() 0 3 1
A allModalities() 0 3 1
A byApproval() 0 3 1
A allProjects() 0 3 1
A allUsers() 0 3 1
A copiesOf() 0 8 3
1
from collections import namedtuple
2
QueryField = namedtuple('QueryField', ['name', 'value', 'all'])
3
4
class Query(object):
5
6
    def __init__(self, dependencies):
7
        self.fields = []
8
        self.repository = dependencies.getRepository()
9
        self.location = dependencies.getLocationFactory()
10
        self.cachedResults = None
11
12
    def __iter__(self):
13
        if self.cachedResults is None:
14
            self.cachedResults = self.repository.inquire(self)
15
        return self.cachedResults.__iter__()
16
17
    def __len__(self):
18
        if self.cachedResults is None:
19
            self.cachedResults = self.repository.inquire(self)
20
        return len(self.cachedResults)
21
22
    def __contains__(self, key):
23
        if self.cachedResults is None:
24
            self.cachedResults = self.repository.inquire(self)
25
        return key in self.cachedResults
26
27
    def _fieldHasValue(self, field, value):
28
        return QueryField(field, value=value, all=False)
29
30
    def _fieldAllValues(self, field):
31
        return QueryField(field, value=None, all=True)
32
33
    def getFields(self):
34
        return self.fields
35
36
    def byLocation(self, val):
37
        val = self.location.completeString(val)
38
        return self.repository.byLocation(val)
39
40
    def all(self):
41
        return self.repository.all()
42
43
    def latest(self):
44
        return self.repository.latest()
45
46
    def statistics(self):
47
        return self.repository.statistics()
48
49
    def byModality(self, val):
50
        self.fields.append(self._fieldHasValue('modality', val))
51
        return self
52
53
    def byProject(self, val):
54
        self.fields.append(self._fieldHasValue('project', val))
55
        return self
56
57
    def byUser(self, val):
58
        self.fields.append(self._fieldHasValue('user', val))
59
        return self
60
61
    def bySubject(self, val):
62
        self.fields.append(self._fieldHasValue('subject', val))
63
        return self
64
65
    def byApproval(self, val):
66
        self.fields.append(self._fieldHasValue('approval', val))
67
        return self
68
69
    def allModalities(self):
70
        self.fields.append(self._fieldAllValues('modality'))
71
        return self
72
73
    def allProjects(self):
74
        self.fields.append(self._fieldAllValues('project'))
75
        return self
76
77
    def allUsers(self):
78
        self.fields.append(self._fieldAllValues('user'))
79
        return self
80
81
    def copiesOf(self, target):
82
        checksum = target.provenance.get('hash', None)
83
        filesize = target.provenance.get('size', 0)
84
        if checksum and filesize > 0:
85
            self.fields.append(self._fieldHasValue('hash', checksum))
86
        else:
87
            self.cachedResults = []
88
        return self
89