Skip to main content

remoteunrar

This module provides a way to access single members of a zip file archive without downloading the full content from a remote web server. For this library to work, the web server hosting the archive needs to support the range header.

Installation

pip install remoteunrar

Usage

Initialization

remoteunrar(url, ...)

To download the content, this library rely on the requests module. The constructor interface matches the function requests.get module.

  • url: Url where the rar file is located (required).
  • auth: authentication credentials.
  • headers: headers to pass to the request.
  • timeout: timeout for the request.
  • verify: enable/disable certificate verification or set custom certificates location.
  • ... Please look at the requests documentation for futher usage details.
  • initial_buffer_size: How much data (in bytes) to fetch during the first connection to download the rar file central directory. If your zip file conteins a lot of files, would be a good idea to increase this parameter in order to avoid the need for further remote requests. Default: 64kb.

Class Interface

remoteunrar is a subclass of the python standard library class zipfile.ZipFile, so it supports all its read methods:

  • remoteunrar.close()
  • remoteunrar.getinfo(name)
  • remoteunrar.extract(member[, path[, pwd]])
  • remoteunrar.extractall([path[, members[, pwd]]])
  • remoteunrar.infolist()
  • remoteunrar.namelist()
  • remoteunrar.open(name[, mode[, pwd]])
  • remoteunrar.printdir()
  • remoteunrar.read(name[, pwd])
  • remoteunrar.testzip()
  • remoteunrar.filename
  • remoteunrar.debug
  • remoteunrar.comment

Please look at the zipfile documentation for usage details.

NOTE: extractall() and testzip() require to access the full content of the archive. If you need to use such methods, a full download of it would be probably more efficient.

Examples

List members in archive

Print all members part of the archive:

import remoteunrar

with remoteunrar('http://.../myfile.rar') as rar:
    for zip_info in rar.infolist():
        print(zip_info.filename)

Download a member

The following example will extract the file somefile.txt from the archive stored at the url http://.../myfile.zip.

import remoteunrar

with remoteunrar('http://.../myfile.rar') as rar:
    rar.extract('somefile.txt')

S3 example

If you are trying to download a member from a rar archive hosted on S3 you can use the aws-requests-auth library for that as follow:

from aws_requests_auth.boto_utils import BotoAWSRequestsAuth
from hashlib import sha256

auth = BotoAWSRequestsAuth(
    aws_host='s3-eu-west-1.amazonaws.com',
    aws_region='eu-west-1',
    aws_service='s3'
)
headers = {'x-amz-content-sha256': sha256('').hexdigest()}
url = "https://s3-eu-west-1.amazonaws.com/.../file.rar"

with remoteunrar(url, auth=auth, headers=headers) as z: 
    rar.extract('somefile.txt')

Command line tool

A simple command line tool is included in this distribution.

usage: remoteunrar [-h] [-l] [-d DIR] url [filename [filename ...]]

Unrar remote files

positional arguments:
  url                Url of the rar archive
  filename           File to extract

optional arguments:
  -h, --help         show this help message and exit
  -l, --list         List files in the archive
  -d DIR, --dir DIR  Extract directory, default current directory

Example

$ remoteunrar -l "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.rar"
  Length  DateTime             Name
--------  -------------------  ------------------------
    2962  2008-07-30 13:58:46  Readme.txt
   24740  2008-07-30 12:16:46  TM_WORLD_BORDERS-0.3.dbf
     145  2008-03-12 13:11:54  TM_WORLD_BORDERS-0.3.prj
 6478464  2008-07-30 12:16:46  TM_WORLD_BORDERS-0.3.shp
    2068  2008-07-30 12:16:46  TM_WORLD_BORDERS-0.3.shx
    
$ remoteunrar "http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.rar" Readme.txt
Extracting Readme.txt...

How it works

This module uses the zipfile.ZipFile class under the hood to decode the zip file format. The ZipFile class is initialized with a file like object that will perform transparently the remote queries.

The rar format is composed by the content of each compressed member followed by the central directory.

How many requests will this module perform to download a member?

  • If the full archive content is smaller than initial_buffer_size, only one request will be needed.
  • Normally two requests are needed, one to download the central directory and one to download the archive member.
  • If the central directory is bigger than initial_buffer_size, a third request will be required.

Alternative modules

There is a similar module available for python pyremotezip.

Metadata

Release files for remoteunrar 0.9.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for remoteunrar 0.9.2
File Size Uploaded
remoteunrar-0.9.2.tar.gz 5.7 kB Details

Release files / remoteunrar-0.9.2.tar.gz

Download URL remoteunrar-0.9.2.tar.gz
Size 5.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fcebab092d862d794760d5f16bae92a1e728605a1ee33d3b0c5de1ff17a6a198
BLAKE2b-256 checksum
How to use checksums
e047e7fe4e062dab314fe24918fd2a027735bb5bafd5fe6970045499d1a6c933
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

Release history Release notifications | RSS feed

This release

0.9.2 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page