| = Python Language | |
| :doctitle: Python | |
| :shortname: python | |
| :artifactid: camel-python | |
| :description: Evaluates a Python expression | |
| :since: 3.19 | |
| :supportlevel: Experimental | |
| :tabs-sync-option: | |
| *Since Camel {since}* | |
| Camel allows https://www.jython.org/[Python] to be | |
| used as an xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate] | |
| in Camel routes. | |
| For example, you can use Python in a xref:manual::predicate.adoc[Predicate] | |
| with the xref:eips:choice-eip.adoc[Content-Based Router] EIP. | |
| == Python Options | |
| // language options: START | |
| include::partial$language-options.adoc[] | |
| // language options: END | |
| == Variables | |
| [width="100%",cols="10%,10%,80%",options="header",] | |
| |======================================================================= | |
| |Variable |Type |Description | |
| |*this* |Exchange |the Exchange is the root object | |
| |exchange |Exchange |the Exchange | |
| |camelContext |CamelContext |the CamelContext | |
| |exchangeId |String |the exchange id | |
| |message |Message |the message | |
| |request |Message |the message (same as `message`) | |
| |body |Object |the message body | |
| |header |Map |the message headers (same as `headers`) | |
| |headers |Map |the message headers | |
| |exchangeProperty |Map |the exchange properties (same as `exchangeProperties`) | |
| |exchangeProperties |Map |the exchange properties | |
| |variable |Map |the exchange variables (same as `variables`) | |
| |variables |Map |the exchange variables | |
| |exception |Exception |the exception if the exchange failed (or the caught exception in an error handler), otherwise `None` | |
| |context |CamelContext |*Deprecated* use `camelContext` | |
| |properties |Map |*Deprecated* use `exchangeProperties` | |
| |======================================================================= | |
| The variables have the same names as in the xref:groovy-language.adoc[Groovy] language, except `in`, which is a | |
| reserved word in Python (use `message` or `request`), and the deprecated `out` and `response`. The deprecated | |
| `context` and `properties` still work. | |
| The `variable` and `variables` bindings are the exchange-scoped variables (for example set with the | |
| xref:eips:setVariable-eip.adoc[Set Variable] EIP). Global and route variables, such as `global:foo`, | |
| are not in this map; use `exchange.getVariable('global:foo')` for those. | |
| == Examples | |
| A Python predicate in a xref:eips:choice-eip.adoc[Content-Based Router]: | |
| [source,yaml] | |
| ---- | |
| - route: | |
| from: | |
| uri: direct:orders | |
| steps: | |
| - choice: | |
| when: | |
| - expression: | |
| python: | |
| expression: "headers.get('priority') == 'high'" | |
| steps: | |
| - to: | |
| uri: direct:fast | |
| otherwise: | |
| steps: | |
| - to: | |
| uri: direct:normal | |
| ---- | |
| A Python expression that sets the message body from the body and a header: | |
| [source,yaml] | |
| ---- | |
| - route: | |
| from: | |
| uri: direct:greet | |
| steps: | |
| - setBody: | |
| expression: | |
| python: | |
| expression: "'Hello ' + str(body) + ', your priority is ' + str(headers.get('priority'))" | |
| - to: | |
| uri: log:greeting | |
| ---- | |
| == Dependencies | |
| To use Python in your Camel routes, you need to add the dependency on | |
| *camel-python* which implements the Python language. | |
| If you use Maven, you could add the following to your `pom.xml`, | |
| substituting the version number for the latest release. | |
| [source,xml] | |
| ------------------------------------- | |
| <dependency> | |
| <groupId>org.apache.camel</groupId> | |
| <artifactId>camel-python</artifactId> | |
| <version>x.x.x</version> | |
| </dependency> | |
| ------------------------------------- |