
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
🚀 Just launched v1 of managed rate limiting service
Support us with your feedback and questions on Product Hunt or Discord
The aperture-py
SDK provides an easy way to integrate your Python applications
with FluxNinja Aperture. It allows flow
control functionality on fine-grained features inside service code.
Refer to documentation for more details.
Run the command below to install the SDK:
pip install aperture-py
The next step is to create an Aperture Client instance, for which, the address of the organization created in Aperture Cloud and API key are needed. You can locate both these details by clicking on the Aperture tab in the sidebar menu of Aperture Cloud.
from aperture_sdk.client import ApertureClient, FlowParams
agent_address = os.getenv("APERTURE_AGENT_ADDRESS", default_agent_address)
api_key = os.getenv("APERTURE_API_KEY", "")
insecure = os.getenv("APERTURE_AGENT_INSECURE", "true").lower() == "true"
aperture_client = ApertureClient.new_client(
address=agent_address, insecure=insecure, api_key=api_key
)
The created instance can then be used to start a flow:
# business logic produces labels
labels = {
"user_id": "some_user_id",
"user_tier": "gold",
"priority": "100",
}
flow_params = FlowParams(
check_timeout=timedelta(seconds=200),
explicit_labels=labels,
)
# start_flow performs a flowcontrol.v1.Check call to Aperture Agent.
# It returns a Flow or raises an error if any.
flow = await aperture_client.start_flow(
control_point="AwesomeFeature",
params=flow_params,
)
# Check if flow check was successful.
if not flow.success:
logger.info("Flow check failed - will fail-open")
# See whether flow was accepted by Aperture Agent.
if flow.should_run():
# do actual work
pass
else:
# handle flow rejection by Aperture Agent
flow.set_status(FlowStatus.Error)
res = await flow.end()
if res.get_error():
logger.error("Error: {}".format(res.get_error()))
elif res.get_flow_end_response():
logger.info("Flow End Response: {}".format(res.get_flow_end_response()))
# Simulate work being done
await asyncio.sleep(2)
return "", 202
The above code snippet is making start_flow
calls to Aperture. For this call,
it is important to specify the control point (AwesomeFeature
in the example)
and FlowParams
that will be aligned with the policy created in Aperture Cloud.
For request prioritization use cases, it's important to set a higher gRPC
deadline. This parameter specifies the maximum duration a request can remain in
the queue. For each flow that is started, a should_run
decision is made,
determining whether to allow the request into the system or to rate limit it. It
is important to make the end
call made after processing each request, to send
telemetry data that would provide granular visibility for each flow.
FAQs
SDK to interact with the Aperture Agent
We found that aperture-py demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
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.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.