Skip to main content

No project description provided

Project description

Soufi (Source Finder) is a library that finds downloadable URLs for source packages, given the binary package name and version. It will also create a compressed archive of multiple downloadable files, or save any existing downloadable archive.

Currently supported finders are:
  • Debian OS packages

  • Ubuntu OS packages

  • Red Hat (UBI) packages

  • CentOS packages

  • Alpine packages

  • Photon OS packages

  • AlmaLinux OS packages

  • NPM packages

  • Python sdists

  • Golang modules

  • Java JARs

  • Ruby Gems

  • Rust Crates

  • PHP PECL packages

  • PHP Composer packages

If you want to download Alpine packages, you must have git installed.

Requirements

Soufi is currently tested on Python versions 3.8 through 3.12. It is known not to work on 3.6.

Quickstart

Install Soufi with pip:

pip install soufi

or, with the command-line tool:

pip install soufi[cli]

Using the command line

soufi python flask 2.0.0
https://files.pythonhosted.org/packages/37/6d/61637b8981e76a9256fade8ce7677e86a6edcd6d4525f459a6b9edbd96a4/Flask-2.0.0.tar.gz

soufi debian zlib1g 1:1.2.11.dfsg-1 -o zlib.tar.xz
zlib_1.2.11.dfsg.orig.tar.gz: https://snapshot.debian.org/file/1b7f6963ccfb7262a6c9d88894d3a30ff2bf2e23
zlib_1.2.11.dfsg-1.dsc: https://snapshot.debian.org/file/f2bea8c346668d301c0c7745f75cf560f2755649
zlib_1.2.11.dfsg-1.debian.tar.xz: https://snapshot.debian.org/file/c3b2bac9b1927fde66b72d4f98e4063ce0b51f34

ls -l zlib.tar.xz
-rw-rw-r-- 1 juledwar juledwar 391740 May 20 15:20 zlib.tar.xz

Using the API

import shutil
import soufi

finder = soufi.finder.factory(
    'python', 'flask', '2.0.0', soufi.finder.SourceType.python
)
source = finder.find()
print(source)

finder = soufi.finder.factory(
    'debian', 'zlib1g', '1:1.2.11.dfsg-1', soufi.finder.SourceType.os
)
source = finder.find()
print(source)
with source.make_archive() as archive, open('zlib.tar.xz', 'wb') as local:
    shutil.filecopyobj(archive, local)

Caching

Soufi uses dogpile.cache to provide a convenient mechanism for caching requests when doing repeated lookups. For sources with network-intensive remote discovery (e.g,, DNF/Yum-based OSes) this is strongly recommended.

For a single-threaded application, an in-memory LRU cache, should be adequate:

import pylru
import soufi

LRU_CACHE = pylru.lrucache(size=1024)
finder = soufi.finder.factory(
    'centos', 'cracklib-dicts', '2.9.0-11.el7', soufi.finder.SourceType.os,
    cache_backend='dogpile.cache.memory',
    cache_args=dict(cache_dict=LRU_CACHE),
)
print(finder.find())
# Re-using the finder will use cached results
print(finder.find('vim-minimal', '7.4.629-8.el7_9'))

More complex applications can use the other backends, e.g., memcached, Redis, custom backends, etc. See the dogpile.cache documentation for details on backend configuration.

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

soufi-2025.9.17.tar.gz (83.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

soufi-2025.9.17-py2.py3-none-any.whl (40.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file soufi-2025.9.17.tar.gz.

File metadata

  • Download URL: soufi-2025.9.17.tar.gz
  • Upload date:
  • Size: 83.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for soufi-2025.9.17.tar.gz
Algorithm Hash digest
SHA256 4351de8a75293cb21080a69526ab915130319c1e74ee47093fe01509e2900efa
MD5 9ea728302e63d140c2bbfb763b837882
BLAKE2b-256 4c11036d029a7483fa2179bc43b82b56a2c27499497adf5cacc95edd4a111402

See more details on using hashes here.

File details

Details for the file soufi-2025.9.17-py2.py3-none-any.whl.

File metadata

  • Download URL: soufi-2025.9.17-py2.py3-none-any.whl
  • Upload date:
  • Size: 40.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for soufi-2025.9.17-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a45976c8a18ebfa227e4a920f1bc7ea3635b2eed3f8e7869ea62e8ab8c70de79
MD5 7ee7baaa32befc4c41717030888b3f3e
BLAKE2b-256 bae815f12f5b686715bd8d68ab185c5d8fd9512a75108576be5dae5143f3824e

See more details on using hashes here.

Supported by

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