Skip to content

Commit

Permalink
Merge pull request #2633 from cloudflare/ggu/package-manager
Browse files Browse the repository at this point in the history
Add PyodidePackageManager implementation
  • Loading branch information
garrettgu10 authored Aug 30, 2024
2 parents 1739783 + 5c7583e commit 3ee9d65
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/workerd/api/pyodide/pyodide.c++
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ void PyodideBundleManager::setPyodideBundleData(
kj::mv(version), {.messageReader = kj::mv(messageReader), .bundle = bundle});
}

const kj::Maybe<kj::ArrayPtr<const unsigned char>> PyodidePackageManager::getPyodidePackage(
kj::StringPtr id) const {
return packages.lockShared()->find(id).map(
[](const kj::Array<unsigned char>& t) { return t.asPtr(); });
}

void PyodidePackageManager::setPyodidePackageData(
kj::String id, kj::Array<unsigned char> data) const {
packages.lockExclusive()->insert(kj::mv(id), kj::mv(data));
}

static int readToTarget(
kj::ArrayPtr<const kj::byte> source, int offset, kj::ArrayPtr<kj::byte> buf) {
int size = source.size();
Expand Down
9 changes: 9 additions & 0 deletions src/workerd/api/pyodide/pyodide.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ class PyodideBundleManager {
const kj::MutexGuarded<kj::HashMap<kj::String, MessageBundlePair>> bundles;
};

class PyodidePackageManager {
public:
void setPyodidePackageData(kj::String id, kj::Array<unsigned char> data) const;
const kj::Maybe<kj::ArrayPtr<const unsigned char>> getPyodidePackage(kj::StringPtr id) const;

private:
const kj::MutexGuarded<kj::HashMap<kj::String, kj::Array<unsigned char>>> packages;
};

struct PythonConfig {
kj::Maybe<kj::Own<const kj::Directory>> packageDiskCacheRoot;
kj::Maybe<kj::Own<const kj::Directory>> pyodideDiskCacheRoot;
Expand Down

0 comments on commit 3ee9d65

Please sign in to comment.