[ 
https://issues.apache.org/jira/browse/AIRFLOW-3997?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ash Berlin-Taylor resolved AIRFLOW-3997.
----------------------------------------
       Resolution: Done
    Fix Version/s: 1.10.3

> Add accessor for optional variables
> -----------------------------------
>
>                 Key: AIRFLOW-3997
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-3997
>             Project: Apache Airflow
>          Issue Type: Improvement
>          Components: models
>    Affects Versions: 1.10.2
>            Reporter: Kristian Yrjölä
>            Assignee: Kristian Yrjölä
>            Priority: Minor
>             Fix For: 1.10.3
>
>
> h4. TL;DR
> Proposing an addition to the _Variable_ accessors for optional variables. No 
> change in existing functions.
>  
> h4. Description
> Add a function to get a variable if it exists, and don't raise an error if it 
> doesn't.
> *Rationale:*
> * The get function raises a _KeyError_ for a missing variable, if not careful 
> that can bring down the whole application. Having a optional get function can 
> make client code safer, isolating errors to the code using the specific 
> variable only
> * Sometimes there is no obvious value to set as default, but you rather want 
> to know if the variable is missing
> * The current get function doesn't support _None_ as a default value
> * Optional variables are good for feature flags for instance if you want to 
> control certain behaviours between environments before it's released in 
> production in a continuous deployment setup
> Passing in _default_var=None_ still raises a _KeyError_ since that is the 
> default value of the _default_var_ parameter. If variable "foo" doesn't exist:
> {code:java}
> foo = Variable.get("foo", default_var=None)
> -> KeyError{code}
> You could use empty string or other values to indicate a missing variable, 
> like this:
> {code:java}
> foo = Variable.get("foo", default_var="n/a")
> if foo == "n/a":
>  handle_missing_foo(){code}
> *My proposal is this:*
> {code:java}
> foo = Variable.optional("foo")
> if foo is None:
>  handle_missing_foo(){code}
> Which IMHO is more in line with Python's handling of a missing value.
> The function should still support the _serialize_json_ and _session_ 
> parameters, but not the _default_var_ parameter, since that would make little 
> sense.
> Of course this can still be handled on the client side with a try-catch. 
> However it can be a natural part of the API for the _Variable_ class, 
> replacing many try-catches in client code.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to