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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow Aria2 downloader to use absolute paths. #825

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

holocronweaver
Copy link

@holocronweaver holocronweaver commented May 27, 2022

馃毃Please review the guidelines for contributing to this repository.

Proposed changes

This should fix #275.

The downloader for aria2 has a bug which prevents it from supporting absolute paths.

From aria2c manpage (v1.35.0):

-o, --out=<FILE>
              The file name of the downloaded file.  It is always relative  to
              the    directory    given    in    --dir   option.    When   the
              --force-sequential option is used, this option is ignored.

Thus both --dir and --out should be specified together for absolute paths, but instead Aria2Downloader in downloaders.py specifies the full path in --out, causing the working directory to be appended to all paths:

def _create_command(self, url, filename):
        return [self.bin, url, '-o', filename,
                '--check-certificate=false', '--log-level=notice',
                '--max-connection-per-server=4', '--min-split-size=1M']

For example, if you run coursera-dl in working directory /home/user1/ and specify --path /home/user1/downloads, aria2 will download to a directory /home/user1//home/user1/downloads. This is what @FinalTheory reported, and is still the behavior as of the latest coursera-dl on PyPi (0.11.5).

This change is a simple fix, though I suspect it would be easier and more robust to avoid these sorts of issues by changing the _create_command interface to pass in filedir and filename separately.

Testing

Added Aria2 downloader unit tests for relative and absolute paths.

I also tested the script myself using absolute and relative paths on real courses, both cases worked.

Types of changes

What types of changes does your code introduce?
Put an x in the boxes that apply

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating
the PR. If you're unsure about any of them, don't hesitate to ask. We're here
to help! This is simply a reminder of what we are going to look for before
merging your code.

  • I have read the CONTRIBUTING doc
  • I agree to contribute my changes under the project's LICENSE
  • I have checked that the unit tests pass locally with my changes
  • I have checked the style of the new code (lint/pep).
  • I have added tests that prove my fix is effective or that my feature works
  • I have added necessary documentation (if appropriate)

Reviewers

@rbrito

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.

The path of downloaded file went wrong when specifing --aria2 and --path arguments
2 participants