python-domino icon indicating copy to clipboard operation
python-domino copied to clipboard

app publish and unpublish resets view of app

Open NoRaincheck opened this issue 6 years ago • 1 comments

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.

NoRaincheck avatar Mar 12 '19 22:03 NoRaincheck

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:]))

NoRaincheck avatar Sep 26 '19 03:09 NoRaincheck