Skip to content

Commit 2aa855a

Browse files
authored
Merge pull request #91 from seatable/add-more-functions
Update main.py
2 parents 70a0fda + 9427ba4 commit 2aa855a

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

seatable_api/main.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ def _metadata_server_url(self):
140140
def _table_server_url(self):
141141
return self.dtable_server_url + '/api/v1/dtables/' + self.dtable_uuid + '/tables/'
142142

143+
def _view_server_url(self):
144+
return self.dtable_server_url + '/api/v1/dtables/' + self.dtable_uuid + '/views/'
145+
143146
def _row_server_url(self):
144147
return self.dtable_server_url + '/api/v1/dtables/' + self.dtable_uuid + '/rows/'
145148

@@ -256,6 +259,19 @@ def get_metadata(self):
256259
data = parse_response(response)
257260
return data.get('metadata')
258261

262+
263+
@check_auth
264+
def list_tables(self):
265+
meta = self.get_metadata()
266+
return meta.get('tables') or []
267+
268+
@check_auth
269+
def get_table_by_name(self, table_name):
270+
tables = self.list_tables()
271+
for t in tables:
272+
if t.get('name') == table_name:
273+
return t
274+
259275
@check_auth
260276
def add_table(self, table_name, lang='en', columns=[]):
261277
"""
@@ -273,6 +289,83 @@ def add_table(self, table_name, lang='en', columns=[]):
273289
response = requests.post(url, json=json_data, headers=self.headers, timeout=self.timeout)
274290
return parse_response(response)
275291

292+
@check_auth
293+
def rename_table(self, table_name, new_table_name):
294+
url = self._table_server_url()
295+
json_data = {
296+
'table_name': table_name,
297+
'new_table_name': new_table_name
298+
}
299+
response = requests.put(url, json=json_data, headers=self.headers, timeout=self.timeout)
300+
return parse_response(response)
301+
302+
@check_auth
303+
def delete_table(self, table_name):
304+
url = self._table_server_url()
305+
json_data = {
306+
'table_name': table_name,
307+
}
308+
response = requests.delete(url, json=json_data, headers=self.headers, timeout=self.timeout)
309+
return parse_response(response)
310+
311+
@check_auth
312+
def list_views(self, table_name):
313+
url = self._view_server_url()
314+
params = {
315+
'table_name': table_name
316+
}
317+
response = requests.get(url, params=params, headers=self.headers, timeout=self.timeout)
318+
return parse_response(response)
319+
320+
@check_auth
321+
def get_view_by_name(self, table_name, view_name):
322+
url = self._view_server_url()
323+
view_url = '%(url)s/%(view_name)s/?table_name=%(table_name)s' % ({
324+
"url": url.rstrip('/'),
325+
'view_name': view_name,
326+
'table_name': table_name
327+
})
328+
response = requests.get(view_url, headers=self.headers, timeout=self.timeout)
329+
return parse_response(response)
330+
331+
@check_auth
332+
def add_view(self, table_name, view_name):
333+
url = self._view_server_url()
334+
view_url = '%(url)s/?table_name=%(table_name)s' % ({
335+
"url": url.rstrip('/'),
336+
'table_name': table_name
337+
})
338+
json_data = {
339+
'name': view_name
340+
}
341+
response = requests.post(view_url, json=json_data, headers=self.headers, timeout=self.timeout)
342+
return parse_response(response)
343+
344+
@check_auth
345+
def rename_view(self, table_name, view_name, new_view_name):
346+
url = self._view_server_url()
347+
view_url = '%(url)s/%(view_name)s/?table_name=%(table_name)s' % ({
348+
"url": url.rstrip('/'),
349+
'view_name': view_name,
350+
'table_name': table_name
351+
})
352+
json_data = {
353+
'name': new_view_name
354+
}
355+
response = requests.put(view_url, json=json_data, headers=self.headers, timeout=self.timeout)
356+
return parse_response(response)
357+
358+
@check_auth
359+
def delete_view(self, table_name, view_name):
360+
url = self._view_server_url()
361+
view_url = '%(url)s/%(view_name)s/?table_name=%(table_name)s' % ({
362+
"url": url.rstrip('/'),
363+
'view_name': view_name,
364+
'table_name': table_name
365+
})
366+
response = requests.delete(view_url, headers=self.headers, timeout=self.timeout)
367+
return parse_response(response)
368+
276369
@check_auth
277370
def list_rows(self, table_name, view_name=None, order_by=None, desc=False, start=None, limit=None):
278371
"""
@@ -650,6 +743,22 @@ def get_column_link_id(self, table_name, column_name):
650743
return column.get('data', {}).get('link_id')
651744
raise ValueError('link type column "%s" does not exist in current table' % column_name)
652745

746+
@check_auth
747+
def get_column_by_name(self, table_name, column_name):
748+
columns = self.list_columns(table_name)
749+
for col in columns:
750+
if col.get('name') == column_name:
751+
return col
752+
753+
@check_auth
754+
def get_columns_by_type(self, table_name, column_type:ColumnTypes):
755+
if column_type not in ColumnTypes:
756+
raise ValueError("type %s invalid!" % (column_type,))
757+
columns = self.list_columns(table_name)
758+
cols_results = [col for col in columns if col.get('type') == column_type.value]
759+
return cols_results
760+
761+
653762
@check_auth
654763
def insert_column(self, table_name, column_name, column_type, column_key=None, column_data=None):
655764
"""

0 commit comments

Comments
 (0)