New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

reddit-edgecontext

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

reddit-edgecontext

reddit edge request context baggage

  • 1.6.3
  • PyPI
  • Socket score

Maintainers
1

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.

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc