@@ -97,6 +97,16 @@ def set_metadata(self, metadata):
9797 return self .client ._perform_empty (
9898 "PUT" , "/projects/%s/metadata" % self .project_key , body = metadata )
9999
100+ def get_settings (self ):
101+ """
102+ Gets the settings of this project. This does not contain permissions. See :meth:`get_permissions`
103+
104+ :returns a handle to read, modify and save the settings
105+ :rtype: :class:`DSSProjectSettings`
106+ """
107+ ret = self .client ._perform_json ("GET" , "/projects/%s/settings" % self .project_key )
108+ return DSSProjectSettings (self .client , self .project_key , ret )
109+
100110 def get_permissions (self ):
101111 """
102112 Get the permissions attached to this project
@@ -736,6 +746,42 @@ def get_macro(self, runnable_type):
736746 return DSSMacro (self .client , self .project_key , runnable_type )
737747
738748
749+ class DSSProjectSettings (object ):
750+ """Settings of a DSS project"""
751+
752+ def __init__ (self , client , project_key , settings ):
753+ """Do not call directly, use :meth:`DSSProject.get_settings`"""
754+ self .client = client
755+ self .project_key = project_key
756+ self .settings = settings
757+
758+ def get_raw (self ):
759+ """Gets all settings as a raw dictionary. This returns a reference to the raw settings, not a copy,
760+ so changes made to the returned object will be reflected when saving.
761+
762+ :rtype: dict
763+ """
764+ return self .settings
765+
766+ def set_cluster (self , cluster , fallback_cluster = None ):
767+ """Sets the Hadoop/Spark cluster used by this project
768+
769+ :param str cluster: Identifier of the cluster to use. May use variables expansion. If None, sets the project
770+ to use the globally-defined cluster
771+ :param str fallback_cluster: Identifier of the cluster to use if the variable used for "cluster" does not exist
772+ """
773+ if cluster is None :
774+ self .settings ["settings" ]["cluster" ]["clusterMode" ] = "INHERIT"
775+ else :
776+ self .settings ["settings" ]["cluster" ]["clusterMode" ] = "EXPLICIT_CLUSTER"
777+ self .settings ["settings" ]["cluster" ]["clusterId" ] = cluster
778+ self .settings ["settings" ]["cluster" ]["defaultClusterId" ] = fallback_cluster
779+
780+ def save (self ):
781+ """Saves back the settings to the project"""
782+
783+ self .client ._perform_empty ("PUT" , "/projects/%s/settings" % (self .project_key ),
784+ body = self .settings )
739785
740786class JobDefinitionBuilder (object ):
741787 def __init__ (self , project_key , job_type = "NON_RECURSIVE_FORCED_BUILD" ):
0 commit comments