CodeEngine


source

extract_functions

 extract_functions (function_ls:List[dict], code:str, language:str,
                    parse_fn:Callable=None)

helper function that handles parsing

Type Default Details
function_ls List from API, function metadata
code str from API, code string
language str PYTHON or JAVASCRIPT, must align with parse_functions_factory enum
parse_fn Callable None function for exctracting functions must receive code:str and function_name:str`
auth = dmda.DomoTokenAuth(
    domo_instance=os.environ["DOMO_INSTANCE"],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)
auth
DomoTokenAuth(domo_instance='domo-community', token_name=None, is_valid_token=None, url_manual_login='https://domo-community.domo.com/auth/index?domoManualLogin=true')

source

DomoCodeEngine_Function

 DomoCodeEngine_Function (name:str, displayName:str, description:str,
                          language:str, package_id:str, version:str,
                          code:str=None, code_prefix:str=None,
                          inputs:List[dict]=None, output:str=None,
                          example:str=None, code_raw:str=None)

source

DomoCodeEngine_ConfigError

 DomoCodeEngine_ConfigError (domo_instance, package_id, version=None,
                             message=None, status=None,
                             function_name=None)

base exception


source

ExportExtension

 ExportExtension (value, names=None, module=None, qualname=None,
                  type=None, start=1)

An enumeration.


source

DomoCodeEngine_PackageVersion

 DomoCodeEngine_PackageVersion (auth:domolibrary.client.DomoAuth.DomoAuth,
                                package_id:str, version:str, language:str,
                                description:str, createdby_id:int,
                                released_dt:datetime.datetime,
                                configuration:dict, createdby:domolibrary.
                                classes.DomoUser.DomoUser=None,
                                accounts_mapping:List[int]=None,
                                ml_model:List[str]=None, code:str=None,
                                functions_ls:List[dict]=None,
                                functions:dict=None)
Exported source
@dataclass
class DomoCodeEngine_PackageVersion:
    auth: dmda.DomoAuth = field(repr=False)
    package_id: str
    version: str
    language: str
    description: str
    createdby_id: int
    released_dt: dt.datetime
    configuration: dict

    createdby: dmdu.DomoUser = None
    accounts_mapping: List[int] = None
    ml_model: List[str] = None

    code: str = field(repr=False, default=None)
    functions_ls: List[dict] = field(repr=False, default=None)
    functions: dict = None

    def _set_configuration(self, configuration=None):
        if configuration:
            self.configuration = configuration

        if not self.configuration:
            raise DomoCodeEngine_ConfigError(
                package_id=self.package_id,
                version=self.version,
                message="unable to set configuration",
                domo_instance=self.auth.domo_instance,
            )

        self.accounts_mapping = self.configuration["accountsMapping"]
        self.ml_model = self.configuration["mlModel"]

        return self

    def set_functions(
        self,
        code: str = None,
        functions: List[dict] = None,
        language: str = None,
        function_parser_fn: Callable = None,  # must receive code string, function_ls, language
    ):
        self.code = code or self.code

        self.functions_ls = functions or self.functions_ls

        self.language = language or self.language

        if not self.code or not self.configuration or not self.language:
            raise DomoCodeEngine_ConfigError(
                package_id=self.package_id,
                version=self.version,
                message="unable to set functions",
                domo_instance=self.auth.domo_instance,
            )
        try:
            function_parser_fn = function_parser_fn or extract_functions
            functions_ls = function_parser_fn(
                code=self.code, function_ls=self.functions_ls, language=self.language
            )

            self.functions = [
                DomoCodeEngine_Function._from_json(
                    obj,
                    language=self.language,
                    package_id=self.package_id,
                    version=self.version,
                    code_raw=self.code,
                )
                for obj in functions_ls
            ]
            return functions
        except Exception as e:
            print(e)
            raise DomoCodeEngine_ConfigError(
                package_id=self.package_id,
                version=self.version,
                message=e,
                domo_instance=self.auth.domo_instance,
            )

    @classmethod
    def _from_json(
        cls,
        obj: dict,
        package_id,
        auth: dmda.DomoAuth,
        language: str,
        supress_error: bool = True,
    ):

        domo_version = cls(
            auth=auth,
            package_id=package_id,
            language=language.upper() if language else None,
            version=obj["version"],
            code=obj.get("code"),
            description=obj.get("description", None),
            createdby_id=obj["createdBy"],
            released_dt=convert_string_to_datetime(obj.get("releasedOn")),
            configuration=obj["configuration"],
            functions_ls=obj["functions"],
        )

        try:
            domo_version._set_configuration()

        except DomoCodeEngine_ConfigError as e:
            if not supress_error:
                print(e)

        try:
            domo_version.set_functions()
        except DomoCodeEngine_ConfigError as e:
            if not supress_error:
                print(e)

        return domo_version

    @classmethod
    async def get_by_id_and_version(
        cls,
        package_id,
        version,
        auth: dmda.DomoAuth,
        language: str = None,
        debug_api: bool = False,
        debug_num_stacks_to_drop=2,
        return_raw: bool = False,
        session: httpx.AsyncClient = None,
    ):

        res = await codeengine_routes.get_codeengine_package_by_id_and_version(
            package_id=package_id,
            version=version,
            auth=auth,
            debug_api=debug_api,
            session=session,
            parent_class=cls.__name__,
            debug_num_stacks_to_drop=debug_num_stacks_to_drop,
        )

        if return_raw:
            return res

        return cls._from_json(
            auth=auth, obj=res.response, package_id=package_id, language=language
        )

    def __eq__(self, other):
        if not isinstance(other, DomoCodeEngine_PackageVersion):
            return False

        if self.version != other.version or self.package_id != other.package_id:
            return False

        return True

    async def download_source_code(
        self,
        download_folder: str = "./EXPORT/codeengine",
        file_name: str = None,
        debug_api: bool = False,
    ):
        if not self.code:
            self.code = await self.get_by_id_and_version(
                auth=auth,
                package_id=self.package_id,
                version=self.version,
                debug_api=debug_api,
                parts = "code"
            ).code

        
        file_name = file_name or f'{self.package_id}/{self.version}/functions.txt'

        file_path = os.path.join(download_folder, file_name)

        print( file_path)

        dmuf.upsert_folder(file_path)

        with open(file_path , 'w+', encoding = 'utf-8') as f:
            f.write(self.code)
        
        return self.code
package = await DomoCodeEngine_PackageVersion.get_by_id_and_version(
    package_id="0b628c44-0a1a-4e76-83ae-681cde27b129",
    version="2.0.5",
    auth=auth,
    debug_api=False,
    language="JAVASCRIPT",
    # return_raw=True
)
# pprint(package)

await package.download_source_code(download_folder = '../../test/codeengine/', debug_api= True)

# package.functions
warning this token has not been validated by who_am_i, run get_auth_token first
../../test/codeengine/0b628c44-0a1a-4e76-83ae-681cde27b129/2.0.5/functions.txt
"const codeengine = require('codeengine');\n\nclass Helpers {\n  /**\n   * Helper function to handle API requests and errors\n   * @param {string} method - The HTTP method\n   * @param {string} url - The endpoint URL\n   * @param {Object} [body=null] - The request body\n   * @returns {Object} The response data\n   * @throws {Error} If the request fails\n   */\n  static async handleRequest(method, url, body = null) {\n    try {\n      return await codeengine.sendRequest(method, url, body);\n    } catch (error) {\n      console.error(`Error with ${method} request to ${url}:`, error);\n      throw error;\n    }\n  }\n}\n\n/**\n * Fetches the user object\n *\n * @param {Person} person - The person\n * @returns {object} - The user object\n */\nasync function fetchUser(person) {\n  try {\n    return await Helpers.handleRequest(\n      'get',\n      `/api/content/v3/users/${person}?includeDetails=true`,\n    );\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n/**\n * Fetches the Person Entity information\n *\n * @param {Person} person - The person\n * @returns {object} - Information about the person\n */\nasync function fetchPerson(person) {\n  try {\n    const response = await Helpers.handleRequest(\n      'get',\n      `api/identity/v1/users/${person}?parts=detailed`,\n    );\n    const users = response?.users;\n    const firstUser = users?.[0];\n    const attributes = firstUser?.attributes;\n\n    if (!attributes || !attributes.length) return undefined;\n\n    const mappedResponse = attributes.reduce(\n      (map, obj) => ({\n        ...map,\n        [obj.key]: Array.isArray(obj.values) ? obj.values[0] : undefined,\n      }),\n      {},\n    );\n\n    return {\n      name: mappedResponse.displayName,\n      id: mappedResponse.id,\n      location: mappedResponse.employeeLocation,\n      manager: mappedResponse.reportsTo,\n      phoneNumber: mappedResponse.phoneNumber,\n      title: mappedResponse.title,\n    };\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n/**\n * Creates a new user\n *\n * @param {string} fullName - The users full name which will be used as the display name\n * @param {string} email - The users email address\n * @param {number} roleId - The id of the role to assign to the user\n *\n * @returns {object} - The user object that was created\n * @throws {Error} - If the user could not be created\n */\nasync function createUser(fullName, email, roleId) {\n  try {\n    return await Helpers.handleRequest('post', '/api/content/v3/users', {\n      detail: {\n        email,\n      },\n      displayName: fullName,\n      roleId,\n    });\n  } catch (error) {\n    throw new Error('Unable to create user.', error);\n  }\n}\n\n/**\n * Deletes a user\n *\n * @param {Person} userId - The user\n *\n * @returns {boolean} - True if the user was deleted successfully\n * @throws {Error} - If the user could not be deleted\n */\nasync function deleteUser(userId) {\n  try {\n    await Helpers.handleRequest('delete', `/api/identity/v1/users/${userId}`);\n    return true;\n  } catch (error) {\n    throw new Error('Unable to delete user.', error);\n  }\n}\n\n/**\n * Retrieve the specified users email address\n *\n * @param {Person} person - The person\n * @returns {string} - The users Email address\n */\nasync function emailAddress(person) {\n  const user = await fetchUser(person);\n  return user?.detail?.email;\n}\n\n/**\n * Retrieve the specified users display name\n *\n * @param {Person} person - The person\n * @returns {string} - The users display name\n */\nasync function displayName(person) {\n  const user = await fetchUser(person);\n  return user?.displayName;\n}\n\n/**\n * Fetches all roles in the system\n * @returns {{id: string, name: string}[]} The roles\n */\nasync function getRoles() {\n  const roles = await Helpers.handleRequest(\n    'GET',\n    '/api/authorization/v1/roles',\n  );\n  return roles.map(({id, name}) => ({id, name}));\n}\n\n/**\n * Fetches the names of all roles in the system\n * @returns {string[]} The role names\n */\nasync function getRoleNames() {\n  const roles = await getRoles();\n  return roles.map(({name}) => name);\n}\n\n/**\n * Fetches the id of a role by its name\n * @param {string} roleName - The name of the role\n * @returns {string | null} The role ID, or null if not found\n */\nasync function getRoleIdByName(roleName) {\n  const roles = await getRoles();\n  const foundRole = roles.find(({name}) => name === roleName);\n  return foundRole ? foundRole.id : null;\n}\n\n/**\n * Invites a new user\n * @param {string} displayName - The user's display name\n * @param {string} email - The user's email\n * @param {string} role - The user's role\n * @returns {Object} The response data\n */\nasync function inviteUser(displayName, email, role) {\n  const roleId = await getRoleIdByName(role);\n  const body = {displayName, detail: {email}, roleId};\n  return Helpers.handleRequest('POST', '/api/content/v3/users', body);\n}\n\n/**\n * Updates a user's role\n * @param {Person} person - The person\n * @param {string} role - The new role\n * @returns {Object} The response data\n */\nasync function updateUserRole(person, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    [person],\n  );\n}\n\n/**\n * Updates roles for multiple users\n * @param {Person[]} people - The people\n * @param {string} role - The new role\n * @returns {Object} The response data\n */\nasync function bulkUpdateUserRoles(people, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    people,\n  );\n}\n\nmodule.exports = {\n  fetchUser,\n  fetchPerson,\n  emailAddress,\n  displayName,\n  createUser,\n  deleteUser,\n  getRoles,\n  getRoleNames,\n  getRoleIdByName,\n  inviteUser,\n  updateUserRole,\n  bulkUpdateUserRoles,\n};\n"
package_id = "37e449bf-52da-43ab-872e-361a643e13b6"
version = "1.0.0"

res = await DomoCodeEngine_PackageVersion.get_by_id_and_version(
    package_id=package_id,
    version=version,
    auth=auth,
    debug_api=False,
    language="PYTHON",
    # return_raw=True
)

print(res)
pprint(res.functions)
DomoCodeEngine_PackageVersion(package_id='37e449bf-52da-43ab-872e-361a643e13b6', version='1.0.0', language='PYTHON', description=None, createdby_id='1728973208', released_dt=None, configuration={'accountsMapping': [], 'mlModel': [], 'externalPackageMapping': {}}, createdby=None, accounts_mapping=[], ml_model=[], functions=[DomoCodeEngine_Function(name='greeting', displayName='Greeting', description='', language='PYTHON', code='def greeting(name): \n  print("Hello " + name)\n  return "Hello " + name', code_prefix=None)])
[DomoCodeEngine_Function(name='greeting',
                         displayName='Greeting',
                         description='',
                         language='PYTHON',
                         code='def greeting(name): \n'
                              '  print("Hello " + name)\n'
                              '  return "Hello " + name',
                         code_prefix=None)]

source

DomoCodeEngine_PackageVersion.export

 DomoCodeEngine_PackageVersion.export (file_name:str=None,
                                       output_folder:str='EXPORT/code_engi
                                       ne/', debug_prn:bool=False)
Exported source
@patch_to(DomoCodeEngine_PackageVersion)
def export(
    self,
    file_name: str = None,
    output_folder: str = "EXPORT/code_engine/",
    debug_prn: bool = False,
):
    output_folder = (
        f"{output_folder}/" if not output_folder.endswith("/") else output_folder
    )

    dmuf.upsert_folder(output_folder)

    file_name = file_name or self.package_id
    file_name = dmuf.change_extension(file_name, ExportExtension[self.language].value)

    file_path = os.path.join(output_folder, file_name)

    if debug_prn:
        print(output_folder, file_name)

    with open(file_path, "w+", newline="\n", encoding="utf-8") as f:
        f.write(self.code)

    return file_path
package_id = "37e449bf-52da-43ab-872e-361a643e13b6"
version = "1.0.0"

token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

domo_version = await DomoCodeEngine_PackageVersion.get_by_id_and_version(
    package_id=package_id,
    version=version,
    auth=token_auth,
    debug_api=False,
    language="PYTHON",
    # return_raw=True
)

domo_version.export(output_folder="../test/code_engine")
warning this token has not been validated by who_am_i, run get_auth_token first
'../test/code_engine/37e449bf-52da-43ab-872e-361a643e13b6.py'

source

DomoCodeEngine_Package

 DomoCodeEngine_Package (auth:domolibrary.client.DomoAuth.DomoAuth,
                         id:str, name:str, description:str, language:str,
                         environment:str, availability:str, owner_id:int,
                         created:datetime.datetime,
                         last_modified:datetime.datetime, functions:List,
                         current_version:str=None, versions:List[__main__.
                         DomoCodeEngine_PackageVersion]=None, owner:List[d
                         omolibrary.classes.DomoUser.DomoUser]=None)
token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)

res = await DomoCodeEngine_Package.get_by_id(
    package_id="0b628c44-0a1a-4e76-83ae-681cde27b129",
    auth=token_auth,
    debug_api=False,
    # return_raw=True
)

pprint(res)
warning this token has not been validated by who_am_i, run get_auth_token first
DomoCodeEngine_Package(id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                       name='DOMO Users',
                       description='Retrieve or update information for a Domo '
                                   'user.',
                       language='JAVASCRIPT',
                       environment='LAMBDA',
                       availability='GLOBAL',
                       owner_id='27',
                       created=datetime.datetime(2023, 3, 30, 20, 43, 36, 968000, tzinfo=tzutc()),
                       last_modified=datetime.datetime(2024, 7, 29, 19, 32, 24, 252000, tzinfo=tzutc()),
                       functions=None,
                       current_version='3.0.0',
                       versions=[DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='1.0.0',
                                                               language='JAVASCRIPT',
                                                               description='Retrieve '
                                                                           'information '
                                                                           'about '
                                                                           'a '
                                                                           'Domo '
                                                                           'User.',
                                                               createdby_id='-1',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='1.1.0',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='-1',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='1.1.1',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1926758222',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='2.0.1',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1437951404',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='2.0.2',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1926758222',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='2.0.3',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1658438246',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='2.0.4',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='17328249',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='2.0.5',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1658438246',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None),
                                 DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129',
                                                               version='3.0.0',
                                                               language='JAVASCRIPT',
                                                               description='',
                                                               createdby_id='1658438246',
                                                               released_dt=None,
                                                               configuration={'accountsMapping': [],
                                                                              'externalPackageMapping': {},
                                                                              'mlModel': []},
                                                               createdby=None,
                                                               accounts_mapping=[],
                                                               ml_model=[],
                                                               functions=None)],
                       owner=None)

source

DomoCodeEngine_Package.get_current_version_by_id

 DomoCodeEngine_Package.get_current_version_by_id
                                                   (auth:domolibrary.clien
                                                   t.DomoAuth.DomoAuth,
                                                   package_id,
                                                   debug_api:bool=False, s
                                                   ession:httpx.AsyncClien
                                                   t=None, debug_num_stack
                                                   s_to_drop=2)
package_id = "0b628c44-0a1a-4e76-83ae-681cde27b129"

token_auth = dmda.DomoTokenAuth(
    domo_instance=os.environ['DOMO_INSTANCE'],
    domo_access_token=os.environ["DOMO_ACCESS_TOKEN"],
)


domo_codeengine_version = await DomoCodeEngine_Package.get_current_version_by_id(
    package_id=package_id,
    auth=token_auth,
    debug_api=False,
    # return_raw=True
)
domo_codeengine_version
warning this token has not been validated by who_am_i, run get_auth_token first
DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129', version='3.0.0', language='JAVASCRIPT', description='', createdby_id='1658438246', released_dt=datetime.datetime(2024, 5, 9, 21, 16, 42, 877000, tzinfo=tzutc()), configuration={'accountsMapping': [], 'mlModel': [], 'externalPackageMapping': {}}, createdby=None, accounts_mapping=[], ml_model=[], functions=[DomoCodeEngine_Function(name='bulkUpdateUserRoles', displayName='Bulk Update User Roles', description='Assign the role to every user provided', language='JAVASCRIPT', code="async function bulkUpdateUserRoles(people, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    people,\n  );\n}\n", code_prefix=None), DomoCodeEngine_Function(name='createUser', displayName='Create User', description='Create a user', language='JAVASCRIPT', code="async function createUser(fullName, email, roleId) {\n  try {\n    return await Helpers.handleRequest('post', '/api/content/v3/users', {\n      detail: {\n        email,\n      },\n      displayName: fullName,\n      roleId,\n    });\n  } catch (error) {\n    throw new Error('Unable to create user.', error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='deleteUser', displayName='Delete User', description='Delete the specified user', language='JAVASCRIPT', code="async function deleteUser(userId) {\n  try {\n    await Helpers.handleRequest('delete', `/api/identity/v1/users/${userId}`);\n    return true;\n  } catch (error) {\n    throw new Error('Unable to delete user.', error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='displayName', displayName='Display Name', description='Get the display name for the requested user', language='JAVASCRIPT', code='async function displayName(person) {\n  const user = await fetchUser(person);\n  return user?.displayName;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='emailAddress', displayName='Email Address', description='Get the email address for the requested user', language='JAVASCRIPT', code='async function emailAddress(person) {\n  const user = await fetchUser(person);\n  return user?.detail?.email;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='fetchPerson', displayName='Fetch Person', description='Get a condensed user object that only has the most used fields; ie, name, email, phone', language='JAVASCRIPT', code="async function fetchPerson(person) {\n  try {\n    const response = await Helpers.handleRequest(\n      'get',\n      `api/identity/v1/users/${person}?parts=detailed`,\n    );\n    const users = response?.users;\n    const firstUser = users?.[0];\n    const attributes = firstUser?.attributes;\n\n    if (!attributes || !attributes.length) return undefined;\n\n    const mappedResponse = attributes.reduce(\n      (map, obj) => ({\n        ...map,\n        [obj.key]: Array.isArray(obj.values) ? obj.values[0] : undefined,\n      }),\n      {},\n    );\n\n    return {\n      name: mappedResponse.displayName,\n      id: mappedResponse.id,\n      location: mappedResponse.employeeLocation,\n      manager: mappedResponse.reportsTo,\n      phoneNumber: mappedResponse.phoneNumber,\n      title: mappedResponse.title,\n    };\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='fetchUser', displayName='Fetch User', description='Get the official Domo user object, with details like role / avatar / etc', language='JAVASCRIPT', code="async function fetchUser(person) {\n  try {\n    return await Helpers.handleRequest(\n      'get',\n      `/api/content/v3/users/${person}?includeDetails=true`,\n    );\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='getRoleIdByName', displayName='Get Role Id By Name', description='Search for a role by name', language='JAVASCRIPT', code='async function getRoleIdByName(roleName) {\n  const roles = await getRoles();\n  const foundRole = roles.find(({name}) => name === roleName);\n  return foundRole ? foundRole.id : null;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='getRoleNames', displayName='Get Role Names', description='Get the name of every role available', language='JAVASCRIPT', code='async function getRoleNames() {\n  const roles = await getRoles();\n  return roles.map(({name}) => name);\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='getRoles', displayName='Get Roles', description='Get all user roles available', language='JAVASCRIPT', code="async function getRoles() {\n  const roles = await Helpers.handleRequest(\n    'GET',\n    '/api/authorization/v1/roles',\n  );\n  return roles.map(({id, name}) => ({id, name}));\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='inviteUser', displayName='Invite User', description='Create a user and send an invitation email', language='JAVASCRIPT', code="async function inviteUser(displayName, email, role) {\n  const roleId = await getRoleIdByName(role);\n  const body = {displayName, detail: {email}, roleId};\n  return Helpers.handleRequest('POST', '/api/content/v3/users', body);\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='updateUserRole', displayName='Update User Role', description='Update the role for a given user', language='JAVASCRIPT', code="async function updateUserRole(person, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    [person],\n  );\n}\n\n\n", code_prefix=None)])
domo_codeengine_version
DomoCodeEngine_PackageVersion(package_id='0b628c44-0a1a-4e76-83ae-681cde27b129', version='3.0.0', language='JAVASCRIPT', description='', createdby_id='1658438246', released_dt=datetime.datetime(2024, 5, 9, 21, 16, 42, 877000, tzinfo=tzutc()), configuration={'accountsMapping': [], 'mlModel': [], 'externalPackageMapping': {}}, createdby=None, accounts_mapping=[], ml_model=[], functions=[DomoCodeEngine_Function(name='bulkUpdateUserRoles', displayName='Bulk Update User Roles', description='Assign the role to every user provided', language='JAVASCRIPT', code="async function bulkUpdateUserRoles(people, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    people,\n  );\n}\n", code_prefix=None), DomoCodeEngine_Function(name='createUser', displayName='Create User', description='Create a user', language='JAVASCRIPT', code="async function createUser(fullName, email, roleId) {\n  try {\n    return await Helpers.handleRequest('post', '/api/content/v3/users', {\n      detail: {\n        email,\n      },\n      displayName: fullName,\n      roleId,\n    });\n  } catch (error) {\n    throw new Error('Unable to create user.', error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='deleteUser', displayName='Delete User', description='Delete the specified user', language='JAVASCRIPT', code="async function deleteUser(userId) {\n  try {\n    await Helpers.handleRequest('delete', `/api/identity/v1/users/${userId}`);\n    return true;\n  } catch (error) {\n    throw new Error('Unable to delete user.', error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='displayName', displayName='Display Name', description='Get the display name for the requested user', language='JAVASCRIPT', code='async function displayName(person) {\n  const user = await fetchUser(person);\n  return user?.displayName;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='emailAddress', displayName='Email Address', description='Get the email address for the requested user', language='JAVASCRIPT', code='async function emailAddress(person) {\n  const user = await fetchUser(person);\n  return user?.detail?.email;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='fetchPerson', displayName='Fetch Person', description='Get a condensed user object that only has the most used fields; ie, name, email, phone', language='JAVASCRIPT', code="async function fetchPerson(person) {\n  try {\n    const response = await Helpers.handleRequest(\n      'get',\n      `api/identity/v1/users/${person}?parts=detailed`,\n    );\n    const users = response?.users;\n    const firstUser = users?.[0];\n    const attributes = firstUser?.attributes;\n\n    if (!attributes || !attributes.length) return undefined;\n\n    const mappedResponse = attributes.reduce(\n      (map, obj) => ({\n        ...map,\n        [obj.key]: Array.isArray(obj.values) ? obj.values[0] : undefined,\n      }),\n      {},\n    );\n\n    return {\n      name: mappedResponse.displayName,\n      id: mappedResponse.id,\n      location: mappedResponse.employeeLocation,\n      manager: mappedResponse.reportsTo,\n      phoneNumber: mappedResponse.phoneNumber,\n      title: mappedResponse.title,\n    };\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='fetchUser', displayName='Fetch User', description='Get the official Domo user object, with details like role / avatar / etc', language='JAVASCRIPT', code="async function fetchUser(person) {\n  try {\n    return await Helpers.handleRequest(\n      'get',\n      `/api/content/v3/users/${person}?includeDetails=true`,\n    );\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='getRoleIdByName', displayName='Get Role Id By Name', description='Search for a role by name', language='JAVASCRIPT', code='async function getRoleIdByName(roleName) {\n  const roles = await getRoles();\n  const foundRole = roles.find(({name}) => name === roleName);\n  return foundRole ? foundRole.id : null;\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='getRoleNames', displayName='Get Role Names', description='Get the name of every role available', language='JAVASCRIPT', code='async function getRoleNames() {\n  const roles = await getRoles();\n  return roles.map(({name}) => name);\n}\n\n\n', code_prefix=None), DomoCodeEngine_Function(name='getRoles', displayName='Get Roles', description='Get all user roles available', language='JAVASCRIPT', code="async function getRoles() {\n  const roles = await Helpers.handleRequest(\n    'GET',\n    '/api/authorization/v1/roles',\n  );\n  return roles.map(({id, name}) => ({id, name}));\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='inviteUser', displayName='Invite User', description='Create a user and send an invitation email', language='JAVASCRIPT', code="async function inviteUser(displayName, email, role) {\n  const roleId = await getRoleIdByName(role);\n  const body = {displayName, detail: {email}, roleId};\n  return Helpers.handleRequest('POST', '/api/content/v3/users', body);\n}\n\n\n", code_prefix=None), DomoCodeEngine_Function(name='updateUserRole', displayName='Update User Role', description='Update the role for a given user', language='JAVASCRIPT', code="async function updateUserRole(person, role) {\n  const roleId = await getRoleIdByName(role);\n  await Helpers.handleRequest(\n    'PUT',\n    `/api/authorization/v1/roles/${roleId}/users`,\n    [person],\n  );\n}\n\n\n", code_prefix=None)])