Completed
Push — master ( 4b6b67...211fa1 )
by Jasper
9s
created

Query.allProjects()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
dl 0
loc 3
rs 10
c 1
b 0
f 0
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