Skip to main content

Welcome to synclane

synclane is a framework-agnostic RPC API with a smart auto-generated TypeScript client.

License codecov Tests status Docs status PyPI Downloads Python versions

Idea

The below must be enough to define an API:

class UserParams(pydantic.BaseModel):
    uid: str

class GetUsers(AbstractProcedure):
    def call(self, in_: UserParams, context) -> List[UserDetails]:
        ...

and use an automatically generated frontend TypeScript client:

import { callGetUsers } from "./src/out";

expect(callGetUsers(userParams).$promise).resolves.toEqual(listOfUserDetails);

Benefits

Automated typescript client generation

Of course, it's possible to annotate your API, export an OpenAPI schema and generate a typescript client from it. However it will lack the below nice bits.

Browser Dates done right

Javascript doesn't have a separate date type, so it uses Date for both python's date and datetime.

Hence when you pass 2000-01-01 to a browser in New York, the browser will read it as UTC datetime and then convert it to the local timezone, so it will give you Dec 31, 1991 7:00PM, which is fine if you wanted to work with a particular moment in time, but what if you wanted to display someone's date of birth? That's why lacking date type is a problem.

synclane will see that you wanted to pass python's date to the browser and will automatically prepare it in the browser, so that Jan 1st is preserved in the case above.

Browser friendly types only

synclane raises an exception if you use types, which browser won't be able to understand.

No need to define URLs

Once you name a procedure, e.g. AddUser, you just get callAddUser function in the typescript client. You don't need to define any other identifier like API endpoint url.

Enums

If your procedure in/out types include enums, they will become available in the typescript client.

Installation

pip install synclane

pydantic is the only dependency.

Usage

  1. define procedures
  2. define RPC instance, its error handling method, register procedures and dump TypeScript client code
  3. connect RPC to an API
  4. on TypeScript side: import rpcConfig and initialize:
    • rpcConfig.url: url where RPC is listening
    • rpcConfig.initFetch (optional): function, which accepts and can mutate fetch options as needed

Example

Step 1: Define procedures

--8<-- "tests/int_tst/main.py:def_procedures"

Step 2: Define RPC, dump TS

--8<-- "tests/int_tst/main.py:def_rpc"

Step 3.a: Connect to Django

/// tab | async rpc

--8<-- "tests/int_tst/main.py:django_async"

///

/// tab | sync rpc

--8<-- "tests/int_tst/main.py:django_sync"

///

Step 3.b: Connect to FastAPI

/// tab | async rpc

--8<-- "tests/int_tst/main.py:fastapi_async"

///

/// tab | async rpc

--8<-- "tests/int_tst/main.py:fastapi_sync"

///

Step 4: Use autogenerated TS client

--8<-- "tests/int_tst/tests/client.test.ts:imports"
--8<-- "tests/int_tst/tests/client.test.ts:rpc_config"
--8<-- "tests/int_tst/tests/client.test.ts:get_user"

Metadata

Release files for synclane 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for synclane 0.6.1
File Size Uploaded Provenance Actions
synclane-0.6.1.tar.gz 11.0 kB With provenance Details for synclane-0.6.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for synclane 0.6.1
File Interpreter ABI Platform Actions
synclane-0.6.1-py3-none-any.whl Python 3 none any Details for synclane-0.6.1-py3-none-any.whl

Total release size: 22.9 kB

Release files / synclane-0.6.1.tar.gz

Download URL synclane-0.6.1.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d3dbb8d4ade27349898745db7d0f1472eea903434dd32b4c7990854a7fafaf7b
BLAKE2b-256 checksum
How to use checksums
530e77f0b766a33192f80a8c04f556bef81cd17d9d4cd43a2150f09e28a97c4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 15, 2024.

Transparency log

Release files / synclane-0.6.1-py3-none-any.whl

Download URL synclane-0.6.1-py3-none-any.whl
Size 11.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
17c1998f42c6c89ab8b48afce6bd2db72cbbfb9787e7e662d39cf2bc72cc8827
BLAKE2b-256 checksum
How to use checksums
193b2a8808ed22eb500738639370a79be181e8bf02caf25671f0a7e9baed6b0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 15, 2024.

Transparency log

Security for synclane 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for synclane-0.6.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 15, 2024.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page