[ 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)