Skip to content

Commit f6fcd18

Browse files
Merge pull request #137 from fabiansinz/master
Work on fetch objects and rename `_prepare`
2 parents dcb37ab + 155510a commit f6fcd18

File tree

6 files changed

+33
-47
lines changed

6 files changed

+33
-47
lines changed

datajoint/fetch.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,14 @@ def from_to(self, fro, to):
5555
@copy_first
5656
def order_by(self, *args):
5757
if len(args) > 0:
58-
self.behavior['order_by'] = self.behavior['order_by'] if self.behavior['order_by'] is not None else []
59-
namepat = re.compile(r"\s*(?P<name>\w+).*")
60-
for a in args: # remove duplicates
61-
name = namepat.match(a).group('name')
62-
pat = re.compile(r"%s(\s*$|\s+(\S*\s*)*$)" % (name,))
63-
self.behavior['order_by'] = [e for e in self.behavior['order_by'] if not pat.match(e)]
64-
self.behavior['order_by'].extend(args)
58+
self.behavior['order_by'] = args
6559
return self
6660

6761
@copy_first
6862
def as_dict(self):
6963
self.behavior['as_dict'] = True
7064
return self
7165

72-
7366
@copy_first
7467
def limit_to(self, limit):
7568
self.behavior['limit'] = limit

datajoint/relation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ def size_on_disk(self):
264264
return ret['Data_length'] + ret['Index_length']
265265

266266
# --------- functionality used by the decorator ---------
267-
def prepare(self):
267+
def _prepare(self):
268268
"""
269269
This method is overridden by the user_relations subclasses. It is called on an instance
270270
once when the class is declared.

datajoint/schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def __call__(self, cls):
5353
# trigger table declaration by requesting the heading from an instance
5454
instance = cls()
5555
instance.heading
56-
instance.prepare()
56+
instance._prepare()
5757
return cls
5858

5959
@property

datajoint/user_relations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def table_name(self):
3434
"""
3535
return '#' + from_camel_case(self.__class__.__name__)
3636

37-
def prepare(self):
37+
def _prepare(self):
3838
"""
3939
Checks whether the instance has a property called `contents` and inserts its elements.
4040
"""

tests/schema.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Subject(dj.Manual):
3636
[1552, '1552', 'mouse', '2015-06-15', ''],
3737
[1553, '1553', 'mouse', '2016-07-01', '']]
3838

39-
def prepare(self):
39+
def _prepare(self):
4040
self.insert(self.contents, ignore_errors=True)
4141

4242
@schema
@@ -45,19 +45,18 @@ class Language(dj.Lookup):
4545
definition = """
4646
# languages spoken by some of the developers
4747
48-
entry_id : int
49-
---
5048
name : varchar(40) # name of the developer
5149
language : varchar(40) # language
50+
---
5251
"""
5352

5453
contents = [
55-
(0, 'Fabian', 'English'),
56-
(1, 'Edgar', 'English'),
57-
(2, 'Dimitri', 'English'),
58-
(3, 'Dimitri', 'Ukrainian'),
59-
(4, 'Fabian', 'German'),
60-
(5, 'Edgar', 'Japanese'),
54+
('Fabian', 'English'),
55+
('Edgar', 'English'),
56+
('Dimitri', 'English'),
57+
('Dimitri', 'Ukrainian'),
58+
('Fabian', 'German'),
59+
('Edgar', 'Japanese'),
6160
]
6261

6362
@schema

tests/test_fetch.py

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ def test_order_by(self):
4141

4242
for ord_name, ord_lang in itertools.product(*2 * [['ASC', 'DESC']]):
4343
cur = self.lang.fetch.order_by('name ' + ord_name, 'language ' + ord_lang)()
44-
langs.sort(key=itemgetter(2), reverse=ord_lang == 'DESC')
45-
langs.sort(key=itemgetter(1), reverse=ord_name == 'DESC')
44+
langs.sort(key=itemgetter(1), reverse=ord_lang == 'DESC')
45+
langs.sort(key=itemgetter(0), reverse=ord_name == 'DESC')
4646
for c, l in zip(cur, langs):
4747
assert_true(np.all(cc == ll for cc, ll in zip(c, l)), 'Sorting order is different')
4848

@@ -51,8 +51,8 @@ def test_order_by_default(self):
5151
langs = schema.Language.contents
5252

5353
cur = self.lang.fetch.order_by('language', 'name DESC')()
54-
langs.sort(key=itemgetter(1), reverse=True)
55-
langs.sort(key=itemgetter(2), reverse=False)
54+
langs.sort(key=itemgetter(0), reverse=True)
55+
langs.sort(key=itemgetter(1), reverse=False)
5656

