python-domino
python-domino copied to clipboard
app publish and unpublish resets view of app
If we run app_publish(unpublishRunningApps=True) it will work as expected, but if a user has previously set access permissions to "Anyone, including anonymous users", it will be reset to the default value.
To fix this, it seems that you can use an undocumented endpoint /v4/modelProduct and do something like this:
from domino import Domino
import sys
import requests
class MyDomino(Domino):
def get_app_settings(self):
url = self._routes.host + "/v4/modelProducts"
r = requests.get(url, auth=('', self._api_key))
settings = [x for x in r.json() if x['projectUrl'] == '/u/' + self._routes._owner_username + '/' + self._routes._project_name][0]
return settings
def set_app_settings(self, settings=None, visibility="PUBLIC"):
"""
Parameters
----------
visibility : str
One of "GRANT_BASED", "GRANT_BASED_STRICT", "AUTHENTICATED", "PUBLIC"
"""
if settings is None:
settings = self.get_app_settings()
assert visibility.upper() in ["GRANT_BASED","GRANT_BASED_STRICT","AUTHENTICATED","PUBLIC"]
settings['permissionsData']['visibility'] = visibility.upper()
url = self._routes.host + "/v4/modelProducts"
r = requests.post(url, auth=('', self._api_key), json=settings)
return r
project = "my_user/test_publish_app"
if __name__ == "__main__":
domino = MyDomino(project)
if len(sys.argv) == 1:
domino.app_publish()
elif sys.argv[1] == "publish":
domino.app_publish()
if len(sys.argv) == 3:
domino.set_app_settings(visibility=sys.argv[2])
elif sys.argv[1] == "unpublish":
domino.app_unpublish()
else:
import warnings
warnings.warn("Not valid argument found: {}\nNothing will be done".format(sys.argv[1:]))