Skip to main content

reddit edge request context baggage

Project description

edgecontext

Python Documentation: https://reddit-edgecontext.readthedocs.io/en/latest/

Go Documentation: https://pkg.go.dev/github.com/reddit/edgecontext/lib/go/edgecontext

Services deep within the backend often need to know information about the client that originated the request, such as what user is authenticated or what country they're in. Baseplate services can get this information from the edge context which is automatically propagated along with calls between services.

This library provides a Thrift specification of an edge context payload and a corresponding implementation of the EdgeContextFactory interface from Baseplate.py.

And an implementation of ecinterface from Baseplate.go.

Usage

Python

Add the EdgeContextFactory to application startup:

from baseplate import Baseplate
from baseplate.lib.secrets import secrets_store_from_config
from reddit_edgecontext import EdgeContextFactory


def make_processor(app_config):
    secrets = secrets_store_from_config(app_config, timeout=60)
    edgecontext_factory = EdgeContextFactory(secrets)

    # pass edgecontext_factory to your framework's integration
    # for Thrift: baseplate.frameworks.thrift.baseplateify_processor
    # for Pyramid: baseplate.frameworks.pyramid.BaseplateConfigurator

Then read fields while handling requests:

def my_view(request):
    return request.edge_context.user.id

See the documentation for all the available fields.

Go

Use edgecontext.Factory to create an ecinterface.Factory implementation that's expected by baseplate.New:

ctx, bp, err := baseplate.New(context.Background(), baseplate.NewArgs{
  ConfigPath: configPath,
  ServiceCfg: &cfg, // or nil if you don't have additional config to parse
  EdgeContextFactory: edgecontext.Factory(edgecontext.Config{
    Logger: log.ErrorWithSentryWrapper(),
  }),
})

When using it, get the *EdgeRequestContext object out of context:

if ec, ok := edgecontext.GetEdgeContext(ctx); ok {
  user := ec.User()
  loid, ok := user.LoID()
  // Do something with loid
}

Development

A Dockerfile is provided to get a development environment running. To use it, build the base Docker image:

$ docker build -t edgecontext .

And then fire up the environment and use the provided Makefile targets to do common tasks:

$ docker run -it -v $PWD:/src --user "$(id -u):$(id -g)" -w /src edgecontext
$ make fmt

The following make targets are provided:

  • fmt: Apply automatic formatting to the source code.
  • thrift: Generate code from the Thrift IDL. Run fmt after doing this.
  • lint: Run linters on the code.
  • test: Run the test suite.
  • docs: Build docs.
    • Python output can be found in lib/py/build/html/.

The generated Thrift code is committed to the Git repo, so if you change edgecontext.thrift make sure to run make thrift fmt and commit those changes as well.

For Go, we do the same linting checks as Baseplate.go, so please follow Baseplate.go's Editor guide to make sure you are doing the same linting locally correctly. Please also follow Baseplate.go's Style guide for code style.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reddit_edgecontext-1.7.1b2.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

reddit_edgecontext-1.7.1b2-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file reddit_edgecontext-1.7.1b2.tar.gz.

File metadata

  • Download URL: reddit_edgecontext-1.7.1b2.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.18

File hashes

Hashes for reddit_edgecontext-1.7.1b2.tar.gz
Algorithm Hash digest
SHA256 a730052efd6c4a9610b64e6ce097b05a137b2d635a2d095953b1285b6b60cc24
MD5 d9bdd48af738e8b43ed7cd165ec66e52
BLAKE2b-256 505a139cbff8e5626af3da76fa3bddffd8d26712bcccb279d1d87bdf5515df18

See more details on using hashes here.

File details

Details for the file reddit_edgecontext-1.7.1b2-py3-none-any.whl.

File metadata

File hashes

Hashes for reddit_edgecontext-1.7.1b2-py3-none-any.whl
Algorithm Hash digest
SHA256 7f2591c34addd45b45ca5b81eb455b8093abf78737fd4d70aed30bce3215c5f1
MD5 274037e562d4366b5b129f7e46ab0295
BLAKE2b-256 836e1ec5e780b7fc3c0e5e34d6871ef207157b2c9dfd324b0daacfbddc70d210

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page