Skip to content

Instantly share code, notes, and snippets.

@MrCreosote
Last active February 11, 2016 03:27
Show Gist options
  • Save MrCreosote/b221bbbac60e7f0586ae to your computer and use it in GitHub Desktop.
Save MrCreosote/b221bbbac60e7f0586ae to your computer and use it in GitHub Desktop.
Hide public workspaces via the administration interface
'''
Makes the specified workspaces non-public.
Parameters:
wsclient - an initialized workspace client. The user logged into the client
must be a workspace administrator.
wslist - a list of workspace IDs and / or names.
'''
def hidePublicWorkspaces(wsclient, wslist):
adminname = wsclient._headers['AUTHORIZATION'].split('|')[0].split('=')[1]
for ws in wslist:
try:
wsi = {'id': int(ws)}
except:
wsi = {'workspace': ws}
prevperm = wsclient.get_permissions(wsi)[adminname]
permsparams = {'users': [adminname],
'new_permission': 'a'}
permsparams.update(wsi)
wsclient.administer({'command': 'setPermissions',
'params': permsparams,
'user': adminname
})
del permsparams['users']
permsparams['new_permission'] = 'n'
wsclient.administer({'command': 'setGlobalPermission',
'params': permsparams,
'user': adminname
})
permsparams.update({'users': [adminname],
'new_permission': prevperm
})
wsclient.administer({'command': 'setPermissions',
'params': permsparams,
'user': adminname
})
@MrCreosote
Copy link
Author

Usage:

$ ipython

In [1]: from biokbase.workspace.client import Workspace
In [2]: ws = Workspace('https://dev03.berkeley.kbase.us/services/ws', user_id='workspaceadmin',
    password='thispasswordisobviouslyfake', trust_all_ssl_certificates=True)
In [3]: from hideWS import hidePublicWorkspaces

In [4]: ws.list_workspace_info({})
Out[4]:
[[2,
  u'Blastococcus_sp_URHD0036_kbasetest',
  u'jgidm',
  u'2016-02-10T15:48:02+0000',
  1,
  u'n',
  u'r',
  u'unlocked',
  {u'show_in_narrative_data_panel': u'1'}],
 [3,
  u'Marinilactibacillus_piezotolerans_DSM_16108_kbasetest',
  u'jgidm',
  u'2016-02-10T15:53:34+0000',
  1,
  u'n',
  u'r',
  u'unlocked',
  {u'show_in_narrative_data_panel': u'1'}]]

In [5]: hidePublicWorkspaces(ws, [2, 'Marinilactibacillus_piezotolerans_DSM_16108_kbasetest'])

In [6]: ws.list_workspace_info({})
Out[6]: []

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment