Skip to main content

Component testing application for external service integrations

Project description

Service Routes

Component testing application — each "component" represents an external service (database, cache, broker, HTTP, etc.) that a Python application communicates with. Every supported Python module gets its own script file that tests all functionalities that module supports.

Total: 611 routes across 22 modules

Quick Start

# Start infrastructure services
docker compose -f docker-compose.service.yaml up -d

# Create virtual environment and install
python -m venv .venv
source .venv/bin/activate
pip install -e .

# Run all tests
python -m pytest tests/ -v

Project Structure

apm_component/       # All implementation scripts
  config.py          # Central config reader from components.ini
  components.ini     # INI-based connection settings per component
  routes.py          # Unified ROUTES dict importing all ROUTE_MAPs
  db_*.py            # Database modules
  cache_*.py         # Cache modules
  broker_*.py        # Message broker modules
  http_*.py          # HTTP client modules
docs/                # Documentation per component type
tests/               # Pytest test files per module
scripts/             # Build, deploy, and test runner scripts

Component Services

# Service Docker Service Port Modules
1 MySQL mysql 3306 pymysql, mysql-connector-python, mysqlclient, sqlalchemy, aiomysql
2 MSSQL mssql 1433 pymssql, pyodbc
3 SQLite — (file-based) sqlite3 (built-in)
4 Redis redis 6379 redis, aioredis, aredis
5 Memcached memcached 11211 pymemcache, python-memcached
6 RabbitMQ rabbitmq 5672 pika, aio-pika
7 HTTP (httpbin.org) — (external) requests, httpx, aiohttp, urllib3, urllib, httplib2, http.client

Route Format

Every function is mapped to a route string in a global ROUTE_MAP dict:

/{component_type}/{subtype}/{module}/{function_name}

Access the unified registry:

from apm_component.routes import ROUTES

# Call any function by route
result = ROUTES["/db/mysql/pymysql/connect"]()
print(result)  # {"status": "connected", "result": (1,)}

Database — MySQL (231 routes)

