Skip to content

Commit e8fc956

Browse files
committed
support .create() as well as .save()
fix errors for list of dicts
1 parent 1825c4b commit e8fc956

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

solvebio/errors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ def __init__(self, message=None, response=None):
5555
self.message += '\nError (%s): ' % k
5656

5757
if isinstance(v, list):
58-
self.message += ', '.join(self.json_body[k])
58+
self.message += ', '.join([
59+
str(i) for i in self.json_body[k]])
5960
else:
6061
self.message += self.json_body[k]
6162
del self.json_body[k]

solvebio/resource/datasettemplate.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,33 @@ class DatasetTemplate(CreateableAPIResource, ListableAPIResource,
2626

2727
def __init__(self, *args, **kwargs):
2828
super(DatasetTemplate, self).__init__(*args, **kwargs)
29+
self.fields = self.__init_fields(**kwargs)
2930

30-
self.fields = kwargs.get('fields') or []
31-
for attr in dir(self):
32-
if attr.startswith('__'):
31+
@classmethod
32+
def __init_fields(cls, *args, **kwargs):
33+
fields = kwargs.get("fields") or []
34+
for attr in dir(cls):
35+
if attr.startswith("__"):
3336
continue
3437

35-
func = getattr(self, attr, None)
38+
func = getattr(cls, attr, None)
3639
if getattr(func, "field", None):
37-
self.fields.append(func.field)
40+
fields.append(func.field)
3841

39-
def get_or_create(self, **params):
40-
objects = self.all(**params).solve_objects()
42+
return fields
43+
44+
@classmethod
45+
def create(cls, **params):
46+
params["fields"] = cls.__init_fields(**params)
47+
return super(DatasetTemplate, cls).create(**params)
48+
49+
@classmethod
50+
def get_or_create_by_name(cls, name, **params):
51+
objects = cls.all(name=name, **params).solve_objects()
4152
if objects:
42-
# TODO: Raise exception?
4353
return objects[0]
44-
else:
45-
return self.create(**params)
54+
55+
return cls.create(name=name, **params)
4656

4757
@property
4858
def import_params(self):
@@ -64,6 +74,8 @@ def get_function_body(func):
6474
source_lines = inspect.getsourcelines(func)[0]
6575
source_lines = dropwhile(lambda x: x.startswith('@'), source_lines)
6676
source = ''.join(source_lines)
77+
# Remove comments
78+
source = re.sub(r'(?m)^ *#.*\n?', '', source)
6779
pattern = re.compile(
6880
r'(async\s+)?def\s+\w+\s*\(.*?\)\s*:\s*(.*)',
6981
flags=re.S)

0 commit comments

Comments
 (0)