Skip to main content

📂 Like appdirs but with Paths, path creation and async support.

Project description

Get and create paths for your app

app_paths builds upon appdirs and automatically creates canonical file system paths for storing app and user data on Windows, macOS, Linux and *BSD.

Instead of just strings, app_paths gives developers Path objects from pathlib or aiopath, and it handles path creation efficiently. It also adds async support.

This project uses 📁 aiopath as an async pathlib replacement.

Use case

First, let's take a look at appdirs:

from pathlib import Path
from appdirs import AppDirs


dirs = AppDirs('app', 'My Name', '0.1.0')

# appdirs will return uncreated paths as strings
user_data: str = dirs.user_data_dir
assert isinstance(user_data, str)

print(user_data)  # '/home/user/.cache/app/0.1.0'

appdirs can generate paths as strings for an app. It does one thing, and it does that one thing well on multiple platforms.

user_data_path = Path(user_data)

# appdirs does not create paths
assert not user_data_path.exists()

However, it's up to app developers to handle creating paths on users' file systems. It's also up to developers to decide how they want to manipulate those paths, using abstractions like os.path, pathlib or aiopath. Developers also have to think about how to efficiently perform path creation.

app_paths takes care of all of that for you.

app_paths automatically gives you pathlib.Path handles for your paths in synchronous apps, and aiopath.AsyncPath handles for async apps.

from app_paths import AppPaths


paths = AppPaths.get_paths('app', 'My Name', '0.1.0')

# app_paths can return paths
user_data: Path = paths.user_data_path
assert isinstance(user_data, Path)

print(user_data)  # '/home/user/.cache/app/0.1.0'

app_paths can create paths on the file system dynamically, and it will cache results so excess I/O isn't performed.

# app_paths can return uncreated paths
assert not user_data.exists()

# but it can also dynamically create paths on the fly
user_data: Path = paths.user_data
assert user_data.exists()

It can do batch creation of app paths, and it will use efficient concurrent I/O in both synchronous and async Python programs.

# create user app paths concurrently
await paths.create_user()

# to run the following you must have write access to all paths
# create site app paths concurrently
await paths.create_site()

# create user and site paths concurrently
await paths.create_all()

Here's how you can do the above asynchronously:

from app_paths import AsyncAppPaths
from aiopath import AsyncPath


paths = await AsyncAppPaths.get_paths('app', 'My Name', '0.1.0')

# app_paths can return AsyncPaths
user_data: AsyncPath = paths.user_data_path
assert isinstance(user_data, AsyncPath)

print(user_data)  # '/home/user/.cache/app/0.1.0'

# app_paths can return uncreated paths
assert not await user_data.exists()

# but it can also dynamically create paths on the fly
user_data: AsyncPath = await paths.user_data
assert await user_data.exists()

# create user app paths concurrently
await paths.create_user()

# to run the following you must have write access to all paths
# create site app paths concurrently
await paths.create_site()

# create user and site paths concurrently
await paths.create_all()

Installation

Requirements

  • Windows, macOS or a POSIX compatible operating system
  • Python 3.8+

PyPI

$ python3 -m pip install app_paths

Support

Want to support this project and other open-source projects like it?

Buy Me A Coffee

License

See LICENSE. If you'd like to use this project with a different license, please get in touch.

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

app_paths-0.0.8.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

app_paths-0.0.8-py2.py3-none-any.whl (8.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file app_paths-0.0.8.tar.gz.

File metadata

  • Download URL: app_paths-0.0.8.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for app_paths-0.0.8.tar.gz
Algorithm Hash digest
SHA256 8c7fd1e28a7f2d52ed3198d01a94f651284fa63384f07a6c676eeefe7dc25f75
MD5 19cfc97d07e1432577705c2e74ac2a06
BLAKE2b-256 6a6408a8e6eb4b846dda135a29299a5507a4b6c12f9f88c027c44152a645f5cc

See more details on using hashes here.

File details

Details for the file app_paths-0.0.8-py2.py3-none-any.whl.

File metadata

  • Download URL: app_paths-0.0.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for app_paths-0.0.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5b1d7472466c60e6de13b7500564f5c8b2a695bceabc37c5ee408c9cee9f3b3c
MD5 37881db8c7522c4d7d76f9fcedc815ed
BLAKE2b-256 ba2179265808ca512e098e169ad29b1ab554a6b1dbc0069fa9df7d891e4f09eb

See more details on using hashes here.

Supported by

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