Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Cryptact/twirpy: Twirp runtime library for Python · GitHub
Skip to content

Repository files navigation

Twirpy

Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.

-- Twirp's README

Twirpy is a Python implementation of the Twirp framework. It currently supports Twirp Wire Protocol v7.

This repository contains:

  • a protoc (aka the Protocol Compiler) plugin that generates sever and client code;
  • a Python package with common implementation details.

Installation

Runtime Library

The runtime library package contains common types like TwirpServer and TwirpClient that are used by the generated code.

Add the Twirp package to your Python project with:

pip install twirpy

Code Generator

You need to install protoc, the Protocol Buffers compiler, and the protoc-gen-twirpy protoc plugin to generate code.

First, install the Protocol Buffers compiler. For installation instructions, see Protocol Buffer Compiler Installation documentation. You can also use your package manager (e.g. brew install protobuf on macOS).

Go the releases page, and download the protoc-gen-twirpy binary for your platform. Unzip the archive and move the binary to a directory in your PATH.

On macOS, you can use the following commands:

curl -L -o- \
https://github.com/Cryptact/twirpy/releases/latest/download/protoc-gen-twirpy-darwin-arm64.tar.gz \
| tar xz -C ~/.local/bin protoc-gen-twirpy

Generate and run

Use the protoc plugin to generate twirp server and client code.

protoc --python_out=. --pyi_out=. --twirpy_out=. example/rpc/haberdasher/service.proto

For more information on how to generate code, see the example.

Development

We use hatch to manage the development process.

To open a shell with the development environment, run: hatch shell. To run the linter, run: hatch fmt --check or hatch fmt to fix the issues.

To run the type checker, run: hatch run types:check.

Standing on the shoulders of giants

About

Twirp runtime library for Python

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages