@@ -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