5757
for c, l in zip(cur, langs):
5858
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
@@ -62,8 +62,8 @@ def test_order_by_direct(self):
6262
langs = schema.Language.contents
6363

6464
cur = self.lang.fetch(order_by=['language', 'name DESC'])
65-
langs.sort(key=itemgetter(1), reverse=True)
66-
langs.sort(key=itemgetter(2), reverse=False)
65+
langs.sort(key=itemgetter(0), reverse=True)
66+
langs.sort(key=itemgetter(1), reverse=False)
6767
for c, l in zip(cur, langs):
6868
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
6969

@@ -72,8 +72,8 @@ def test_limit_to(self):
7272
langs = schema.Language.contents
7373

7474
cur = self.lang.fetch.limit_to(4)(order_by=['language', 'name DESC'])
75-
langs.sort(key=itemgetter(1), reverse=True)
76-
langs.sort(key=itemgetter(2), reverse=False)
75+
langs.sort(key=itemgetter(0), reverse=True)
76+
langs.sort(key=itemgetter(1), reverse=False)
7777
assert_equal(len(cur), 4, 'Length is not correct')
7878
for c, l in list(zip(cur, langs))[:4]:
7979
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
@@ -83,8 +83,8 @@ def test_from_to(self):
8383
langs = schema.Language.contents
8484

8585
cur = self.lang.fetch.from_to(2, 6)(order_by=['language', 'name DESC'])
86-
langs.sort(key=itemgetter(1), reverse=True)
87-
langs.sort(key=itemgetter(2), reverse=False)
86+
langs.sort(key=itemgetter(0), reverse=True)
87+
langs.sort(key=itemgetter(1), reverse=False)
8888
assert_equal(len(cur), 4, 'Length is not correct')
8989
for c, l in list(zip(cur, langs[2:6])):
9090
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
@@ -94,27 +94,26 @@ def test_iter(self):
9494
langs = schema.Language.contents
9595

9696
cur = self.lang.fetch.order_by('language', 'name DESC')
97-
langs.sort(key=itemgetter(1), reverse=True)
98-
langs.sort(key=itemgetter(2), reverse=False)
99-
for (_, name, lang), (_, tname, tlang) in list(zip(cur, langs)):
97+
langs.sort(key=itemgetter(0), reverse=True)
98+
langs.sort(key=itemgetter(1), reverse=False)
99+
for (name, lang), (tname, tlang) in list(zip(cur, langs)):
100100
assert_true(name == tname and lang == tlang, 'Values are not the same')
101101

102102
def test_keys(self):
103103
"""test key iterator"""
104104
langs = schema.Language.contents
105-
langs.sort(key=itemgetter(1), reverse=True)
106-
langs.sort(key=itemgetter(2), reverse=False)
105+
langs.sort(key=itemgetter(0), reverse=True)
106+
langs.sort(key=itemgetter(1), reverse=False)
107107

108-
cur = self.lang.fetch.order_by('language', 'name DESC')['entry_id']
109-
cur2 = [e['entry_id'] for e in self.lang.fetch.order_by('language', 'name DESC').keys()]
108+
cur = self.lang.fetch.order_by('language', 'name DESC')['name','language']
109+
cur2 = list(self.lang.fetch.order_by('language', 'name DESC').keys())
110110

111-
keys, _, _ = list(zip(*langs))
112-
for k, c, c2 in zip(keys, cur, cur2):
113-
assert_true(k == c == c2, 'Values are not the same')
111+
for c, c2 in zip(zip(*cur), cur2):
112+
assert_true(c == tuple(c2.values()), 'Values are not the same')
114113

115114
def test_fetch1(self):
116-
key = {'entry_id': 0}
117-
true = schema.Language.contents[0]
115+
key = {'name': 'Edgar', 'language':'Japanese'}
116+
true = schema.Language.contents[-1]
118117

119118
dat = (self.lang & key).fetch1()
120119
for k, (ke, c) in zip(true, dat.items()):
@@ -126,8 +125,3 @@ def test_copy(self):
126125
f2 = f.order_by('name')
127126
assert_true(f.behavior['order_by'] is None and len(f2.behavior['order_by']) == 1, 'Object was not copied')
128127

129-
def test_overwrite(self):
130-
"""Test whether order_by overwrites duplicates"""
131-
f = self.lang.fetch.order_by('name DeSc ')
132-
f2 = f.order_by('name')
133-
assert_true(f2.behavior['order_by'] == ['name'], 'order_by attribute was not overwritten')

0 commit comments

Comments
 (0)