Skip to content

palantir/conjure-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

254c66c · Feb 7, 2024
Oct 20, 2022
Oct 20, 2022
Jun 30, 2020
Feb 7, 2024
Feb 7, 2024
May 23, 2023
May 23, 2023
Oct 20, 2022
Jul 29, 2020
Oct 2, 2019
Sep 23, 2019
Mar 13, 2020
Jul 18, 2018
Jun 20, 2021
Nov 27, 2018
Jul 18, 2018
Apr 27, 2020
Oct 20, 2022
May 23, 2023
Oct 20, 2022
Aug 11, 2020
Jan 10, 2020
Oct 20, 2022
Oct 20, 2022

Repository files navigation

Autorelease

Conjure-Python Bintray License

CLI to generate Python classes from Conjure API definitions.

Overview

The generated clients provide a simple interface for executing statically typed remote procedure calls from Python 2 or 3.

Usage

The recommended way to use conjure-python is via a build tool like gradle-conjure. However, if you don't want to use gradle-conjure, there is also an executable which conforms to RFC 002.

Usage: conjure-python generate <input> <output> [...options]

    --packageName         package name that will appear in setup.py
    --packageVersion      version number that will appear in setup.py
    --packageDescription  description that will appear in setup.py
    --packageUrl          url that will appear in setup.py
    --packageAuthor       author that will appear in setup.py
    --writeCondaRecipe    use this boolean option to generate a `conda_recipe/meta.yaml`

Example generated objects

  • Conjure object: ManyFieldExample

    example = ManyFieldExample('alias', 1.0, 1, [], {}, [])
  • Conjure union: UnionTypeExample

    stringVariant = UnionTypeExample(string_example="foo")
  • Conjure enum: EnumExample

    one = EnumExample.ONE;
    print(one); // prints: 'ONE'
  • Conjure alias: StringAliasExample

    Python uses structural (duck-typing) so aliases are currently transparent.

Example Client interfaces

Example service interface: TestService

class TestService(Service):
    """
    A Markdown description of the service. "Might end with quotes"
    """

    def get_file_systems(self, auth_header):
        # type: (str) -> Dict[str, BackingFileSystem]
        """
        Returns a mapping from file system id to backing file system configuration.
        """

        _headers = {
            'Accept': 'application/json',
            'Authorization': auth_header,
        } # type: Dict[str, Any]

        _params = {
        } # type: Dict[str, Any]

        _path_params = {
        } # type: Dict[str, Any]

        _json = None # type: Any

        _path = '/catalog/fileSystems'
        _path = _path.format(**_path_params)

        _response = self._request( # type: ignore
            'GET',
            self._uri + _path,
            params=_params,
            headers=_headers,
            json=_json)

        _decoder = ConjureDecoder()
        return _decoder.decode(_response.json(), DictType(str, BackingFileSystem))

Constructing clients

Use conjure-python-client which leverages requests:

from conjure_python_client import RequestsClient, ServiceConfiguration

config = ServiceConfiguration()
config.uris = ["https://foo.com/api"]
service = RequestsClient.create(TestService,
    user_agent="something/1.2.3",
    service_config=config)

service.do_something(auth_header, param)

mypy typings

Generated code has mypy comments for optional static typing.

 class TestService(Service):
     '''A Markdown description of the service.'''

     def get_file_systems(self, authHeader):
+        # type: (str) -> Dict[str, BackingFileSystem]

Contributing

See the CONTRIBUTING.md document.

License

This project is made available under the Apache 2.0 License.