diff --git a/README.md b/README.md index 8012558fb..13b38dba1 100644 --- a/README.md +++ b/README.md @@ -72,11 +72,11 @@ We invite developers to join us in our mission to bring AI and data integration | Name | Type | Status | Release date | Last update | |-------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------------|----------------|-----------------| -| [**Adzuna**](./src/hrflow_connectors/v1/connectors/adzuna/README.md) | Job Board | :book: Open source | *08/09/2022* | *05/09/2024* | +| [**Adzuna**](./src/hrflow_connectors/v2/connectors/adzuna/README.md) | Job Board | :book: Open source | *08/09/2022* | *05/09/2024* | | [**Carrevolutis**](./src/hrflow_connectors/v1/connectors/carrevolutis/README.md) | Job Board | :book: Open source | *20/03/2024* | *05/09/2024* | +| [**France Travail (ex: Pole Emploi)**](./src/hrflow_connectors/v2/connectors/francetravail/README.md) | Job Board | :book: Open source | *15/07/2022* | *24/10/2024* | | [**Jobology**](./src/hrflow_connectors/v1/connectors/jobology/README.md) | Job Board | :book: Open source | *21/12/2022* | *05/09/2024* | | [**Meteojob**](./src/hrflow_connectors/v1/connectors/meteojob/README.md) | Job Board | :book: Open source | *15/02/2024* | *05/09/2024* | -| [**Pole Emploi**](./src/hrflow_connectors/v1/connectors/poleemploi/README.md) | Job Board | :book: Open source | *15/07/2022* | *24/10/2024* | # :lock: Premium Connectors diff --git a/manifest.json b/manifest.json index 827d2c69c..f2585f2eb 100644 --- a/manifest.json +++ b/manifest.json @@ -64402,6 +64402,10372 @@ } } ] + }, + { + "name": "Adzuna", + "type": "JOBBOARD", + "subtype": "adzuna", + "logo": "https://raw.githubusercontent.com/Riminder/hrflow-connectors/master/src/hrflow_connectors/v2/connectors/adzuna/logo.png", + "actions": [ + { + "name": "create_jobs_in_hrflow", + "data_type": "job", + "direction": "inbound", + "mode": "create", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "app_id": { + "description": "Application ID, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "app_key": { + "description": "Application key, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "app_id", + "app_key" + ], + "$defs": {} + }, + "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": "Adzuna", + "origin_data_schema": { + "title": "AdzunaJob", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "created": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "full_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redirect_url": { + "type": "string" + }, + "latitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "longitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "category": { + "$ref": "#/$defs/Category" + }, + "location": { + "$ref": "#/$defs/Location" + }, + "salary_min": { + "type": "integer" + }, + "salary_max": { + "type": "integer" + }, + "salary_is_predicted": { + "$ref": "#/$defs/Flag" + }, + "company": { + "$ref": "#/$defs/Company" + }, + "contract_type": { + "anyOf": [ + { + "$ref": "#/$defs/ContractType" + }, + { + "type": "null" + } + ] + }, + "contract_time": { + "anyOf": [ + { + "$ref": "#/$defs/ContractTime" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "created", + "title", + "description", + "full_description", + "redirect_url", + "latitude", + "longitude", + "category", + "location", + "salary_min", + "salary_max", + "salary_is_predicted", + "company", + "contract_type", + "contract_time" + ], + "$defs": { + "Category": { + "title": "Category", + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "tag", + "label" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "area": { + "type": "array", + "items": { + "type": "string" + } + }, + "display_name": { + "type": "string" + } + }, + "required": [ + "area", + "display_name" + ] + }, + "Flag": { + "title": "Flag", + "enum": [ + "0", + "1" + ] + }, + "Company": { + "title": "Company", + "type": "object", + "properties": { + "display_name": { + "type": "string" + }, + "canonical_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "display_name", + "canonical_name", + "count" + ] + }, + "ContractType": { + "title": "ContractType", + "enum": [ + "contract", + "permanent" + ] + }, + "ContractTime": { + "title": "ContractTime", + "enum": [ + "full_time", + "part_time" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "country": { + "description": "ISO 8601 country code of the country of interest", + "$ref": "#/$defs/CountryCode" + }, + "results_per_page": { + "description": "The number of results to include on a page of search results.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 50 + }, + "what": { + "description": "The keywords to search for. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_and": { + "description": "The keywords to search for, all keywords must be found.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_phrase": { + "description": "An entire phrase which must be found in the description or title.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_or": { + "description": "The keywords to search for, any keywords may be found. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_exclude": { + "description": "Keywords to exclude from the search. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title_only": { + "description": "Keywords to find, but only in the title. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "where": { + "description": "The geographic centre of the search. Place names, postal codes, etc. may be used.\t", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "The distance in kilometres from the centre of the place described by the 'where' parameter. Defaults to 5km.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "location0": { + "description": "The location fields may be used to describe a location, in a similar form to that returned in a Adzuna::API::Response::Location object.For example, \"location0=UK&location1=South East England&location2=Surrey\" will performn a search over the county of Surrey.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location4": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location5": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location6": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location7": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "max_days_old": { + "description": "The age of the oldest advertisment in days that will be returned.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "description": "The category tag, as returned by the \"category\" endpoint.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_dir": { + "description": "The direction to order the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortDir" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "The ordering of the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortKey" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_min": { + "description": "The minimum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_max": { + "description": "The maximum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_include_unknown": { + "description": "If set it \"1\", jobs without a known salary are returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "full_time": { + "description": "If set to \"1\", only full time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "part_time": { + "description": "If set to \"1\", only part time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "contract": { + "description": "If set to \"1\", only contract jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "permanent": { + "description": "If set to \"1\", only permanent jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "The canonical company name. This may be returned in a Adzuna::API::Response::Company object when a job is returned. A full list of allowed terms in not available through the API.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "country" + ], + "$defs": { + "CountryCode": { + "title": "CountryCode", + "enum": [ + "at", + "au", + "br", + "ca", + "de", + "fr", + "gb", + "in", + "it", + "nl", + "nz", + "pl", + "ru", + "sg", + "us", + "za" + ] + }, + "SortDir": { + "title": "SortDir", + "enum": [ + "down", + "up" + ] + }, + "SortKey": { + "title": "SortKey", + "enum": [ + "date", + "default", + "hybrid", + "relevance", + "salary" + ] + }, + "Filter": { + "title": "Filter", + "enum": [ + "1" + ] + } + } + }, + "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": { + "name": "?.title", + "reference": "?.id | $string", + "created_at": "?.created", + "location": { + "lat": "?.latitude != null ?? .latitude | $float : null", + "lng": "?.longitude != null ?? .longitude | $float : null", + "text": "?.location.display_name || ''" + }, + "url": "?.redirect_url", + "summary": "?.description", + "sections": "?.full_description ?? [{name: 'full_description', title: 'Full Description', description: .full_description}]: []", + "tags": [ + { + "name": "contract_type", + "value": "?.contract_type" + }, + { + "name": "contract_time", + "value": "?.contract_time" + }, + { + "name": "salary_min", + "value": "?.salary_min" + }, + { + "name": "salary_max", + "value": "?.salary_max" + }, + { + "name": "salary_is_predicted", + "value": "?.salary_is_predicted == '1' ?? true : false" + }, + { + "name": "category", + "value": "?.category?.label" + }, + { + "name": "company", + "value": "?.company?.display_name" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Adzuna\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 Adzuna.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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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 Adzuna\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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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": { + "app_id": { + "description": "Application ID, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "app_key": { + "description": "Application key, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "app_id", + "app_key" + ], + "$defs": {} + }, + "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": "Adzuna", + "origin_data_schema": { + "title": "AdzunaJob", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "created": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "full_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redirect_url": { + "type": "string" + }, + "latitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "longitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "category": { + "$ref": "#/$defs/Category" + }, + "location": { + "$ref": "#/$defs/Location" + }, + "salary_min": { + "type": "integer" + }, + "salary_max": { + "type": "integer" + }, + "salary_is_predicted": { + "$ref": "#/$defs/Flag" + }, + "company": { + "$ref": "#/$defs/Company" + }, + "contract_type": { + "anyOf": [ + { + "$ref": "#/$defs/ContractType" + }, + { + "type": "null" + } + ] + }, + "contract_time": { + "anyOf": [ + { + "$ref": "#/$defs/ContractTime" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "created", + "title", + "description", + "full_description", + "redirect_url", + "latitude", + "longitude", + "category", + "location", + "salary_min", + "salary_max", + "salary_is_predicted", + "company", + "contract_type", + "contract_time" + ], + "$defs": { + "Category": { + "title": "Category", + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "tag", + "label" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "area": { + "type": "array", + "items": { + "type": "string" + } + }, + "display_name": { + "type": "string" + } + }, + "required": [ + "area", + "display_name" + ] + }, + "Flag": { + "title": "Flag", + "enum": [ + "0", + "1" + ] + }, + "Company": { + "title": "Company", + "type": "object", + "properties": { + "display_name": { + "type": "string" + }, + "canonical_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "display_name", + "canonical_name", + "count" + ] + }, + "ContractType": { + "title": "ContractType", + "enum": [ + "contract", + "permanent" + ] + }, + "ContractTime": { + "title": "ContractTime", + "enum": [ + "full_time", + "part_time" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "country": { + "description": "ISO 8601 country code of the country of interest", + "$ref": "#/$defs/CountryCode" + }, + "results_per_page": { + "description": "The number of results to include on a page of search results.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 50 + }, + "what": { + "description": "The keywords to search for. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_and": { + "description": "The keywords to search for, all keywords must be found.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_phrase": { + "description": "An entire phrase which must be found in the description or title.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_or": { + "description": "The keywords to search for, any keywords may be found. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_exclude": { + "description": "Keywords to exclude from the search. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title_only": { + "description": "Keywords to find, but only in the title. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "where": { + "description": "The geographic centre of the search. Place names, postal codes, etc. may be used.\t", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "The distance in kilometres from the centre of the place described by the 'where' parameter. Defaults to 5km.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "location0": { + "description": "The location fields may be used to describe a location, in a similar form to that returned in a Adzuna::API::Response::Location object.For example, \"location0=UK&location1=South East England&location2=Surrey\" will performn a search over the county of Surrey.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location4": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location5": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location6": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location7": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "max_days_old": { + "description": "The age of the oldest advertisment in days that will be returned.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "description": "The category tag, as returned by the \"category\" endpoint.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_dir": { + "description": "The direction to order the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortDir" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "The ordering of the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortKey" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_min": { + "description": "The minimum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_max": { + "description": "The maximum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_include_unknown": { + "description": "If set it \"1\", jobs without a known salary are returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "full_time": { + "description": "If set to \"1\", only full time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "part_time": { + "description": "If set to \"1\", only part time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "contract": { + "description": "If set to \"1\", only contract jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "permanent": { + "description": "If set to \"1\", only permanent jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "The canonical company name. This may be returned in a Adzuna::API::Response::Company object when a job is returned. A full list of allowed terms in not available through the API.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "country" + ], + "$defs": { + "CountryCode": { + "title": "CountryCode", + "enum": [ + "at", + "au", + "br", + "ca", + "de", + "fr", + "gb", + "in", + "it", + "nl", + "nz", + "pl", + "ru", + "sg", + "us", + "za" + ] + }, + "SortDir": { + "title": "SortDir", + "enum": [ + "down", + "up" + ] + }, + "SortKey": { + "title": "SortKey", + "enum": [ + "date", + "default", + "hybrid", + "relevance", + "salary" + ] + }, + "Filter": { + "title": "Filter", + "enum": [ + "1" + ] + } + } + }, + "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": { + "name": "?.title", + "reference": "?.id | $string", + "created_at": "?.created", + "location": { + "lat": "?.latitude != null ?? .latitude | $float : null", + "lng": "?.longitude != null ?? .longitude | $float : null", + "text": "?.location.display_name || ''" + }, + "url": "?.redirect_url", + "summary": "?.description", + "sections": "?.full_description ?? [{name: 'full_description', title: 'Full Description', description: .full_description}]: []", + "tags": [ + { + "name": "contract_type", + "value": "?.contract_type" + }, + { + "name": "contract_time", + "value": "?.contract_time" + }, + { + "name": "salary_min", + "value": "?.salary_min" + }, + { + "name": "salary_max", + "value": "?.salary_max" + }, + { + "name": "salary_is_predicted", + "value": "?.salary_is_predicted == '1' ?? true : false" + }, + { + "name": "category", + "value": "?.category?.label" + }, + { + "name": "company", + "value": "?.company?.display_name" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Adzuna\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 Adzuna.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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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 Adzuna\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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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": { + "app_id": { + "description": "Application ID, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "app_key": { + "description": "Application key, supplied by Adzuna", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "app_id", + "app_key" + ], + "$defs": {} + }, + "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": "Adzuna", + "origin_data_schema": { + "title": "AdzunaJob", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "created": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "full_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redirect_url": { + "type": "string" + }, + "latitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "longitude": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "category": { + "$ref": "#/$defs/Category" + }, + "location": { + "$ref": "#/$defs/Location" + }, + "salary_min": { + "type": "integer" + }, + "salary_max": { + "type": "integer" + }, + "salary_is_predicted": { + "$ref": "#/$defs/Flag" + }, + "company": { + "$ref": "#/$defs/Company" + }, + "contract_type": { + "anyOf": [ + { + "$ref": "#/$defs/ContractType" + }, + { + "type": "null" + } + ] + }, + "contract_time": { + "anyOf": [ + { + "$ref": "#/$defs/ContractTime" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "created", + "title", + "description", + "full_description", + "redirect_url", + "latitude", + "longitude", + "category", + "location", + "salary_min", + "salary_max", + "salary_is_predicted", + "company", + "contract_type", + "contract_time" + ], + "$defs": { + "Category": { + "title": "Category", + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "tag", + "label" + ] + }, + "Location": { + "title": "Location", + "type": "object", + "properties": { + "area": { + "type": "array", + "items": { + "type": "string" + } + }, + "display_name": { + "type": "string" + } + }, + "required": [ + "area", + "display_name" + ] + }, + "Flag": { + "title": "Flag", + "enum": [ + "0", + "1" + ] + }, + "Company": { + "title": "Company", + "type": "object", + "properties": { + "display_name": { + "type": "string" + }, + "canonical_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "display_name", + "canonical_name", + "count" + ] + }, + "ContractType": { + "title": "ContractType", + "enum": [ + "contract", + "permanent" + ] + }, + "ContractTime": { + "title": "ContractTime", + "enum": [ + "full_time", + "part_time" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "country": { + "description": "ISO 8601 country code of the country of interest", + "$ref": "#/$defs/CountryCode" + }, + "results_per_page": { + "description": "The number of results to include on a page of search results.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 50 + }, + "what": { + "description": "The keywords to search for. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_and": { + "description": "The keywords to search for, all keywords must be found.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_phrase": { + "description": "An entire phrase which must be found in the description or title.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_or": { + "description": "The keywords to search for, any keywords may be found. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "what_exclude": { + "description": "Keywords to exclude from the search. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title_only": { + "description": "Keywords to find, but only in the title. Multiple terms may be space separated.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "where": { + "description": "The geographic centre of the search. Place names, postal codes, etc. may be used.\t", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "The distance in kilometres from the centre of the place described by the 'where' parameter. Defaults to 5km.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "location0": { + "description": "The location fields may be used to describe a location, in a similar form to that returned in a Adzuna::API::Response::Location object.For example, \"location0=UK&location1=South East England&location2=Surrey\" will performn a search over the county of Surrey.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location4": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location5": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location6": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "location7": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "max_days_old": { + "description": "The age of the oldest advertisment in days that will be returned.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "description": "The category tag, as returned by the \"category\" endpoint.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_dir": { + "description": "The direction to order the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortDir" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort_by": { + "description": "The ordering of the search results.", + "anyOf": [ + { + "$ref": "#/$defs/SortKey" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_min": { + "description": "The minimum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_max": { + "description": "The maximum salary we wish to get results for.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "salary_include_unknown": { + "description": "If set it \"1\", jobs without a known salary are returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "full_time": { + "description": "If set to \"1\", only full time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "part_time": { + "description": "If set to \"1\", only part time jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "contract": { + "description": "If set to \"1\", only contract jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "permanent": { + "description": "If set to \"1\", only permanent jobs will be returned.", + "anyOf": [ + { + "$ref": "#/$defs/Filter" + }, + { + "type": "null" + } + ], + "default": null + }, + "company": { + "description": "The canonical company name. This may be returned in a Adzuna::API::Response::Company object when a job is returned. A full list of allowed terms in not available through the API.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "country" + ], + "$defs": { + "CountryCode": { + "title": "CountryCode", + "enum": [ + "at", + "au", + "br", + "ca", + "de", + "fr", + "gb", + "in", + "it", + "nl", + "nz", + "pl", + "ru", + "sg", + "us", + "za" + ] + }, + "SortDir": { + "title": "SortDir", + "enum": [ + "down", + "up" + ] + }, + "SortKey": { + "title": "SortKey", + "enum": [ + "date", + "default", + "hybrid", + "relevance", + "salary" + ] + }, + "Filter": { + "title": "Filter", + "enum": [ + "1" + ] + } + } + }, + "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 | $string" + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import Adzuna\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 Adzuna.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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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 Adzuna\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 Adzuna.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 ('app_id', 'app_key'):\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 ('country', 'results_per_page', 'what', 'what_and', 'what_phrase', 'what_or', 'what_exclude', 'title_only', 'where', 'distance', 'location0', 'location1', 'location2', 'location3', 'location4', 'location5', 'location6', 'location7', 'max_days_old', 'category', 'sort_dir', 'sort_by', 'salary_min', 'salary_max', 'salary_include_unknown', 'full_time', 'part_time', 'contract', 'permanent', 'company'):\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 Adzuna.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": "France Travail (ex: Pole Emploi)", + "type": "JOBBOARD", + "subtype": "francetravail", + "logo": "https://raw.githubusercontent.com/Riminder/hrflow-connectors/master/src/hrflow_connectors/v2/connectors/francetravail/logo.png", + "actions": [ + { + "name": "create_jobs_in_hrflow", + "data_type": "job", + "direction": "inbound", + "mode": "create", + "connector_auth_parameters": { + "title": "AuthParameters", + "type": "object", + "properties": { + "client_id": { + "description": "Client ID used to access France Travail (ex: Pole Emploi) API", + "type": "string" + }, + "client_secret": { + "description": "Client Secret used to access France Travail (ex: Pole Emploi) API", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": {} + }, + "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": "France Travail (ex: Pole Emploi)", + "origin_data_schema": { + "title": "FranceTravailJobOffer", + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "intitule": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dateCreation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dateActualisation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lieuTravail": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/JobLocation" + } + ], + "default": null + }, + "romeCode": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "romeLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellationLibelle": { + "description": "Code of the appellationA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprise": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Entreprise" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContratLibelle": { + "description": "Contract type labelExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/OfferOrigin" + } + ], + "default": null + }, + "offresManqueCandidats": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceCommentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "formations": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Formation" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "langues": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Langue" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Permis" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "outilsBureautiques": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "competences": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Competence" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "salaire": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Salaire" + } + ], + "default": null + }, + "dureeTravailLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeTravailLibelleConverti": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "complementExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "conditionExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternance": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "contact": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Contact" + } + ], + "default": null + }, + "agence": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Agence" + } + ], + "default": null + }, + "nombrePostes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "accessibleTH": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationCode": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationCode" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationLibelle": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationLibelle" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActiviteLibelle": { + "description": "Sector of activitylabelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualitesProfessionnelles": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/QualitePro" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "id", + "intitule", + "description" + ], + "$defs": { + "JobLocation": { + "title": "JobLocation", + "type": "object", + "properties": { + "libelle": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "codepostal": { + "type": "string" + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/communes", + "type": "string" + } + }, + "required": [ + "libelle", + "latitude", + "longitude", + "codepostal", + "commune" + ] + }, + "Entreprise": { + "title": "Entreprise", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "logo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "entrepriseAdaptee": { + "type": "boolean" + } + }, + "required": [ + "nom", + "description", + "logo", + "url", + "entrepriseAdaptee" + ] + }, + "OfferOrigin": { + "title": "OfferOrigin", + "type": "object", + "properties": { + "origine": { + "$ref": "#/$defs/OfferOriginTag" + }, + "urlOrigine": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "partenaires": { + "type": "array", + "items": { + "$ref": "#/$defs/Partner" + } + } + }, + "required": [ + "origine", + "urlOrigine", + "partenaires" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Partner": { + "title": "Partner", + "type": "object", + "properties": { + "nom": { + "type": "string" + }, + "url": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "nom", + "url", + "logo" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "Formation": { + "title": "Formation", + "type": "object", + "properties": { + "domaineLibelle": { + "type": "string" + }, + "niveauLibelle": { + "description": "Label of the level of the education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/niveauxFormations", + "type": "string" + }, + "commentaire": { + "type": "string" + }, + "exigence": { + "$ref": "#/$defs/Exigence" + } + }, + "required": [ + "domaineLibelle", + "niveauLibelle", + "commentaire", + "exigence" + ] + }, + "Exigence": { + "title": "Exigence", + "enum": [ + "E", + "S" + ] + }, + "Langue": { + "title": "Langue", + "type": "object", + "properties": { + "libelle": { + "description": "Language labelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/langues", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Permis": { + "title": "Permis", + "type": "object", + "properties": { + "libelle": { + "description": "requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/permis", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Competence": { + "title": "Competence", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "libelle": { + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "code", + "libelle", + "exigence" + ] + }, + "Salaire": { + "title": "Salaire", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "commentaire", + "complement1", + "complement2" + ] + }, + "Contact": { + "title": "Contact", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlRecruteur": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlPostulation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "nom", + "coordonnees1", + "coordonnees2", + "coordonnees3", + "telephone", + "courriel", + "commentaire", + "urlRecruteur", + "urlPostulation" + ] + }, + "Agence": { + "title": "Agence", + "type": "object", + "properties": { + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "telephone", + "courriel" + ] + }, + "QualificationCode": { + "title": "QualificationCode", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ] + }, + "QualificationLibelle": { + "title": "QualificationLibelle", + "enum": [ + "Agent de ma\u00eetrise", + "Cadre", + "Employ\u00e9 non qualifi\u00e9", + "Employ\u00e9 qualifi\u00e9", + "Man\u0153uvre", + "Ouvrier qualifi\u00e9 (P1, P2)", + "Ouvrier qualifi\u00e9 (P3, P4, OHQ)", + "Ouvrier sp\u00e9cialis\u00e9", + "Technicien" + ] + }, + "QualitePro": { + "title": "QualitePro", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "description" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "range": { + "description": "Pagination of data. The range of results is limited to 150. Format: p-d, where :\n\np is the index (starting at 0) of the first element requested, which must not exceed 3000\nd is the index of the last element requested, which must not exceed 3149", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort": { + "description": "Sorting of data", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "domaine": { + "description": "Professional field codeA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint :https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//domaines", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeROME": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "theme": { + "description": "Theme of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//themes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellation": { + "description": "ROME designation code for the offer, see reference belowA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeNAF": { + "description": "NAF code of the offer (format 99.99X)A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//nafs", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experience": { + "description": "Level of experience required\nPossible values:\n1 -> Less than 1 year of experience\n2 -> From 1 to 3 years of experience\n3 -> More than 3 years of experience", + "anyOf": [ + { + "$ref": "#/$defs/Experience" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExigence": { + "description": "Filter offers by experience requirement (D beginner accepted, S experience desired, E experience required)", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "description": "Origin of the offer\nPossible values:\n1 -> Job center\n2 -> Partner", + "anyOf": [ + { + "$ref": "#/$defs/OfferOriginTag" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualification": { + "description": "Qualification Code\nPossible values:\n0 -> Non-executive\n9 -> Executive", + "anyOf": [ + { + "$ref": "#/$defs/Qualification" + }, + { + "type": "null" + } + ], + "default": null + }, + "tempsPlein": { + "description": "Promote the use of the WeeklyDuration filter\nPossible values:\nfalse -> Part-time\ntrue -> Full time\nIf the parameter is not filled, then all the offers are returned", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//communes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "Kilometric distance of the search radius\nDefault value: 10Note: to obtain only the offers of a specific commune, then you must fill in the parameter 'distance=0'.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "departement": { + "description": "Job departmentA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//departements", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "inclureLimitrophes": { + "description": "Include bordering departments in the search", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "region": { + "description": "Code of the region of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//regions", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "paysContinent": { + "description": "Code of the country or continent of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//paysAND https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//continents", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "niveauFormation": { + "description": "Level of education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//niveauxFormations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "description": "Code of the requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//permis", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "motsCles": { + "description": "Search by keyword\n\nEach keyword (or expression) is at least 2 characters long and must\nbe separated by a comma.\nThe search on several keywords is processed via the logical operator \"AND\".\nThe keyword search can be used to search on :\n\n- The title of the offer (title field in the search return)\n- The ROME code (romeCode field in the search return)\n- The ROME label (field romeLibelle in return for the search)\n- The competences label (field competences.libelle in return of the search)\n- The wording of the training fields (field formations.domaineLibelle in\nreturn of the research)\n- The wording of the permits (field permits.label in return of the search)\n- The language label (field languages.label in return of the search)\n- The offer description if found in the offer title and/or the ROME label\n(description field in the search return)\n\nAllowed characters: [aA-zZ]+[0-9]+[space]+[@#$%^&+./-\"\"]", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "salaireMin": { + "description": "Minimum wage, expressed in Euro.If this data is filled in, the code of the type of minimum wage is mandatory.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "periodeSalaire": { + "description": "Period for the calculation of the minimum wage.\nIf this data is filled in, the minimum wage is mandatory.\nPossible values:\nM -> Monthly\nA -> Annual\nH -> Hourly\nC -> Fee", + "anyOf": [ + { + "$ref": "#/$defs/SalaryPeriod" + }, + { + "type": "null" + } + ], + "default": null + }, + "accesTravailleurHandicape": { + "description": "Jobs for which the employer is disabled-friendly", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresMRS": { + "description": " Allows you to search for jobs that offer the simulation recruitment method", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "grandDomaine": { + "description": "Code of the major area of the offer", + "anyOf": [ + { + "$ref": "#/$defs/IndustryDomain" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "description": "Filter offers by experience level.", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "publieeDepuis": { + "description": "Maximum number of days since the publication of the offer\nPossible values: 1, 3, 7, 14, 31", + "anyOf": [ + { + "$ref": "#/$defs/PublishedSince" + }, + { + "type": "null" + } + ], + "default": null + }, + "minCreationDate": { + "description": "Minimum offer creation date.\nIf this data is filled in, the maximum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "maxCreationDate": { + "description": "Maximum offer creation date.\nIf this data is filled in, the minimum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "partenaires": { + "description": " This filter allows you to enter your partner code in order to include or exclude your offers from the results according to the selectionmade in the PartnerSelection mode filter\nIt is possible to enter several codes (separator ','). ", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "modeSelectionPartenaires": { + "description": "Selection mode of the partner offers.\n\nThis filter works with the partner criterion and is dependent on the originOffer\ncriterion. Possible values with the results obtained according to the two other filters:\n\n- INCLUS(INCLUDED)\noriginOffer empty : Returns the PE offers and the Partners listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners listed in the Partners\ncriterion\n- EXCLU(EXCLUDED)\noriginOffer empty : Return the offers of PE and Partners not listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners not listed in the Partners\ncriterion\nNote: In all cases, if originOffer = 1, then only the France Travail (ex: Pole Emploi)\noffers will be returned", + "anyOf": [ + { + "$ref": "#/$defs/PartnerSelectionMode" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdo": { + "description": "Filtre les offres selon la dur\u00e9e hebdomadaire.\nValeurs possibles :\n0 -> Non pr\u00e9cis\u00e9\n1 -> Temps plein\n2 -> Temps partiel", + "anyOf": [ + { + "$ref": "#/$defs/WeeklyDuration" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMin": { + "description": "Minimum weekly duration of the offer\nThe value must be in HHMM format, for example : 8h => 800 ; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMax": { + "description": "Maximum weekly duration of the offer\nThe value must be in HHMM format, for example: 8h => 800; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMin": { + "description": "Minimum duration of the sought contract.\nThe search is done in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMax": { + "description": "Maximum duration of the sought contract.\nThe search is made in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresManqueCandidats": { + "description": "Filters offers older than 15 days, with less than 4 applications (of which P\u00f4le emploi is informed)\nfalse -> Offers not concerned\ntrue -> Offers with few candidates", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprisesAdaptees": { + "description": "Filter the offers where the adapted company allows a disabled worker to exercise a professional activity in conditions adapted to his capacities\nfalse -> Offers not concerned\ntrue -> Offers from adapted companies", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [], + "$defs": { + "Experience": { + "title": "Experience", + "enum": [ + "1", + "2", + "3" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Qualification": { + "title": "Qualification", + "enum": [ + 0, + 9 + ] + }, + "SalaryPeriod": { + "title": "SalaryPeriod", + "enum": [ + "A", + "C", + "H", + "M" + ] + }, + "IndustryDomain": { + "title": "IndustryDomain", + "enum": [ + "A", + "B", + "C", + "C15", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "L14", + "M", + "M13", + "M14", + "M15", + "M16", + "M17", + "M18", + "N" + ] + }, + "PublishedSince": { + "title": "PublishedSince", + "enum": [ + 1, + 3, + 7, + 14, + 31 + ] + }, + "PartnerSelectionMode": { + "title": "PartnerSelectionMode", + "enum": [ + "EXCLU", + "INCLUS" + ] + }, + "WeeklyDuration": { + "title": "WeeklyDuration", + "enum": [ + "0", + "1", + "2" + ] + } + } + }, + "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": { + "name": "?.intitule", + "reference": "?.id", + "created_at": "?.dateCreation", + "updated_at": "?.dateActualisation", + "location": "?.lieuTravail ?? {lat: .lieuTravail?.latitude, lng: .lieuTravail?.longitude, text: $concat(.lieuTravail?.libelle >> '', ' ', .lieuTravail?.codePostal >> '') | $strip}: {lat: null, lng: null, text: ''}", + "url": "?.origineOffre?.urlOrigine", + "summary": "?.description", + "requirements": "?.formations ?? $map($concat(.niveauLibelle || '', ' en ', .domaineLibelle || '')) | $join('\n')", + "skills": "?.competences ?? $map({name: .libelle, value: null, type: hard}) : []", + "languages": "?.langues ?? $map({name: .libelle, value: null}) : []", + "sections": [ + { + "name": "company_description", + "title": "'Company Description'", + "description": "?.entreprise?.description" + } + ], + "tags": [ + { + "name": "rome_code", + "value": "?.romeCode" + }, + { + "name": "rome_label", + "value": "?.romeLibelle" + }, + { + "name": "contract_nature", + "value": "?.natureContrat" + }, + { + "name": "contract_type", + "value": "?.typeContratLibelle" + }, + { + "name": "accessible_to_disabled", + "value": "?.accessibleTH" + }, + { + "name": "is_apprenticeship", + "value": "?.alternance" + }, + { + "name": "experience_required", + "value": "?.experienceExige == 'E' ?? true : false" + }, + { + "name": "experience_description", + "value": "?.experienceLibelle" + }, + { + "name": "salary_description", + "value": "?.salaire?.libelle" + }, + { + "name": "working_hours_description", + "value": "?.dureeTravailLibelle" + }, + { + "name": "working_hours_type", + "value": "?.dureeTravailLibelleConverti" + }, + { + "name": "qualification_label", + "value": "?.qualificationLibelle" + }, + { + "name": "sector_of_activity", + "value": "?.secteurActiviteLibelle" + }, + { + "name": "company_name", + "value": "?.entreprise?.nom" + }, + { + "name": "company_description", + "value": "?.entreprise?.description" + }, + { + "name": "company_website", + "value": "?.entreprise?.url" + }, + { + "name": "recruiter_name", + "value": "?.contact?.nom" + }, + { + "name": "recruiter_email", + "value": "?.contact?.courriel" + }, + { + "name": "recruiter_phone", + "value": "?.contact?.telephone" + }, + { + "name": "recruiter_website", + "value": "?.contact?.urlRecruteur" + }, + { + "name": "application_url", + "value": "?.contact?.urlPostulation" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import FranceTravail\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 FranceTravail.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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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 FranceTravail\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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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": "Client ID used to access France Travail (ex: Pole Emploi) API", + "type": "string" + }, + "client_secret": { + "description": "Client Secret used to access France Travail (ex: Pole Emploi) API", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": {} + }, + "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": "France Travail (ex: Pole Emploi)", + "origin_data_schema": { + "title": "FranceTravailJobOffer", + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "intitule": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dateCreation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dateActualisation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lieuTravail": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/JobLocation" + } + ], + "default": null + }, + "romeCode": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "romeLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellationLibelle": { + "description": "Code of the appellationA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprise": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Entreprise" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContratLibelle": { + "description": "Contract type labelExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/OfferOrigin" + } + ], + "default": null + }, + "offresManqueCandidats": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceCommentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "formations": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Formation" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "langues": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Langue" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Permis" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "outilsBureautiques": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "competences": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Competence" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "salaire": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Salaire" + } + ], + "default": null + }, + "dureeTravailLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeTravailLibelleConverti": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "complementExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "conditionExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternance": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "contact": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Contact" + } + ], + "default": null + }, + "agence": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Agence" + } + ], + "default": null + }, + "nombrePostes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "accessibleTH": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationCode": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationCode" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationLibelle": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationLibelle" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActiviteLibelle": { + "description": "Sector of activitylabelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualitesProfessionnelles": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/QualitePro" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "id", + "intitule", + "description" + ], + "$defs": { + "JobLocation": { + "title": "JobLocation", + "type": "object", + "properties": { + "libelle": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "codepostal": { + "type": "string" + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/communes", + "type": "string" + } + }, + "required": [ + "libelle", + "latitude", + "longitude", + "codepostal", + "commune" + ] + }, + "Entreprise": { + "title": "Entreprise", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "logo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "entrepriseAdaptee": { + "type": "boolean" + } + }, + "required": [ + "nom", + "description", + "logo", + "url", + "entrepriseAdaptee" + ] + }, + "OfferOrigin": { + "title": "OfferOrigin", + "type": "object", + "properties": { + "origine": { + "$ref": "#/$defs/OfferOriginTag" + }, + "urlOrigine": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "partenaires": { + "type": "array", + "items": { + "$ref": "#/$defs/Partner" + } + } + }, + "required": [ + "origine", + "urlOrigine", + "partenaires" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Partner": { + "title": "Partner", + "type": "object", + "properties": { + "nom": { + "type": "string" + }, + "url": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "nom", + "url", + "logo" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "Formation": { + "title": "Formation", + "type": "object", + "properties": { + "domaineLibelle": { + "type": "string" + }, + "niveauLibelle": { + "description": "Label of the level of the education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/niveauxFormations", + "type": "string" + }, + "commentaire": { + "type": "string" + }, + "exigence": { + "$ref": "#/$defs/Exigence" + } + }, + "required": [ + "domaineLibelle", + "niveauLibelle", + "commentaire", + "exigence" + ] + }, + "Exigence": { + "title": "Exigence", + "enum": [ + "E", + "S" + ] + }, + "Langue": { + "title": "Langue", + "type": "object", + "properties": { + "libelle": { + "description": "Language labelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/langues", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Permis": { + "title": "Permis", + "type": "object", + "properties": { + "libelle": { + "description": "requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/permis", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Competence": { + "title": "Competence", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "libelle": { + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "code", + "libelle", + "exigence" + ] + }, + "Salaire": { + "title": "Salaire", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "commentaire", + "complement1", + "complement2" + ] + }, + "Contact": { + "title": "Contact", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlRecruteur": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlPostulation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "nom", + "coordonnees1", + "coordonnees2", + "coordonnees3", + "telephone", + "courriel", + "commentaire", + "urlRecruteur", + "urlPostulation" + ] + }, + "Agence": { + "title": "Agence", + "type": "object", + "properties": { + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "telephone", + "courriel" + ] + }, + "QualificationCode": { + "title": "QualificationCode", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ] + }, + "QualificationLibelle": { + "title": "QualificationLibelle", + "enum": [ + "Agent de ma\u00eetrise", + "Cadre", + "Employ\u00e9 non qualifi\u00e9", + "Employ\u00e9 qualifi\u00e9", + "Man\u0153uvre", + "Ouvrier qualifi\u00e9 (P1, P2)", + "Ouvrier qualifi\u00e9 (P3, P4, OHQ)", + "Ouvrier sp\u00e9cialis\u00e9", + "Technicien" + ] + }, + "QualitePro": { + "title": "QualitePro", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "description" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "range": { + "description": "Pagination of data. The range of results is limited to 150. Format: p-d, where :\n\np is the index (starting at 0) of the first element requested, which must not exceed 3000\nd is the index of the last element requested, which must not exceed 3149", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort": { + "description": "Sorting of data", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "domaine": { + "description": "Professional field codeA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint :https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//domaines", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeROME": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "theme": { + "description": "Theme of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//themes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellation": { + "description": "ROME designation code for the offer, see reference belowA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeNAF": { + "description": "NAF code of the offer (format 99.99X)A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//nafs", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experience": { + "description": "Level of experience required\nPossible values:\n1 -> Less than 1 year of experience\n2 -> From 1 to 3 years of experience\n3 -> More than 3 years of experience", + "anyOf": [ + { + "$ref": "#/$defs/Experience" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExigence": { + "description": "Filter offers by experience requirement (D beginner accepted, S experience desired, E experience required)", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "description": "Origin of the offer\nPossible values:\n1 -> Job center\n2 -> Partner", + "anyOf": [ + { + "$ref": "#/$defs/OfferOriginTag" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualification": { + "description": "Qualification Code\nPossible values:\n0 -> Non-executive\n9 -> Executive", + "anyOf": [ + { + "$ref": "#/$defs/Qualification" + }, + { + "type": "null" + } + ], + "default": null + }, + "tempsPlein": { + "description": "Promote the use of the WeeklyDuration filter\nPossible values:\nfalse -> Part-time\ntrue -> Full time\nIf the parameter is not filled, then all the offers are returned", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//communes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "Kilometric distance of the search radius\nDefault value: 10Note: to obtain only the offers of a specific commune, then you must fill in the parameter 'distance=0'.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "departement": { + "description": "Job departmentA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//departements", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "inclureLimitrophes": { + "description": "Include bordering departments in the search", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "region": { + "description": "Code of the region of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//regions", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "paysContinent": { + "description": "Code of the country or continent of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//paysAND https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//continents", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "niveauFormation": { + "description": "Level of education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//niveauxFormations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "description": "Code of the requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//permis", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "motsCles": { + "description": "Search by keyword\n\nEach keyword (or expression) is at least 2 characters long and must\nbe separated by a comma.\nThe search on several keywords is processed via the logical operator \"AND\".\nThe keyword search can be used to search on :\n\n- The title of the offer (title field in the search return)\n- The ROME code (romeCode field in the search return)\n- The ROME label (field romeLibelle in return for the search)\n- The competences label (field competences.libelle in return of the search)\n- The wording of the training fields (field formations.domaineLibelle in\nreturn of the research)\n- The wording of the permits (field permits.label in return of the search)\n- The language label (field languages.label in return of the search)\n- The offer description if found in the offer title and/or the ROME label\n(description field in the search return)\n\nAllowed characters: [aA-zZ]+[0-9]+[space]+[@#$%^&+./-\"\"]", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "salaireMin": { + "description": "Minimum wage, expressed in Euro.If this data is filled in, the code of the type of minimum wage is mandatory.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "periodeSalaire": { + "description": "Period for the calculation of the minimum wage.\nIf this data is filled in, the minimum wage is mandatory.\nPossible values:\nM -> Monthly\nA -> Annual\nH -> Hourly\nC -> Fee", + "anyOf": [ + { + "$ref": "#/$defs/SalaryPeriod" + }, + { + "type": "null" + } + ], + "default": null + }, + "accesTravailleurHandicape": { + "description": "Jobs for which the employer is disabled-friendly", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresMRS": { + "description": " Allows you to search for jobs that offer the simulation recruitment method", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "grandDomaine": { + "description": "Code of the major area of the offer", + "anyOf": [ + { + "$ref": "#/$defs/IndustryDomain" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "description": "Filter offers by experience level.", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "publieeDepuis": { + "description": "Maximum number of days since the publication of the offer\nPossible values: 1, 3, 7, 14, 31", + "anyOf": [ + { + "$ref": "#/$defs/PublishedSince" + }, + { + "type": "null" + } + ], + "default": null + }, + "minCreationDate": { + "description": "Minimum offer creation date.\nIf this data is filled in, the maximum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "maxCreationDate": { + "description": "Maximum offer creation date.\nIf this data is filled in, the minimum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "partenaires": { + "description": " This filter allows you to enter your partner code in order to include or exclude your offers from the results according to the selectionmade in the PartnerSelection mode filter\nIt is possible to enter several codes (separator ','). ", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "modeSelectionPartenaires": { + "description": "Selection mode of the partner offers.\n\nThis filter works with the partner criterion and is dependent on the originOffer\ncriterion. Possible values with the results obtained according to the two other filters:\n\n- INCLUS(INCLUDED)\noriginOffer empty : Returns the PE offers and the Partners listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners listed in the Partners\ncriterion\n- EXCLU(EXCLUDED)\noriginOffer empty : Return the offers of PE and Partners not listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners not listed in the Partners\ncriterion\nNote: In all cases, if originOffer = 1, then only the France Travail (ex: Pole Emploi)\noffers will be returned", + "anyOf": [ + { + "$ref": "#/$defs/PartnerSelectionMode" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdo": { + "description": "Filtre les offres selon la dur\u00e9e hebdomadaire.\nValeurs possibles :\n0 -> Non pr\u00e9cis\u00e9\n1 -> Temps plein\n2 -> Temps partiel", + "anyOf": [ + { + "$ref": "#/$defs/WeeklyDuration" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMin": { + "description": "Minimum weekly duration of the offer\nThe value must be in HHMM format, for example : 8h => 800 ; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMax": { + "description": "Maximum weekly duration of the offer\nThe value must be in HHMM format, for example: 8h => 800; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMin": { + "description": "Minimum duration of the sought contract.\nThe search is done in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMax": { + "description": "Maximum duration of the sought contract.\nThe search is made in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresManqueCandidats": { + "description": "Filters offers older than 15 days, with less than 4 applications (of which P\u00f4le emploi is informed)\nfalse -> Offers not concerned\ntrue -> Offers with few candidates", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprisesAdaptees": { + "description": "Filter the offers where the adapted company allows a disabled worker to exercise a professional activity in conditions adapted to his capacities\nfalse -> Offers not concerned\ntrue -> Offers from adapted companies", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [], + "$defs": { + "Experience": { + "title": "Experience", + "enum": [ + "1", + "2", + "3" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Qualification": { + "title": "Qualification", + "enum": [ + 0, + 9 + ] + }, + "SalaryPeriod": { + "title": "SalaryPeriod", + "enum": [ + "A", + "C", + "H", + "M" + ] + }, + "IndustryDomain": { + "title": "IndustryDomain", + "enum": [ + "A", + "B", + "C", + "C15", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "L14", + "M", + "M13", + "M14", + "M15", + "M16", + "M17", + "M18", + "N" + ] + }, + "PublishedSince": { + "title": "PublishedSince", + "enum": [ + 1, + 3, + 7, + 14, + 31 + ] + }, + "PartnerSelectionMode": { + "title": "PartnerSelectionMode", + "enum": [ + "EXCLU", + "INCLUS" + ] + }, + "WeeklyDuration": { + "title": "WeeklyDuration", + "enum": [ + "0", + "1", + "2" + ] + } + } + }, + "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": { + "name": "?.intitule", + "reference": "?.id", + "created_at": "?.dateCreation", + "updated_at": "?.dateActualisation", + "location": "?.lieuTravail ?? {lat: .lieuTravail?.latitude, lng: .lieuTravail?.longitude, text: $concat(.lieuTravail?.libelle >> '', ' ', .lieuTravail?.codePostal >> '') | $strip}: {lat: null, lng: null, text: ''}", + "url": "?.origineOffre?.urlOrigine", + "summary": "?.description", + "requirements": "?.formations ?? $map($concat(.niveauLibelle || '', ' en ', .domaineLibelle || '')) | $join('\n')", + "skills": "?.competences ?? $map({name: .libelle, value: null, type: hard}) : []", + "languages": "?.langues ?? $map({name: .libelle, value: null}) : []", + "sections": [ + { + "name": "company_description", + "title": "'Company Description'", + "description": "?.entreprise?.description" + } + ], + "tags": [ + { + "name": "rome_code", + "value": "?.romeCode" + }, + { + "name": "rome_label", + "value": "?.romeLibelle" + }, + { + "name": "contract_nature", + "value": "?.natureContrat" + }, + { + "name": "contract_type", + "value": "?.typeContratLibelle" + }, + { + "name": "accessible_to_disabled", + "value": "?.accessibleTH" + }, + { + "name": "is_apprenticeship", + "value": "?.alternance" + }, + { + "name": "experience_required", + "value": "?.experienceExige == 'E' ?? true : false" + }, + { + "name": "experience_description", + "value": "?.experienceLibelle" + }, + { + "name": "salary_description", + "value": "?.salaire?.libelle" + }, + { + "name": "working_hours_description", + "value": "?.dureeTravailLibelle" + }, + { + "name": "working_hours_type", + "value": "?.dureeTravailLibelleConverti" + }, + { + "name": "qualification_label", + "value": "?.qualificationLibelle" + }, + { + "name": "sector_of_activity", + "value": "?.secteurActiviteLibelle" + }, + { + "name": "company_name", + "value": "?.entreprise?.nom" + }, + { + "name": "company_description", + "value": "?.entreprise?.description" + }, + { + "name": "company_website", + "value": "?.entreprise?.url" + }, + { + "name": "recruiter_name", + "value": "?.contact?.nom" + }, + { + "name": "recruiter_email", + "value": "?.contact?.courriel" + }, + { + "name": "recruiter_phone", + "value": "?.contact?.telephone" + }, + { + "name": "recruiter_website", + "value": "?.contact?.urlRecruteur" + }, + { + "name": "application_url", + "value": "?.contact?.urlPostulation" + } + ] + }, + "workflow": { + "catch_template": "import typing as t\n\nfrom hrflow_connectors.v2 import FranceTravail\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 FranceTravail.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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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 FranceTravail\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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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": "Client ID used to access France Travail (ex: Pole Emploi) API", + "type": "string" + }, + "client_secret": { + "description": "Client Secret used to access France Travail (ex: Pole Emploi) API", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret" + ], + "$defs": {} + }, + "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": "France Travail (ex: Pole Emploi)", + "origin_data_schema": { + "title": "FranceTravailJobOffer", + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "intitule": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dateCreation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dateActualisation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lieuTravail": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/JobLocation" + } + ], + "default": null + }, + "romeCode": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "romeLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellationLibelle": { + "description": "Code of the appellationA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprise": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Entreprise" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContratLibelle": { + "description": "Contract type labelExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/OfferOrigin" + } + ], + "default": null + }, + "offresManqueCandidats": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceCommentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "formations": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Formation" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "langues": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Langue" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Permis" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "outilsBureautiques": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "competences": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/Competence" + } + }, + { + "type": "null" + } + ], + "default": null + }, + "salaire": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Salaire" + } + ], + "default": null + }, + "dureeTravailLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeTravailLibelleConverti": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "complementExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "conditionExercice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "alternance": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "contact": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Contact" + } + ], + "default": null + }, + "agence": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/Agence" + } + ], + "default": null + }, + "nombrePostes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "accessibleTH": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementCode": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "deplacementLibelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationCode": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationCode" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualificationLibelle": { + "anyOf": [ + { + "$ref": "#/$defs/QualificationLibelle" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActiviteLibelle": { + "description": "Sector of activitylabelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualitesProfessionnelles": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/QualitePro" + } + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "id", + "intitule", + "description" + ], + "$defs": { + "JobLocation": { + "title": "JobLocation", + "type": "object", + "properties": { + "libelle": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "codepostal": { + "type": "string" + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/communes", + "type": "string" + } + }, + "required": [ + "libelle", + "latitude", + "longitude", + "codepostal", + "commune" + ] + }, + "Entreprise": { + "title": "Entreprise", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "logo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "entrepriseAdaptee": { + "type": "boolean" + } + }, + "required": [ + "nom", + "description", + "logo", + "url", + "entrepriseAdaptee" + ] + }, + "OfferOrigin": { + "title": "OfferOrigin", + "type": "object", + "properties": { + "origine": { + "$ref": "#/$defs/OfferOriginTag" + }, + "urlOrigine": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "partenaires": { + "type": "array", + "items": { + "$ref": "#/$defs/Partner" + } + } + }, + "required": [ + "origine", + "urlOrigine", + "partenaires" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Partner": { + "title": "Partner", + "type": "object", + "properties": { + "nom": { + "type": "string" + }, + "url": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "nom", + "url", + "logo" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "Formation": { + "title": "Formation", + "type": "object", + "properties": { + "domaineLibelle": { + "type": "string" + }, + "niveauLibelle": { + "description": "Label of the level of the education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/niveauxFormations", + "type": "string" + }, + "commentaire": { + "type": "string" + }, + "exigence": { + "$ref": "#/$defs/Exigence" + } + }, + "required": [ + "domaineLibelle", + "niveauLibelle", + "commentaire", + "exigence" + ] + }, + "Exigence": { + "title": "Exigence", + "enum": [ + "E", + "S" + ] + }, + "Langue": { + "title": "Langue", + "type": "object", + "properties": { + "libelle": { + "description": "Language labelA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/langues", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Permis": { + "title": "Permis", + "type": "object", + "properties": { + "libelle": { + "description": "requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.emploi-store.fr/partenaire/offresdemploi/v2/referentiel/referentiel/permis", + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "exigence" + ] + }, + "Competence": { + "title": "Competence", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "libelle": { + "type": "string" + }, + "exigence": { + "anyOf": [ + { + "$ref": "#/$defs/Exigence" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "code", + "libelle", + "exigence" + ] + }, + "Salaire": { + "title": "Salaire", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "complement2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "commentaire", + "complement1", + "complement2" + ] + }, + "Contact": { + "title": "Contact", + "type": "object", + "properties": { + "nom": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees1": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees2": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "coordonnees3": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "commentaire": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlRecruteur": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "urlPostulation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "nom", + "coordonnees1", + "coordonnees2", + "coordonnees3", + "telephone", + "courriel", + "commentaire", + "urlRecruteur", + "urlPostulation" + ] + }, + "Agence": { + "title": "Agence", + "type": "object", + "properties": { + "telephone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "courriel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "telephone", + "courriel" + ] + }, + "QualificationCode": { + "title": "QualificationCode", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ] + }, + "QualificationLibelle": { + "title": "QualificationLibelle", + "enum": [ + "Agent de ma\u00eetrise", + "Cadre", + "Employ\u00e9 non qualifi\u00e9", + "Employ\u00e9 qualifi\u00e9", + "Man\u0153uvre", + "Ouvrier qualifi\u00e9 (P1, P2)", + "Ouvrier qualifi\u00e9 (P3, P4, OHQ)", + "Ouvrier sp\u00e9cialis\u00e9", + "Technicien" + ] + }, + "QualitePro": { + "title": "QualitePro", + "type": "object", + "properties": { + "libelle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "libelle", + "description" + ] + } + } + }, + "supports_incremental": false, + "pull_parameters": { + "title": "ReadJobsParameters", + "type": "object", + "properties": { + "range": { + "description": "Pagination of data. The range of results is limited to 150. Format: p-d, where :\n\np is the index (starting at 0) of the first element requested, which must not exceed 3000\nd is the index of the last element requested, which must not exceed 3149", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sort": { + "description": "Sorting of data", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "domaine": { + "description": "Professional field codeA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint :https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//domaines", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeROME": { + "description": "ROME code of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//metiers", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "theme": { + "description": "Theme of the professionA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//themes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "appellation": { + "description": "ROME designation code for the offer, see reference belowA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//appellations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "codeNAF": { + "description": "NAF code of the offer (format 99.99X)A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//nafs", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "secteurActivite": { + "description": "NAF codes for sectors of activity. It is possible to specify two NAF codes by separating them with a comma in the character string.Example : 01,02A GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//secteursActivites", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "experience": { + "description": "Level of experience required\nPossible values:\n1 -> Less than 1 year of experience\n2 -> From 1 to 3 years of experience\n3 -> More than 3 years of experience", + "anyOf": [ + { + "$ref": "#/$defs/Experience" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExigence": { + "description": "Filter offers by experience requirement (D beginner accepted, S experience desired, E experience required)", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "typeContrat": { + "description": "Contract type codeExample : CDI,CDDA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//typesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "natureContrat": { + "description": "Code of the nature of contractA GET request for the list of accepted choices from the Offres d'emploi API to this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//naturesContrats", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "origineOffre": { + "description": "Origin of the offer\nPossible values:\n1 -> Job center\n2 -> Partner", + "anyOf": [ + { + "$ref": "#/$defs/OfferOriginTag" + }, + { + "type": "null" + } + ], + "default": null + }, + "qualification": { + "description": "Qualification Code\nPossible values:\n0 -> Non-executive\n9 -> Executive", + "anyOf": [ + { + "$ref": "#/$defs/Qualification" + }, + { + "type": "null" + } + ], + "default": null + }, + "tempsPlein": { + "description": "Promote the use of the WeeklyDuration filter\nPossible values:\nfalse -> Part-time\ntrue -> Full time\nIf the parameter is not filled, then all the offers are returned", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "commune": { + "description": "INSEE code of the communeA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//communes", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "distance": { + "description": "Kilometric distance of the search radius\nDefault value: 10Note: to obtain only the offers of a specific commune, then you must fill in the parameter 'distance=0'.", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "departement": { + "description": "Job departmentA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//departements", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "inclureLimitrophes": { + "description": "Include bordering departments in the search", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "region": { + "description": "Code of the region of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//regions", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "paysContinent": { + "description": "Code of the country or continent of the offerA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//paysAND https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//continents", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "niveauFormation": { + "description": "Level of education requiredA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//niveauxFormations", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "permis": { + "description": "Code of the requested licenseA GET request for the list of accepted choices from the Offres d'emploi APIto this endpoint : https://api.francetravail.io/partenaire/offresdemploi/v2/referentiel//permis", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "motsCles": { + "description": "Search by keyword\n\nEach keyword (or expression) is at least 2 characters long and must\nbe separated by a comma.\nThe search on several keywords is processed via the logical operator \"AND\".\nThe keyword search can be used to search on :\n\n- The title of the offer (title field in the search return)\n- The ROME code (romeCode field in the search return)\n- The ROME label (field romeLibelle in return for the search)\n- The competences label (field competences.libelle in return of the search)\n- The wording of the training fields (field formations.domaineLibelle in\nreturn of the research)\n- The wording of the permits (field permits.label in return of the search)\n- The language label (field languages.label in return of the search)\n- The offer description if found in the offer title and/or the ROME label\n(description field in the search return)\n\nAllowed characters: [aA-zZ]+[0-9]+[space]+[@#$%^&+./-\"\"]", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "salaireMin": { + "description": "Minimum wage, expressed in Euro.If this data is filled in, the code of the type of minimum wage is mandatory.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "periodeSalaire": { + "description": "Period for the calculation of the minimum wage.\nIf this data is filled in, the minimum wage is mandatory.\nPossible values:\nM -> Monthly\nA -> Annual\nH -> Hourly\nC -> Fee", + "anyOf": [ + { + "$ref": "#/$defs/SalaryPeriod" + }, + { + "type": "null" + } + ], + "default": null + }, + "accesTravailleurHandicape": { + "description": "Jobs for which the employer is disabled-friendly", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresMRS": { + "description": " Allows you to search for jobs that offer the simulation recruitment method", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "grandDomaine": { + "description": "Code of the major area of the offer", + "anyOf": [ + { + "$ref": "#/$defs/IndustryDomain" + }, + { + "type": "null" + } + ], + "default": null + }, + "experienceExige": { + "description": "Filter offers by experience level.", + "anyOf": [ + { + "$ref": "#/$defs/ExperienceRequirement" + }, + { + "type": "null" + } + ], + "default": null + }, + "publieeDepuis": { + "description": "Maximum number of days since the publication of the offer\nPossible values: 1, 3, 7, 14, 31", + "anyOf": [ + { + "$ref": "#/$defs/PublishedSince" + }, + { + "type": "null" + } + ], + "default": null + }, + "minCreationDate": { + "description": "Minimum offer creation date.\nIf this data is filled in, the maximum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "maxCreationDate": { + "description": "Maximum offer creation date.\nIf this data is filled in, the minimum offer creation date is mandatory.\nISO-8601 standard (YYYY-MM-DDTHH:MM:SSZ)", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "partenaires": { + "description": " This filter allows you to enter your partner code in order to include or exclude your offers from the results according to the selectionmade in the PartnerSelection mode filter\nIt is possible to enter several codes (separator ','). ", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "modeSelectionPartenaires": { + "description": "Selection mode of the partner offers.\n\nThis filter works with the partner criterion and is dependent on the originOffer\ncriterion. Possible values with the results obtained according to the two other filters:\n\n- INCLUS(INCLUDED)\noriginOffer empty : Returns the PE offers and the Partners listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners listed in the Partners\ncriterion\n- EXCLU(EXCLUDED)\noriginOffer empty : Return the offers of PE and Partners not listed in the Partners\ncriterion\noriginOffer at 2 : Only the offers of the Partners not listed in the Partners\ncriterion\nNote: In all cases, if originOffer = 1, then only the France Travail (ex: Pole Emploi)\noffers will be returned", + "anyOf": [ + { + "$ref": "#/$defs/PartnerSelectionMode" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdo": { + "description": "Filtre les offres selon la dur\u00e9e hebdomadaire.\nValeurs possibles :\n0 -> Non pr\u00e9cis\u00e9\n1 -> Temps plein\n2 -> Temps partiel", + "anyOf": [ + { + "$ref": "#/$defs/WeeklyDuration" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMin": { + "description": "Minimum weekly duration of the offer\nThe value must be in HHMM format, for example : 8h => 800 ; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeHebdoMax": { + "description": "Maximum weekly duration of the offer\nThe value must be in HHMM format, for example: 8h => 800; 24h30 => 2430", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMin": { + "description": "Minimum duration of the sought contract.\nThe search is done in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "dureeContratMax": { + "description": "Maximum duration of the sought contract.\nThe search is made in months (ex: 0.5 for 15 days, 1.0 for 1 month,2.0 for 2 months).\nPositive decimal (Decimal separator: '.')", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "offresManqueCandidats": { + "description": "Filters offers older than 15 days, with less than 4 applications (of which P\u00f4le emploi is informed)\nfalse -> Offers not concerned\ntrue -> Offers with few candidates", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "entreprisesAdaptees": { + "description": "Filter the offers where the adapted company allows a disabled worker to exercise a professional activity in conditions adapted to his capacities\nfalse -> Offers not concerned\ntrue -> Offers from adapted companies", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [], + "$defs": { + "Experience": { + "title": "Experience", + "enum": [ + "1", + "2", + "3" + ] + }, + "ExperienceRequirement": { + "title": "ExperienceRequirement", + "enum": [ + "D", + "E", + "S" + ] + }, + "OfferOriginTag": { + "title": "OfferOriginTag", + "enum": [ + 1, + 2 + ] + }, + "Qualification": { + "title": "Qualification", + "enum": [ + 0, + 9 + ] + }, + "SalaryPeriod": { + "title": "SalaryPeriod", + "enum": [ + "A", + "C", + "H", + "M" + ] + }, + "IndustryDomain": { + "title": "IndustryDomain", + "enum": [ + "A", + "B", + "C", + "C15", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "L14", + "M", + "M13", + "M14", + "M15", + "M16", + "M17", + "M18", + "N" + ] + }, + "PublishedSince": { + "title": "PublishedSince", + "enum": [ + 1, + 3, + 7, + 14, + 31 + ] + }, + "PartnerSelectionMode": { + "title": "PartnerSelectionMode", + "enum": [ + "EXCLU", + "INCLUS" + ] + }, + "WeeklyDuration": { + "title": "WeeklyDuration", + "enum": [ + "0", + "1", + "2" + ] + } + } + }, + "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 FranceTravail\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 FranceTravail.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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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 FranceTravail\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 FranceTravail.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'):\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 ('range', 'sort', 'domaine', 'codeROME', 'theme', 'appellation', 'codeNAF', 'secteurActivite', 'experience', 'experienceExigence', 'typeContrat', 'natureContrat', 'origineOffre', 'qualification', 'tempsPlein', 'commune', 'distance', 'departement', 'inclureLimitrophes', 'region', 'paysContinent', 'niveauFormation', 'permis', 'motsCles', 'salaireMin', 'periodeSalaire', 'accesTravailleurHandicape', 'offresMRS', 'grandDomaine', 'experienceExige', 'publieeDepuis', 'minCreationDate', 'maxCreationDate', 'partenaires', 'modeSelectionPartenaires', 'dureeHebdo', 'dureeHebdoMin', 'dureeHebdoMax', 'dureeContratMin', 'dureeContratMax', 'offresManqueCandidats', 'entreprisesAdaptees'):\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 FranceTravail.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" + } + } + } + ] } ] } \ No newline at end of file diff --git a/src/hrflow_connectors/__init__.py b/src/hrflow_connectors/__init__.py index ffcef0300..a39fbb69a 100644 --- a/src/hrflow_connectors/__init__.py +++ b/src/hrflow_connectors/__init__.py @@ -10,7 +10,6 @@ from hrflow_connectors.v1.connectors.jobology import Jobology from hrflow_connectors.v1.connectors.lever import Lever from hrflow_connectors.v1.connectors.meteojob import Meteojob -from hrflow_connectors.v1.connectors.poleemploi import PoleEmploi from hrflow_connectors.v1.connectors.recruitee import Recruitee from hrflow_connectors.v1.connectors.salesforce import Salesforce from hrflow_connectors.v1.connectors.sapsuccessfactors import SAPSuccessFactors @@ -26,7 +25,6 @@ __CONNECTORS__ = [ SmartRecruiters, TalentSoft, - PoleEmploi, Adzuna, Recruitee, Workable, diff --git a/src/hrflow_connectors/v1/data/connectors.json b/src/hrflow_connectors/v1/data/connectors.json index 90cf558cb..f498ea467 100644 --- a/src/hrflow_connectors/v1/data/connectors.json +++ b/src/hrflow_connectors/v1/data/connectors.json @@ -872,9 +872,9 @@ "pre_v2_updated_at": "" }, { - "name": "Pole Emploi", + "name": "France Travail (ex: Pole Emploi)", "type": "Job Board", - "subtype": "poleemploi", + "subtype": "francetravail", "status": "opensource", "release_date": "15/07/2022", "pre_v2_updated_at": "24/10/2024" diff --git a/src/hrflow_connectors/v2/__init__.py b/src/hrflow_connectors/v2/__init__.py index 6e3ebf6c5..7eddc5ee6 100644 --- a/src/hrflow_connectors/v2/__init__.py +++ b/src/hrflow_connectors/v2/__init__.py @@ -1,5 +1,7 @@ from hrflow_connectors.v2.connectors.admen import Admen +from hrflow_connectors.v2.connectors.adzuna import Adzuna from hrflow_connectors.v2.connectors.bullhorn import Bullhorn +from hrflow_connectors.v2.connectors.francetravail import FranceTravail from hrflow_connectors.v2.connectors.hubspot import Hubspot from hrflow_connectors.v2.connectors.recruitee import Recruitee from hrflow_connectors.v2.connectors.smartrecruiters import SmartRecruiters @@ -11,4 +13,13 @@ hrflow_connectors_docs as hrflow_connectors_docs, ) -__CONNECTORS__ = [Bullhorn, ZohoRecruit, Admen, SmartRecruiters, Hubspot, Recruitee] +__CONNECTORS__ = [ + Bullhorn, + ZohoRecruit, + Admen, + SmartRecruiters, + Hubspot, + Recruitee, + Adzuna, + FranceTravail, +] diff --git a/src/hrflow_connectors/v2/connectors/admen/README.md b/src/hrflow_connectors/v2/connectors/admen/README.md index 549bf572f..097b934af 100644 --- a/src/hrflow_connectors/v2/connectors/admen/README.md +++ b/src/hrflow_connectors/v2/connectors/admen/README.md @@ -1,7 +1,7 @@ # 📖 Summary - [📖 Summary](#📖-summary) -- [💼 About Admen](#💼-about-admen) - - [😍 Why is it a big deal for Admen customers & partners?](#😍-why-is-it-a-big-deal-for-admen-customers--partners) +- [💼 About Ad-men](#💼-about-ad-men) + - [😍 Why is it a big deal for Ad-men customers & partners?](#😍-why-is-it-a-big-deal-for-ad-men-customers--partners) - [🔧 How does it work?](#🔧-how-does-it-work) - [📊 Data integration capabilities:](#📊-data-integration-capabilities) - [🧠 Artificial Intelligence capabilities:](#🧠-artificial-intelligence-capabilities) @@ -11,7 +11,7 @@ - [👏 Special Thanks](#👏-special-thanks) -# 💼 About Admen +# 💼 About Ad-men > Need an efficient, high-performance HR solution for managing your applications? @@ -19,23 +19,29 @@ Choose AD-Men, the No. 1 software for recruitment agencies. -## 😍 Why is it a big deal for Admen customers & partners? +## 😍 Why is it a big deal for Ad-men customers & partners? This new connector will enable: -- ⚡ A Fastlane Talent & Workforce data integration for Admen customers & partners -- 🤖 Cutting-edge AI-powered Talent Experiences & Recruiter Experiences for Admen customers +- ⚡ A Fastlane Talent & Workforce data integration for Ad-men customers & partners +- 🤖 Cutting-edge AI-powered Talent Experiences & Recruiter Experiences for Ad-men customers # 🔧 How does it work? ## 📊 Data integration capabilities: -- ⬅️ Send Profiles data from Admen to a Destination of your choice. -- ➡️ Send Profiles data from a Source of your choice to Admen. -- ⬅️ Send Jobs data from Admen to a Destination of your choice. -- ➡️ Send Jobs data from a Source of your choice to Admen. +- ⬅️ Send Profiles data from Ad-men to a Destination of your choice. +- ➡️ Send Profiles data from a Source of your choice to Ad-men. +- ⬅️ Send Jobs data from Ad-men to a Destination of your choice. +- ➡️ Send Jobs data from a Source of your choice to Ad-men. +
+ +
+
-
+
+
+
+ +| Action | Description | +| ------- | ----------- | +| [**Create jobs in hrflow**](docs/create_jobs_in_hrflow.md) | Send **created** 'job(s)' _from_ _to_ HrFlow | +| [**Update jobs in hrflow**](docs/update_jobs_in_hrflow.md) | Send **updated** 'job(s)' _from_ _to_ HrFlow | +| [**Archive jobs in hrflow**](docs/archive_jobs_in_hrflow.md) | Send **archived** 'job(s)' _from_ _to_ HrFlow | + + +
+ + +# 💍 Quick Start Examples + +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 : + + +
+
+
+
+
+ +| Action | Description | +| ------- | ----------- | +| [**Create jobs in hrflow**](docs/create_jobs_in_hrflow.md) | Send **created** 'job(s)' _from_ _to_ HrFlow | +| [**Update jobs in hrflow**](docs/update_jobs_in_hrflow.md) | Send **updated** 'job(s)' _from_ _to_ HrFlow | +| [**Archive jobs in hrflow**](docs/archive_jobs_in_hrflow.md) | Send **archived** 'job(s)' _from_ _to_ HrFlow | + + +
+ + +# 💍 Quick Start Examples + +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 : + +
+
-
+
-
-
-
+
-
-
-