Skip to main content

Common API for asynchronous file management

Project description

UniversalIO

UniversalIO is a library for Python developers looking to seamlessly integrate multiple different file storage solutions.

The concept was born out of a need for a project to allow users to specify files which might be in the Azure Blob Storage, Azure File Store, on a network drive, or on a SFTP server and then manipulate these files. In addition, there was a need to write the same file back to multiple different locations. The solution was to wrap the specific API for those storage solutions in an API that allowed the system to operate on them consistently, as well as coordinating file transfers between them. The need for batch operations led to the adoption of asyncio and its implementations for most of the backend, though non-asynchronous methods are available as well.

Operations Supported

  • is_dir()
  • is_file()
  • exists()
  • parent()
  • child(child_name)
  • basename()
  • joinpath(*paths)
  • remove()
  • read(block_size)
  • write(bytes)
  • text(encoding)
  • copy()
  • move()
  • mkdir(recursive)
  • rmdir(recursive)
  • crawl()
  • detect_encoding()
  • is_local_to(resource)

Asynchronous versions of most of the above exist with the suffix _async

Storage Solutions Supported

  • Local/network drives (via aiofiles)
  • SFTP (via asyncssh)
  • Azure Blob Storage (via azure.storage.blob.aio)
  • HTTP servers (via aiohttp)
    • Requires GET support for read access
    • Requires PUT support for write access
    • Requires DELETE support for delete
    • Supports MKCOL for basic directory/collection creation
    • Supports COPY, falls back to a GET and a PUT, for file copying
    • Supports MOVE, falls back to a COPY and a DELETE, for file moving

Planned Enhancements

  • Some restructuring to match the pathlib API as much as possible
  • Support for pulling credentials from TOML files in user's home directory
  • Support for Azure File Storage
  • Support for FTP and FTPS
  • Support for direct HTTP access and HTML scraping
  • Support for a batch file uploader/downloader
  • Support for glob() matching and other searching options
  • Support for pathlib-style with_name() to change the file name
  • Support for touch()
  • Support for writing text directly
  • Support for HTTP authentication methods, including a custom method to support custom API calls
  • More direct support for file copy/moving if the descriptor and connection is the same
  • Considering support for SSH/SCP
  • Considering support for relative file paths on local/network drives (challenging to understand what the root would be?)
  • Considering support for chmod/etc (but not supported on Windows)
  • Considering support for symbolic link creation (but complex on Windows)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

universalio-0.0.11.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

universalio-0.0.11-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file universalio-0.0.11.tar.gz.

File metadata

  • Download URL: universalio-0.0.11.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for universalio-0.0.11.tar.gz
Algorithm Hash digest
SHA256 0d538ef09abd7cf09116c5c93261b5e843e3ae4f0ee132a588eeef42c6f6867f
MD5 353e3cb2aab80020af4f61caad93e7a3
BLAKE2b-256 fcb76cec96f92d2b446a2f9369f7cb7da9eed135dd8a97c96787869322e0b311

See more details on using hashes here.

File details

Details for the file universalio-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: universalio-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for universalio-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 bbdfa84fddbf7fdbf152bcf938e9d4ec2fdeefae7f3641c8d13fc52feab29744
MD5 ed317c3556c38d16a8e688b9feb1e5ac
BLAKE2b-256 434aa8a605e5c90424cd332aa8acfe56da69c5e98991e622d00211735630c2fc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page