Skip to content

ktekelioglu/conjure-python

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

About

Conjure generator for Python clients

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 93.6%
  • Python 6.4%