-
Notifications
You must be signed in to change notification settings - Fork 17
/
database.py
155 lines (129 loc) · 4.95 KB
/
database.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import logging
from ..model import Extension
from ..model import SubmissionFileType
from ..model import SubmissionFileTypeExtension
from ._query import select_extension_by_name
from ._query import select_submission_file_type_by_name
from ._query import select_submission_type_extension_by_name
logger = logging.getLogger('RAMP-DATABASE')
# Add functions: add entries in the database
def add_extension(session, name):
"""Adding a new extension, e.g., 'py'.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
name : str
The name of the extension to add if it does not exist.
"""
extension = select_extension_by_name(session, name)
if extension is None:
extension = Extension(name=name)
logger.info('Adding {}'.format(extension))
session.add(extension)
session.commit()
def add_submission_file_type(session, name, is_editable, max_size):
"""Add a new submission file type, e.g., ('code', True, 10 ** 5).
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
name : str
The name of file type.
is_editable: bool
If the file type is editable.
max_size : int
The maximum size of the file.
Notes
-----
Should be preceded by adding extensions.
"""
submission_file_type = select_submission_file_type_by_name(session, name)
if submission_file_type is None:
submission_file_type = SubmissionFileType(
name=name, is_editable=is_editable, max_size=max_size)
logger.info('Adding {}'.format(submission_file_type))
session.add(submission_file_type)
session.commit()
def add_submission_file_type_extension(session, type_name, extension_name):
"""Adding a new submission file type extension, e.g., ('code', 'py').
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
type_name : str
The file type.
extension_name : str
The extension name.
Notes
-----
Should be preceded by adding submission file types and extensions.
"""
type_extension = select_submission_type_extension_by_name(
session, type_name, extension_name
)
if type_extension is None:
submission_file_type = select_submission_file_type_by_name(session,
type_name)
extension = select_extension_by_name(session, extension_name)
type_extension = SubmissionFileTypeExtension(
type=submission_file_type,
extension=extension
)
logger.info('Adding {}'.format(type_extension))
session.add(type_extension)
session.commit()
# Get functions: get information from the database
def get_extension(session, extension_name):
"""Get extension from the database.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
extension_name : str or None
The name of the extension to query. If None, all the extensions will be
queried.
Returns
-------
extension : :class:`ramp_database.model.Extension` or list of \
:class:`ramp_database.model.Extension`
The queried extension.
"""
return select_extension_by_name(session, extension_name)
def get_submission_file_type(session, type_name):
"""Get submission file type from the database.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
type_name : str or None
The name of the type to query. If None, all the file type will be
queried.
Returns
-------
extension : :class:`ramp_database.model.SubmissionFileType` or list of \
:class:`ramp_database.model.SubmissionFileType`
The queried submission file type.
"""
return select_submission_file_type_by_name(session, type_name)
def get_submission_file_type_extension(session, type_name, extension_name):
"""Get submission file type extension from the database.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
type_name : str or None
The name of the type to query. If None, all the file type will be
queried.
extension_name : str or None
The name of the extension to query. If None, all the extension will be
queried.
Returns
-------
extension : :class:`ramp_database.model.SubmissionFileTypeExtension` or \
list of :class:`ramp_database.model.SubmissionFileTypeExtension`
The queried submission file type.
"""
return select_submission_type_extension_by_name(
session, type_name, extension_name
)