PyMySQL — /db/mysql/pymysql/* (28 routes)

Route Description
/db/mysql/pymysql/connect Basic connection
/db/mysql/pymysql/connect_pool Connection pool via DBUtils
/db/mysql/pymysql/get_connection_from_pool Acquire connection from pool
/db/mysql/pymysql/connect_error_wrong_password Wrong password error
/db/mysql/pymysql/connect_error_wrong_host Unreachable host error
/db/mysql/pymysql/connect_error_unknown_db Non-existent database error
/db/mysql/pymysql/connect_error_timeout Connection timeout error
/db/mysql/pymysql/pool_error_exhaustion Pool exhaustion error
/db/mysql/pymysql/execute_create_table DDL — create table
/db/mysql/pymysql/execute_insert Single row insert
/db/mysql/pymysql/execute_insert_many Batch insert via executemany
/db/mysql/pymysql/execute_update Update rows
/db/mysql/pymysql/execute_delete Delete rows
/db/mysql/pymysql/execute_select Select query
/db/mysql/pymysql/execute_parameterized Parameterized query
/db/mysql/pymysql/execute_transaction Transaction with commit and rollback
/db/mysql/pymysql/fetch_one Fetch single row
/db/mysql/pymysql/fetch_all Fetch all rows
/db/mysql/pymysql/fetch_many Fetch batch of rows
/db/mysql/pymysql/fetch_dict_cursor Fetch as dictionaries
/db/mysql/pymysql/fetch_ss_cursor Server-side unbuffered cursor
/db/mysql/pymysql/fetch_ss_dict_cursor Server-side dictionary cursor
/db/mysql/pymysql/call_stored_procedure Stored procedure call
/db/mysql/pymysql/mogrify_query Inspect query without executing
/db/mysql/pymysql/ping_reconnect Ping and reconnect
/db/mysql/pymysql/dynamic_query Dynamic query building
/db/mysql/pymysql/delayed_insert Insert after server-side delay
/db/mysql/pymysql/race_condition_test Race condition with FOR UPDATE

mysql-connector-python — /db/mysql/mysql_connector_python/* (28 routes)

Route Description
/db/mysql/mysql_connector_python/connect Basic connection
/db/mysql/mysql_connector_python/connect_pool Built-in connection pool
/db/mysql/mysql_connector_python/connect_with_dict Connection using dict config
/db/mysql/mysql_connector_python/get_connection_from_pool Acquire from pool
/db/mysql/mysql_connector_python/connect_error_wrong_password Wrong password error
/db/mysql/mysql_connector_python/connect_error_wrong_host Unreachable host error
/db/mysql/mysql_connector_python/connect_error_unknown_db Non-existent database error
/db/mysql/mysql_connector_python/connect_error_timeout Connection timeout error
/db/mysql/mysql_connector_python/pool_error_exhaustion Pool exhaustion error
/db/mysql/mysql_connector_python/execute_create_table DDL — create table
/db/mysql/mysql_connector_python/execute_insert Single row insert
/db/mysql/mysql_connector_python/execute_insert_many Batch insert
/db/mysql/mysql_connector_python/execute_update Update rows
/db/mysql/mysql_connector_python/execute_delete Delete rows
/db/mysql/mysql_connector_python/execute_select Select query
/db/mysql/mysql_connector_python/execute_parameterized Parameterized query
/db/mysql/mysql_connector_python/execute_transaction Transaction commit/rollback
/db/mysql/mysql_connector_python/execute_multi_statement Multi-statement execution
/db/mysql/mysql_connector_python/fetch_one Fetch single row
/db/mysql/mysql_connector_python/fetch_all Fetch all rows
/db/mysql/mysql_connector_python/fetch_many Fetch batch
/db/mysql/mysql_connector_python/fetch_dict_cursor Dictionary cursor
/db/mysql/mysql_connector_python/fetch_named_tuple Named tuple cursor
/db/mysql/mysql_connector_python/fetch_buffered Buffered cursor
/db/mysql/mysql_connector_python/call_stored_procedure Stored procedure
/db/mysql/mysql_connector_python/dynamic_query Dynamic query building
/db/mysql/mysql_connector_python/delayed_insert Delayed insert
/db/mysql/mysql_connector_python/race_condition_test Race condition test

mysqlclient — /db/mysql/mysqlclient/* (28 routes)

Route Description
/db/mysql/mysqlclient/connect Basic connection
/db/mysql/mysqlclient/connect_pool Pool via DBUtils
/db/mysql/mysqlclient/get_connection_from_pool Acquire from pool
/db/mysql/mysqlclient/connect_error_wrong_password Wrong password error
/db/mysql/mysqlclient/connect_error_wrong_host Unreachable host error
/db/mysql/mysqlclient/connect_error_unknown_db Non-existent database error
/db/mysql/mysqlclient/connect_error_timeout Connection timeout error
/db/mysql/mysqlclient/pool_error_exhaustion Pool exhaustion error
/db/mysql/mysqlclient/execute_create_table DDL — create table
/db/mysql/mysqlclient/execute_insert Single row insert
/db/mysql/mysqlclient/execute_insert_many Batch insert
/db/mysql/mysqlclient/execute_update Update rows
/db/mysql/mysqlclient/execute_delete Delete rows
/db/mysql/mysqlclient/execute_select Select query
/db/mysql/mysqlclient/execute_parameterized Parameterized query
/db/mysql/mysqlclient/execute_transaction Transaction commit/rollback
/db/mysql/mysqlclient/fetch_one Fetch single row
/db/mysql/mysqlclient/fetch_all Fetch all rows
/db/mysql/mysqlclient/fetch_many Fetch batch
/db/mysql/mysqlclient/fetch_dict_cursor Dictionary cursor
/db/mysql/mysqlclient/fetch_ss_cursor Server-side cursor
/db/mysql/mysqlclient/fetch_ss_dict_cursor Server-side dict cursor
/db/mysql/mysqlclient/call_stored_procedure Stored procedure
/db/mysql/mysqlclient/escape_string String escaping
/db/mysql/mysqlclient/ping_reconnect Ping and reconnect
/db/mysql/mysqlclient/dynamic_query Dynamic query building
/db/mysql/mysqlclient/delayed_insert Delayed insert
/db/mysql/mysqlclient/race_condition_test Race condition test

SQLAlchemy — /db/mysql/sqlalchemy/* (38 routes)

Route Description
/db/mysql/sqlalchemy/connect Basic engine connection
/db/mysql/sqlalchemy/connect_pool QueuePool connection
/db/mysql/sqlalchemy/connect_nullpool NullPool (no pooling)
/db/mysql/sqlalchemy/connect_error_wrong_password Wrong password error
/db/mysql/sqlalchemy/connect_error_wrong_host Unreachable host error
/db/mysql/sqlalchemy/connect_error_unknown_db Non-existent database error
/db/mysql/sqlalchemy/connect_error_timeout Connection timeout error
/db/mysql/sqlalchemy/pool_error_overflow Pool overflow error
/db/mysql/sqlalchemy/execute_raw_create_table Raw DDL — create table
/db/mysql/sqlalchemy/execute_raw_insert Raw insert
/db/mysql/sqlalchemy/execute_raw_insert_params Raw parameterized insert
/db/mysql/sqlalchemy/execute_raw_update Raw update
/db/mysql/sqlalchemy/execute_raw_delete Raw delete
/db/mysql/sqlalchemy/execute_raw_select Raw select
/db/mysql/sqlalchemy/execute_core_insert Core API insert
/db/mysql/sqlalchemy/execute_core_insert_many Core API batch insert
/db/mysql/sqlalchemy/execute_core_update Core API update
/db/mysql/sqlalchemy/execute_core_delete Core API delete
/db/mysql/sqlalchemy/execute_core_select Core API select
/db/mysql/sqlalchemy/execute_transaction Transaction commit/rollback
/db/mysql/sqlalchemy/execute_savepoint Savepoint / nested transaction
/db/mysql/sqlalchemy/fetch_one Fetch single row
/db/mysql/sqlalchemy/fetch_all Fetch all rows
/db/mysql/sqlalchemy/fetch_many Fetch batch
/db/mysql/sqlalchemy/fetch_mappings Fetch as mapping dicts
/db/mysql/sqlalchemy/fetch_scalars Fetch scalar values
/db/mysql/sqlalchemy/fetch_stream Streaming fetch
/db/mysql/sqlalchemy/orm_create_table ORM — create table
/db/mysql/sqlalchemy/orm_insert ORM — insert
/db/mysql/sqlalchemy/orm_select ORM — select
/db/mysql/sqlalchemy/orm_update ORM — update
/db/mysql/sqlalchemy/orm_delete ORM — delete
/db/mysql/sqlalchemy/insert_on_duplicate Upsert (ON DUPLICATE KEY)
/db/mysql/sqlalchemy/reflect_table Table reflection
/db/mysql/sqlalchemy/event_hook Event hook listener
/db/mysql/sqlalchemy/dynamic_query Dynamic query building
/db/mysql/sqlalchemy/delayed_insert Delayed insert
/db/mysql/sqlalchemy/race_condition_test Race condition test

aiomysql (async) — /db/mysql/aiomysql/* (27 routes)

Route Description
/db/mysql/aiomysql/connect Async basic connection
/db/mysql/aiomysql/connect_pool Async connection pool
/db/mysql/aiomysql/get_connection_from_pool Acquire from async pool
/db/mysql/aiomysql/connect_error_wrong_password Wrong password error
/db/mysql/aiomysql/connect_error_wrong_host Unreachable host error
/db/mysql/aiomysql/connect_error_unknown_db Non-existent database error
/db/mysql/aiomysql/connect_error_timeout Connection timeout error
/db/mysql/aiomysql/pool_error_exhaustion Pool exhaustion error
/db/mysql/aiomysql/execute_create_table DDL — create table
/db/mysql/aiomysql/execute_insert Single row insert
/db/mysql/aiomysql/execute_insert_many Batch insert
/db/mysql/aiomysql/execute_update Update rows
/db/mysql/aiomysql/execute_delete Delete rows
/db/mysql/aiomysql/execute_select Select query
/db/mysql/aiomysql/execute_parameterized Parameterized query
/db/mysql/aiomysql/execute_transaction Transaction commit/rollback
/db/mysql/aiomysql/fetch_one Fetch single row
/db/mysql/aiomysql/fetch_all Fetch all rows
/db/mysql/aiomysql/fetch_many Fetch batch
/db/mysql/aiomysql/fetch_dict_cursor Dictionary cursor
/db/mysql/aiomysql/fetch_ss_cursor Server-side cursor
/db/mysql/aiomysql/call_stored_procedure Stored procedure
/db/mysql/aiomysql/concurrent_queries Concurrent async queries
/db/mysql/aiomysql/timeout_query Query timeout
/db/mysql/aiomysql/dynamic_query Dynamic query building
/db/mysql/aiomysql/delayed_insert Delayed insert
/db/mysql/aiomysql/race_condition_test Race condition test

Database — MSSQL (53 routes)

pymssql — /db/mssql/pymssql/* (25 routes)

Route Description
/db/mssql/pymssql/connect Basic connection
/db/mssql/pymssql/connect_pool Pool via DBUtils
/db/mssql/pymssql/get_connection_from_pool Acquire from pool
/db/mssql/pymssql/connect_error_wrong_password Wrong password error
/db/mssql/pymssql/connect_error_wrong_host Unreachable host error
/db/mssql/pymssql/connect_error_unknown_db Non-existent database error
/db/mssql/pymssql/connect_error_timeout Connection timeout error
/db/mssql/pymssql/pool_error_exhaustion Pool exhaustion error
/db/mssql/pymssql/execute_create_table DDL — create table
/db/mssql/pymssql/execute_insert Single row insert
/db/mssql/pymssql/execute_insert_many Batch insert
/db/mssql/pymssql/execute_update Update rows
/db/mssql/pymssql/execute_delete Delete rows
/db/mssql/pymssql/execute_select Select query
/db/mssql/pymssql/execute_parameterized Parameterized query
/db/mssql/pymssql/execute_transaction Transaction commit/rollback
/db/mssql/pymssql/fetch_one Fetch single row
/db/mssql/pymssql/fetch_all Fetch all rows
/db/mssql/pymssql/fetch_many Fetch batch
/db/mssql/pymssql/fetch_as_dict Fetch as dictionaries
/db/mssql/pymssql/call_stored_procedure Stored procedure
/db/mssql/pymssql/multiple_result_sets Multiple result sets
/db/mssql/pymssql/dynamic_query Dynamic query building
/db/mssql/pymssql/delayed_insert Delayed insert
/db/mssql/pymssql/race_condition_test Race condition test

pyodbc — /db/mssql/pyodbc/* (28 routes)

Route Description
/db/mssql/pyodbc/connect Basic ODBC connection
/db/mssql/pyodbc/connect_pool Pool via DBUtils
/db/mssql/pyodbc/get_connection_from_pool Acquire from pool
/db/mssql/pyodbc/connect_error_wrong_password Wrong password error
/db/mssql/pyodbc/connect_error_wrong_host Unreachable host error
/db/mssql/pyodbc/connect_error_unknown_db Non-existent database error
/db/mssql/pyodbc/connect_error_timeout Connection timeout error
/db/mssql/pyodbc/pool_error_exhaustion Pool exhaustion error
/db/mssql/pyodbc/toggle_odbc_pooling Toggle ODBC-level pooling
/db/mssql/pyodbc/execute_create_table DDL — create table
/db/mssql/pyodbc/execute_insert Single row insert
/db/mssql/pyodbc/execute_insert_many Batch insert
/db/mssql/pyodbc/execute_fast_executemany Fast executemany mode
/db/mssql/pyodbc/execute_update Update rows
/db/mssql/pyodbc/execute_delete Delete rows
/db/mssql/pyodbc/execute_select Select query
/db/mssql/pyodbc/execute_parameterized Parameterized query
/db/mssql/pyodbc/execute_transaction Transaction commit/rollback
/db/mssql/pyodbc/fetch_one Fetch single row
/db/mssql/pyodbc/fetch_all Fetch all rows
/db/mssql/pyodbc/fetch_many Fetch batch
/db/mssql/pyodbc/fetch_as_dict Fetch as dictionaries
/db/mssql/pyodbc/fetch_column_metadata Column metadata
/db/mssql/pyodbc/call_stored_procedure Stored procedure
/db/mssql/pyodbc/multiple_result_sets Multiple result sets
/db/mssql/pyodbc/dynamic_query Dynamic query building
/db/mssql/pyodbc/delayed_insert Delayed insert
/db/mssql/pyodbc/race_condition_test Race condition test

Database — SQLite (29 routes)

sqlite3 — /db/sqlite/sqlite3/* (29 routes)

Route Description
/db/sqlite/sqlite3/connect Basic file connection
/db/sqlite/sqlite3/connect_memory In-memory database
/db/sqlite/sqlite3/connect_pool Reusable connection holder
/db/sqlite/sqlite3/get_connection_from_pool Acquire from holder
/db/sqlite/sqlite3/close_pool Close shared connection
/db/sqlite/sqlite3/connect_error_invalid_path Invalid path error
/db/sqlite/sqlite3/connect_error_readonly Read-only error
/db/sqlite/sqlite3/connect_error_corrupt_db Corrupt database error
/db/sqlite/sqlite3/connect_error_timeout Lock timeout error
/db/sqlite/sqlite3/execute_create_table DDL — create table
/db/sqlite/sqlite3/execute_insert Single row insert
/db/sqlite/sqlite3/execute_insert_many Batch insert
/db/sqlite/sqlite3/execute_update Update rows
/db/sqlite/sqlite3/execute_delete Delete rows
/db/sqlite/sqlite3/execute_select Select query
/db/sqlite/sqlite3/execute_parameterized Parameterized query
/db/sqlite/sqlite3/execute_transaction Transaction commit/rollback
/db/sqlite/sqlite3/execute_script Multi-statement executescript
/db/sqlite/sqlite3/fetch_one Fetch single row
/db/sqlite/sqlite3/fetch_all Fetch all rows
/db/sqlite/sqlite3/fetch_many Fetch batch
/db/sqlite/sqlite3/fetch_row_factory Dict-like rows via Row factory
/db/sqlite/sqlite3/create_user_function User-defined function
/db/sqlite/sqlite3/create_aggregate_function User-defined aggregate
/db/sqlite/sqlite3/iterdump_database Export as SQL dump
/db/sqlite/sqlite3/backup_database Backup API
/db/sqlite/sqlite3/dynamic_query Dynamic query building
/db/sqlite/sqlite3/delayed_insert Delayed insert
/db/sqlite/sqlite3/race_condition_test Race condition test

Cache — Redis (85 routes)

redis — /cache/redis/redis/* (35 routes)

Route Description
/cache/redis/redis/connect Basic connection
/cache/redis/redis/connect_url Connection via URL
/cache/redis/redis/connect_pool Connection pool
/cache/redis/redis/connect_blocking_pool Blocking connection pool
/cache/redis/redis/connect_error_wrong_host Wrong host error
/cache/redis/redis/connect_error_wrong_port Wrong port error
/cache/redis/redis/connect_error_wrong_password Wrong password error
/cache/redis/redis/connect_error_timeout Timeout error
/cache/redis/redis/pool_exhaustion_error Pool exhaustion error
/cache/redis/redis/set_get Basic SET/GET
/cache/redis/redis/set_with_ttl SET with expiry
/cache/redis/redis/setnx SET if not exists
/cache/redis/redis/getset GET and SET atomically
/cache/redis/redis/append_value Append to value
/cache/redis/redis/delete_key Delete key
/cache/redis/redis/key_exists Check key existence
/cache/redis/redis/key_type Check key type
/cache/redis/redis/ttl_expiry_check TTL check
/cache/redis/redis/expire_and_persist Expire and persist
/cache/redis/redis/mset_mget Bulk MSET/MGET
/cache/redis/redis/incr_decr Increment/decrement
/cache/redis/redis/hash_operations Hash operations
/cache/redis/redis/list_operations List operations
/cache/redis/redis/set_operations Set operations
/cache/redis/redis/sorted_set_operations Sorted set operations
/cache/redis/redis/json_serialization JSON serialization
/cache/redis/redis/scan_keys SCAN key iteration
/cache/redis/redis/pipeline_operations Pipeline batching
/cache/redis/redis/transaction_operations WATCH/MULTI transactions
/cache/redis/redis/pubsub_operations Pub/Sub messaging
/cache/redis/redis/lua_script Lua scripting
/cache/redis/redis/dynamic_key_ops Dynamic key operations
/cache/redis/redis/delayed_operations Delayed operations
/cache/redis/redis/race_condition_test Race condition test
/cache/redis/redis/flush_db Flush database

aioredis (async) — /cache/redis/aioredis/* (26 routes)

Route Description
/cache/redis/aioredis/connect Async connection
/cache/redis/aioredis/connect_url Async URL connection
/cache/redis/aioredis/connect_pool Async connection pool
/cache/redis/aioredis/connect_error_wrong_host Wrong host error
/cache/redis/aioredis/connect_error_wrong_port Wrong port error
/cache/redis/aioredis/connect_error_timeout Timeout error
/cache/redis/aioredis/set_get Async SET/GET
/cache/redis/aioredis/set_with_ttl SET with expiry
/cache/redis/aioredis/setnx SET if not exists
/cache/redis/aioredis/delete_key Delete key
/cache/redis/aioredis/key_exists Check key existence
/cache/redis/aioredis/ttl_expiry_check TTL check
/cache/redis/aioredis/expire_and_persist Expire and persist
/cache/redis/aioredis/mset_mget Bulk MSET/MGET
/cache/redis/aioredis/incr_decr Increment/decrement
/cache/redis/aioredis/hash_operations Hash operations
/cache/redis/aioredis/list_operations List operations
/cache/redis/aioredis/set_operations Set operations
/cache/redis/aioredis/json_serialization JSON serialization
/cache/redis/aioredis/pipeline_operations Pipeline batching
/cache/redis/aioredis/pubsub_operations Pub/Sub messaging
/cache/redis/aioredis/dynamic_key_ops Dynamic key operations
/cache/redis/aioredis/delayed_operations Delayed operations
/cache/redis/aioredis/concurrent_operations Concurrent async ops
/cache/redis/aioredis/race_condition_test Race condition test
/cache/redis/aioredis/flush_db Flush database

aredis (async) — /cache/redis/aredis/* (24 routes)

Route Description
/cache/redis/aredis/connect Async connection
/cache/redis/aredis/connect_pool Async connection pool
/cache/redis/aredis/connect_error_wrong_host Wrong host error
/cache/redis/aredis/connect_error_wrong_port Wrong port error
/cache/redis/aredis/connect_error_timeout Timeout error
/cache/redis/aredis/set_get Async SET/GET
/cache/redis/aredis/set_with_ttl SET with expiry
/cache/redis/aredis/setnx SET if not exists
/cache/redis/aredis/delete_key Delete key
/cache/redis/aredis/key_exists Check key existence
/cache/redis/aredis/ttl_expiry_check TTL check
/cache/redis/aredis/expire_and_persist Expire and persist
/cache/redis/aredis/mset_mget Bulk MSET/MGET
/cache/redis/aredis/incr_decr Increment/decrement
/cache/redis/aredis/hash_operations Hash operations
/cache/redis/aredis/list_operations List operations
/cache/redis/aredis/set_operations Set operations
/cache/redis/aredis/json_serialization JSON serialization
/cache/redis/aredis/pipeline_operations Pipeline batching
/cache/redis/aredis/dynamic_key_ops Dynamic key operations
/cache/redis/aredis/delayed_operations Delayed operations
/cache/redis/aredis/concurrent_operations Concurrent async ops
/cache/redis/aredis/race_condition_test Race condition test
/cache/redis/aredis/flush_db Flush database

Cache — Memcached (46 routes)

pymemcache — /cache/memcache/pymemcache/* (23 routes)

Route Description
/cache/memcache/pymemcache/connect Basic connection
/cache/memcache/pymemcache/connect_pool Connection pool
/cache/memcache/pymemcache/connect_error_wrong_host Wrong host error
/cache/memcache/pymemcache/connect_error_wrong_port Wrong port error
/cache/memcache/pymemcache/connect_error_timeout Timeout error
/cache/memcache/pymemcache/retry_client Retry client
/cache/memcache/pymemcache/set_get Basic SET/GET
/cache/memcache/pymemcache/set_with_ttl SET with expiry
/cache/memcache/pymemcache/set_many_get_many Bulk set/get
/cache/memcache/pymemcache/delete_key Delete key
/cache/memcache/pymemcache/delete_many Delete multiple keys
/cache/memcache/pymemcache/key_exists Check key existence
/cache/memcache/pymemcache/incr_decr Increment/decrement
/cache/memcache/pymemcache/add_key Add (set if not exists)
/cache/memcache/pymemcache/replace_key Replace existing key
/cache/memcache/pymemcache/append_prepend Append/prepend to value
/cache/memcache/pymemcache/cas_operations Check-and-set (CAS)
/cache/memcache/pymemcache/json_serialization JSON serialization
/cache/memcache/pymemcache/get_stats Server stats
/cache/memcache/pymemcache/flush_all Flush all keys
/cache/memcache/pymemcache/dynamic_key_ops Dynamic key operations
/cache/memcache/pymemcache/delayed_operations Delayed operations
/cache/memcache/pymemcache/race_condition_test Race condition test

python-memcached — /cache/memcache/python_memcached/* (23 routes)

Route Description
/cache/memcache/python_memcached/connect Basic connection
/cache/memcache/python_memcached/connect_error_wrong_host Wrong host error
/cache/memcache/python_memcached/connect_error_wrong_port Wrong port error
/cache/memcache/python_memcached/connect_error_timeout Timeout error
/cache/memcache/python_memcached/set_get Basic SET/GET
/cache/memcache/python_memcached/set_with_ttl SET with expiry
/cache/memcache/python_memcached/set_multi_get_multi Bulk set/get
/cache/memcache/python_memcached/delete_key Delete key
/cache/memcache/python_memcached/delete_multi Delete multiple keys
/cache/memcache/python_memcached/key_exists Check key existence
/cache/memcache/python_memcached/incr_decr Increment/decrement
/cache/memcache/python_memcached/add_key Add (set if not exists)
/cache/memcache/python_memcached/replace_key Replace existing key
/cache/memcache/python_memcached/append_prepend Append/prepend
/cache/memcache/python_memcached/cas_operations Check-and-set (CAS)
/cache/memcache/python_memcached/json_serialization JSON serialization
/cache/memcache/python_memcached/pickle_serialization Pickle serialization
/cache/memcache/python_memcached/get_stats Server stats
/cache/memcache/python_memcached/flush_all Flush all keys
/cache/memcache/python_memcached/disconnect_all Disconnect all
/cache/memcache/python_memcached/dynamic_key_ops Dynamic key operations
/cache/memcache/python_memcached/delayed_operations Delayed operations
/cache/memcache/python_memcached/race_condition_test Race condition test

Message Broker — RabbitMQ (56 routes)

pika — /broker/rabbitmq/pika/* (28 routes)

Route Description
/broker/rabbitmq/pika/connect Basic blocking connection
/broker/rabbitmq/pika/connect_url Connection via AMQP URL
/broker/rabbitmq/pika/connect_error_wrong_host Wrong host error
/broker/rabbitmq/pika/connect_error_wrong_port Wrong port error
/broker/rabbitmq/pika/connect_error_wrong_credentials Wrong credentials error
/broker/rabbitmq/pika/declare_queue Declare a queue
/broker/rabbitmq/pika/purge_queue Purge queue messages
/broker/rabbitmq/pika/delete_queue Delete a queue
/broker/rabbitmq/pika/declare_exchange Declare an exchange
/broker/rabbitmq/pika/bind_queue_to_exchange Bind queue to exchange
/broker/rabbitmq/pika/delete_exchange Delete an exchange
/broker/rabbitmq/pika/publish_basic Publish to default exchange
/broker/rabbitmq/pika/publish_to_exchange Publish to named exchange
/broker/rabbitmq/pika/publish_with_properties Publish with headers/TTL/priority
/broker/rabbitmq/pika/publish_bulk Bulk publish (10 messages)
/broker/rabbitmq/pika/publish_json Publish JSON payload
/broker/rabbitmq/pika/publish_binary Publish binary data
/broker/rabbitmq/pika/publish_with_confirm Publisher confirms
/broker/rabbitmq/pika/consume_basic_get Synchronous single fetch
/broker/rabbitmq/pika/consume_with_ack Consume and acknowledge
/broker/rabbitmq/pika/consume_with_nack Consume and negative ack
/broker/rabbitmq/pika/consume_with_reject Consume and reject
/broker/rabbitmq/pika/consume_with_qos Consume with prefetch QoS
/broker/rabbitmq/pika/consume_json Consume JSON payload
/broker/rabbitmq/pika/dead_letter_queue Dead letter queue handling
/broker/rabbitmq/pika/error_consume_nonexistent_queue Non-existent queue error
/broker/rabbitmq/pika/delayed_publish Delayed publish
/broker/rabbitmq/pika/cleanup Cleanup all test queues/exchanges

aio-pika (async) — /broker/rabbitmq/aio_pika/* (28 routes)

Route Description
/broker/rabbitmq/aio_pika/connect Async robust connection
/broker/rabbitmq/aio_pika/connect_basic Async basic connection
/broker/rabbitmq/aio_pika/connect_error_wrong_host Wrong host error
/broker/rabbitmq/aio_pika/connect_error_wrong_port Wrong port error
/broker/rabbitmq/aio_pika/connect_error_wrong_credentials Wrong credentials error
/broker/rabbitmq/aio_pika/declare_queue Declare a queue
/broker/rabbitmq/aio_pika/purge_queue Purge queue messages
/broker/rabbitmq/aio_pika/delete_queue Delete a queue
/broker/rabbitmq/aio_pika/declare_exchange Declare an exchange
/broker/rabbitmq/aio_pika/bind_queue_to_exchange Bind queue to exchange
/broker/rabbitmq/aio_pika/delete_exchange Delete an exchange
/broker/rabbitmq/aio_pika/publish_basic Async publish to default exchange
/broker/rabbitmq/aio_pika/publish_to_exchange Async publish to named exchange
/broker/rabbitmq/aio_pika/publish_with_properties Publish with headers/TTL/priority
/broker/rabbitmq/aio_pika/publish_bulk Bulk publish (10 messages)
/broker/rabbitmq/aio_pika/publish_json Publish JSON payload
/broker/rabbitmq/aio_pika/publish_binary Publish binary data
/broker/rabbitmq/aio_pika/publish_with_confirm Publisher confirms
/broker/rabbitmq/aio_pika/consume_basic_get Async single fetch
/broker/rabbitmq/aio_pika/consume_with_ack Consume and acknowledge
/broker/rabbitmq/aio_pika/consume_with_nack Consume and negative ack
/broker/rabbitmq/aio_pika/consume_with_reject Consume and reject
/broker/rabbitmq/aio_pika/consume_with_qos Consume with prefetch QoS
/broker/rabbitmq/aio_pika/consume_json Consume JSON payload
/broker/rabbitmq/aio_pika/dead_letter_queue Dead letter queue handling
/broker/rabbitmq/aio_pika/error_consume_nonexistent_queue Non-existent queue error
/broker/rabbitmq/aio_pika/delayed_publish Delayed publish
/broker/rabbitmq/aio_pika/cleanup Cleanup all test queues/exchanges

HTTP Clients (193 routes)

Each HTTP module implements the same set of functionalities. Route format: /http/{module}/{function_name}

Common Functionalities Across All HTTP Modules

Function Description
http_get Basic GET request
http_post_json POST with JSON body
http_put PUT request
http_delete DELETE request
http_patch PATCH request
http_get_with_params GET with query parameters
http_post_form POST with form data
http_custom_headers Custom request headers
http_basic_auth Basic authentication
http_bearer_auth Bearer token authentication
http_response_json JSON response handling
http_response_text Text response handling
http_response_binary Binary response handling
http_response_html HTML response handling
http_response_xml XML response handling
http_response_headers Response headers inspection
http_redirect Redirect following
http_ssl_verify SSL verification
http_ssl_no_verify Skip SSL verification
http_timeout_error Timeout error handling
http_connection_error Connection error handling
http_status_error HTTP status error handling
http_delay_request Delayed request
http_dynamic_request Dynamic request building

Modules

Module Route Prefix Routes Extras
requests /http/requests/* 30 http_session_reuse, http_connection_pool, http_cookies, http_retry_logic, http_prepared_request, http_response_stream
httpx /http/httpx/* 30 http_client_reuse, http_connection_pool, http_cookies, http_event_hooks, http_http2, http_response_stream
aiohttp (async) /http/aiohttp/* 29 http_session_reuse, http_connection_pool, http_cookies, http_concurrent_requests, http_response_stream
urllib3 /http/urllib3/* 27 http_pool_manager, http_retry_logic, http_response_stream
urllib (built-in) /http/urllib/* 25 http_response_stream
httplib2 /http/httplib2/* 26 http_connection_reuse, http_caching
http.client (built-in) /http/httpclient/* 26 http_connection_reuse, http_response_stream

Scripts

Script Description
./scripts/run_tests.sh local Run tests locally
./scripts/run_tests.sh docker Run tests via Docker
./scripts/deployment.sh up Start infrastructure services
./scripts/deployment.sh down Stop infrastructure services
./scripts/build.sh build --clean Build Python package
./scripts/build.sh upload Upload to PyPI
./scripts/build.sh build-upload Build and upload

Configuration

All connection settings are in apm_component/components.ini and can be overridden via environment variables.

To use a custom INI file location, set:

export APM_COMPONENT_INI_FILEPATH=/path/to/your/components.ini

If not set, it defaults to apm_component/components.ini bundled with the package.

Environment Variable Overrides

Service Env Prefix Default Host Default Port
MySQL MYSQL_ 127.0.0.1 3306
MSSQL MSSQL_ 127.0.0.1 1433
SQLite SQLITE_ (file: component_test.db)
Redis REDIS_ 127.0.0.1 6379
Memcached MEMCACHED_ 127.0.0.1 11211
RabbitMQ RABBITMQ_ 127.0.0.1 5672
HTTP HTTP_ httpbin.org

INI File Format

[mysql]
host = 127.0.0.1
port = 3306
user = root
password = your_password
database = your_database
pool_size = 5
connect_timeout = 10

[sqlite]
database = your_database.db

[http]
base_url = https://httpbin.org
timeout = 10
retries = 3
pool_connections = 5
pool_maxsize = 10

[mssql]
host = 127.0.0.1
port = 1433
user = sa
password = your_password
database = your_database
pool_size = 5
connect_timeout = 10

[redis]
host = 127.0.0.1
port = 6379
db = 0
password =
pool_size = 10
socket_timeout = 5

[memcached]
host = 127.0.0.1
port = 11211
connect_timeout = 5
timeout = 5

[rabbitmq]
host = 127.0.0.1
port = 5672
user = guest
password = guest
virtual_host = /
connect_timeout = 10

[cassandra]
host = 127.0.0.1
port = 9042
keyspace = your_keyspace
connect_timeout = 10

[elasticsearch]
host = 127.0.0.1
port = 9200
index = your_index
timeout = 10

[postgresql]
host = 127.0.0.1
port = 5432
user = your_user
password = your_password
database = your_database
pool_size = 5
connect_timeout = 10

[mongodb]
host = 127.0.0.1
port = 27017
user = your_user
password = your_password
database = your_database
collection = your_collection
connect_timeout = 10

[oracle]
host = 127.0.0.1
port = 1521
user = system
password = your_password
service_name = FREEPDB1
pool_size = 5
connect_timeout = 10

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

apm_component-1.0.2.tar.gz (87.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

apm_component-1.0.2-py3-none-any.whl (100.8 kB view details)

Uploaded Python 3

File details

Details for the file apm_component-1.0.2.tar.gz.

File metadata

  • Download URL: apm_component-1.0.2.tar.gz
  • Upload date:
  • Size: 87.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for apm_component-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4aae0d291cffd239b77a98da27d003518eed12b6a634d8457f44b40bd5f699d0
MD5 92570d1a636330739237ee0f263cb8ef
BLAKE2b-256 14c1bd85e3a9a8b28948853cf19d1227aadf8c53407306ea7ebb8bfd9374e690

See more details on using hashes here.

File details

Details for the file apm_component-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: apm_component-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 100.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for apm_component-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 90cd43b2f6984472f555952f86dfe184411b9367da36938d36a7a61bdea656d4
MD5 1baaeedab51b8374f3e112afc21b83f9
BLAKE2b-256 64719ab15abde3fefd6e903e9a08f8f11e07e1c3b04658334183c0bb6533f763

See more details on using hashes here.

Supported by

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