Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple requires #2475

Merged
merged 3 commits into from
Aug 6, 2018
Merged

Conversation

StasDeep
Copy link
Contributor

@StasDeep StasDeep commented Jul 29, 2018

Description

Now requires decorator can take multiple tasks to require, as well as inherits decorator (no need to stack them now). But clone_parent method becomes ambiguous in cases when there are 2+ tasks to inherit. I've kept it as is to not break anything and added clone_parents method, that is used inside requires decorator.

Motivation and Context

Resolves #1934.

Have you tested this? If so, how?

I have included new unit tests.

@dlstadther
Copy link
Collaborator

dlstadther commented Jul 29, 2018

I am not familiar with these features. I'll try to look into them and provide you a review afterward. Thanks for the submission!

Copy link
Collaborator

@dlstadther dlstadther left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As i previously mentioned, I don't have experience with these util decorators. However, after looking into this code (assume the old code functioned correctly), your additions to handle arbitrary number of inheritances and requires makes sense to me.

I'm good with this after one other positive review!

luigi/util.py Outdated
if len(self.tasks_to_require) == 1:
return _self.clone_parent()

return _self.clone_parents()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly make this a one-liner (equally clear, but prettier)

return _self.clone_parent() if len(self.tasks_to_require) == 1 else _self.clone_parents()

@StasDeep StasDeep force-pushed the feature/multiple-requires branch from 3829fec to e20e82e Compare July 30, 2018 06:30
@StasDeep StasDeep changed the title Multiple requires (#1934) Multiple requires Jul 30, 2018
Copy link
Contributor

@Tarrasch Tarrasch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. But would you mind testing this for a week or so in production before we merge?

class MySecondTask(luigi.Task):
def requires(self):
return self.clone_parents()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a 'note' that this was added after version 2.7.6?

class shouldfail(luigi.Task):
pass

self.assertRaises(TypeError, create_task_with_empty_inheritance)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you replace this with the with decorator for assertRaises?

class shouldfail(luigi.Task):
pass

self.assertRaises(TypeError, create_task_with_empty_requires)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here.

@Tarrasch
Copy link
Contributor

Huge thanks for updating the documentation as well!

@dlstadther
Copy link
Collaborator

Interestingly, I just came across an attempt at this same intention almost 2 years ago in #1845

@StasDeep StasDeep force-pushed the feature/multiple-requires branch from e20e82e to 3829fec Compare July 31, 2018 03:47
@StasDeep
Copy link
Contributor Author

@Tarrasch could you please explain how I should test it in production?

@dlstadther
Copy link
Collaborator

I believe he just means use your own code for your own pipelines and verify it functions the way you expect.

@StasDeep
Copy link
Contributor Author

StasDeep commented Aug 6, 2018

@Tarrasch @dlstadther I believe this is ready to be merged.

@dlstadther
Copy link
Collaborator

Did production tests of this code function as expected in your "live" pipelines @StasDeep ?

@StasDeep
Copy link
Contributor Author

StasDeep commented Aug 6, 2018

@dlstadther yes, everything works as expected.

@dlstadther dlstadther merged commit bd55c28 into spotify:master Aug 6, 2018
thisiscab pushed a commit to glossier/luigi that referenced this pull request Aug 8, 2018
Add support for multiple task arguments for requires and inherits decorators
dlstadther added a commit to dlstadther/luigi that referenced this pull request Aug 14, 2018
* upstream-master: (82 commits)
  S3 client refactor (spotify#2482)
  Rename to rpc_log_retries, and make it apply to all the logging involved
  Factor log_exceptions into a configuration parameter
  Fix attribute forwarding for tasks with dynamic dependencies (spotify#2478)
  Add a visiblity level for luigi.Parameters (spotify#2278)
  Add support for multiple requires and inherits arguments (spotify#2475)
  Add metadata columns to the RDBMS contrib (spotify#2440)
  Fix race condition in luigi.lock.acquire_for (spotify#2357) (spotify#2477)
  tests: Use RunOnceTask where possible (spotify#2476)
  Optional TOML configs support (spotify#2457)
  Added default port behaviour for Redshift (spotify#2474)
  Add codeowners file with default and specific example (spotify#2465)
  Add Data Revenue to the `blogged` list (spotify#2472)
  Fix Scheduler.add_task to overwrite accepts_messages attribute. (spotify#2469)
  Use task_id comparison in Task.__eq__. (spotify#2462)
  Add stale config
  Move github templates to .github dir
  Fix transfer config import (spotify#2458)
  Additions to provide support for the Load Sharing Facility (LSF) job scheduler (spotify#2373)
  Version 2.7.6
  ...
dlstadther added a commit to dlstadther/luigi that referenced this pull request Aug 14, 2018
* upstream-master:
  S3 client refactor (spotify#2482)
  Rename to rpc_log_retries, and make it apply to all the logging involved
  Factor log_exceptions into a configuration parameter
  Fix attribute forwarding for tasks with dynamic dependencies (spotify#2478)
  Add a visiblity level for luigi.Parameters (spotify#2278)
  Add support for multiple requires and inherits arguments (spotify#2475)
  Add metadata columns to the RDBMS contrib (spotify#2440)
  Fix race condition in luigi.lock.acquire_for (spotify#2357) (spotify#2477)
  tests: Use RunOnceTask where possible (spotify#2476)
  Optional TOML configs support (spotify#2457)
  Added default port behaviour for Redshift (spotify#2474)
  Add codeowners file with default and specific example (spotify#2465)
  Add Data Revenue to the `blogged` list (spotify#2472)
dlstadther added a commit to dlstadther/luigi that referenced this pull request Aug 16, 2018
* upstream-master:
  Remove long-deprecated scheduler config variable alternatives (spotify#2491)
  Bump tornado milestone version (spotify#2490)
  Update moto to 1.x milestone version (spotify#2471)
  Use passed password when create a redis connection (spotify#2489)
  S3 client refactor (spotify#2482)
  Rename to rpc_log_retries, and make it apply to all the logging involved
  Factor log_exceptions into a configuration parameter
  Fix attribute forwarding for tasks with dynamic dependencies (spotify#2478)
  Add a visiblity level for luigi.Parameters (spotify#2278)
  Add support for multiple requires and inherits arguments (spotify#2475)
  Add metadata columns to the RDBMS contrib (spotify#2440)
  Fix race condition in luigi.lock.acquire_for (spotify#2357) (spotify#2477)
  tests: Use RunOnceTask where possible (spotify#2476)
  Optional TOML configs support (spotify#2457)
  Added default port behaviour for Redshift (spotify#2474)
  Add codeowners file with default and specific example (spotify#2465)
  Add Data Revenue to the `blogged` list (spotify#2472)
  Fix Scheduler.add_task to overwrite accepts_messages attribute. (spotify#2469)
  Use task_id comparison in Task.__eq__. (spotify#2462)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants