zrok/sdk/python/examples/http-server
Cam Otts 3e6ab2b39b
Python SDK Update (#523)
* added first iteration decorator for zrok and example flask server

* update requirements. Add context managing for share and access. Updated pastebin example to better cleanup

* setup and sample tweaks

* small linting updates and example changes

* A few small fixes

* fix long description

* Update the ignore file.
Considering moving location of this.

* Added flake8 linting for builds

* use python 3.10

* move setup python to its own block

* added back in the py name

* update changelogs and add readme

---------

Signed-off-by: Cam Otts <otts.cameron@gmail.com>
Co-authored-by: Kenneth Bingham <kenneth.bingham@netfoundry.io>
2024-01-17 10:46:19 -06:00
..
README.md Python SDK Update (#523) 2024-01-17 10:46:19 -06:00
requirements.txt Python SDK Update (#523) 2024-01-17 10:46:19 -06:00
server.py Python SDK Update (#523) 2024-01-17 10:46:19 -06:00

"http-server" SDK Example

This http-server example is a minimal zrok application that surfaces a basic http server over a public zrok share.

Implementation

	root = zrok.environment.root.Load()

The root is a structure that contains all of the user's environment detail and allows the SDK application to access the zrok service instance and the underlying OpenZiti network.

    try:
        shr = zrok.share.CreateShare(root=root, request=ShareRequest(
            BackendMode=zrok.model.TCP_TUNNEL_BACKEND_MODE,
            ShareMode=zrok.model.PUBLIC_SHARE_MODE,
            Frontends=['public'],
            Target="http-server"
        ))
        shrToken = shr.Token
        print("Access server at the following endpoints: ", "\n".join(shr.FrontendEndpoints))

        def removeShare():
            zrok.share.DeleteShare(root=root, shr=shr)
            print("Deleted share")
        atexit.register(removeShare)
    except Exception as e:
        print("unable to create share", e)
        sys.exit(1)

The sdk.CreateShare call uses the loaded environment root along with the details of the share request (sdk.ShareRequest) to create the share that will be used to access the http-server.

We are using the sdk.TcpTunnelBackendMode to handle tcp traffic. This time we are using sdk.PublicShareMode to take advantage of a public share that is running. With that we set which frontends to listen on, so we use whatever is configured, public here.

Next we populate our cfg options for our decorator

zrok_opts['cfg'] = zrok.decor.Opts(root=root, shrToken=shrToken, bindPort=bindPort)

Next we run the server which ends up calling the following:

@zrok.decor.zrok(opts=zrok_opts)
def runApp():
    from waitress import serve
    # the port is only used to integrate Zrok with frameworks that expect a "hostname:port" combo
    serve(app, port=bindPort)