aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python
diff options
context:
space:
mode:
Diffstat (limited to 'src/python')
-rw-r--r--src/python/grpcio/.gitignore9
-rw-r--r--src/python/grpcio/MANIFEST.in3
-rw-r--r--src/python/grpcio/README.rst (renamed from src/python/src/README.rst)0
-rw-r--r--src/python/grpcio/commands.py102
-rw-r--r--src/python/grpcio/grpc/__init__.py (renamed from src/python/interop/interop/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/.gitignore (renamed from src/python/src/grpc/_adapter/.gitignore)0
-rw-r--r--src/python/grpcio/grpc/_adapter/__init__.py (renamed from src/python/src/grpc/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/module.c (renamed from src/python/src/grpc/_adapter/_c/module.c)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types.c (renamed from src/python/src/grpc/_adapter/_c/types.c)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types.h (renamed from src/python/src/grpc/_adapter/_c/types.h)4
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/call.c (renamed from src/python/src/grpc/_adapter/_c/types/call.c)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/channel.c (renamed from src/python/src/grpc/_adapter/_c/types/channel.c)4
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c (renamed from src/python/src/grpc/_adapter/_c/types/client_credentials.c)20
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/completion_queue.c (renamed from src/python/src/grpc/_adapter/_c/types/completion_queue.c)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/server.c (renamed from src/python/src/grpc/_adapter/_c/types/server.c)2
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c (renamed from src/python/src/grpc/_adapter/_c/types/server_credentials.c)14
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/utility.c (renamed from src/python/src/grpc/_adapter/_c/utility.c)1
-rw-r--r--src/python/grpcio/grpc/_adapter/_common.py (renamed from src/python/src/grpc/_adapter/_common.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_intermediary_low.py (renamed from src/python/src/grpc/_adapter/_intermediary_low.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_low.py (renamed from src/python/src/grpc/_adapter/_low.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/_types.py (renamed from src/python/src/grpc/_adapter/_types.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/fore.py (renamed from src/python/src/grpc/_adapter/fore.py)0
-rw-r--r--src/python/grpcio/grpc/_adapter/rear.py (renamed from src/python/src/grpc/_adapter/rear.py)0
-rw-r--r--src/python/grpcio/grpc/_cython/.gitignore (renamed from src/python/src/grpc/_cython/.gitignore)0
-rw-r--r--src/python/grpcio/grpc/_cython/README.rst (renamed from src/python/src/grpc/_cython/README.rst)0
-rw-r--r--src/python/grpcio/grpc/_cython/__init__.py (renamed from src/python/src/grpc/_cython/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/__init__.py (renamed from src/python/src/grpc/_cython/_cygrpc/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/call.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/call.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/call.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/call.pyx)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/channel.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/channel.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/channel.pyx)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/completion_queue.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/completion_queue.pyx)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/credentials.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/credentials.pyx)14
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/grpc.pxd)4
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/records.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/records.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/records.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/records.pyx)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/server.pxd (renamed from src/python/src/grpc/_cython/_cygrpc/server.pxd)0
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/server.pyx (renamed from src/python/src/grpc/_cython/_cygrpc/server.pyx)0
-rw-r--r--src/python/grpcio/grpc/_cython/adapter_low.py (renamed from src/python/src/grpc/_cython/adapter_low.py)8
-rw-r--r--src/python/grpcio/grpc/_cython/cygrpc.pyx (renamed from src/python/src/grpc/_cython/cygrpc.pyx)4
-rw-r--r--src/python/grpcio/grpc/_links/__init__.py (renamed from src/python/src/grpc/_adapter/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/_links/invocation.py (renamed from src/python/src/grpc/_links/invocation.py)0
-rw-r--r--src/python/grpcio/grpc/_links/service.py (renamed from src/python/src/grpc/_links/service.py)0
-rw-r--r--src/python/grpcio/grpc/early_adopter/__init__.py (renamed from src/python/src/grpc/_junkdrawer/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/early_adopter/implementations.py (renamed from src/python/src/grpc/early_adopter/implementations.py)0
-rw-r--r--src/python/grpcio/grpc/framework/__init__.py (renamed from src/python/src/grpc/_links/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/__init__.py (renamed from src/python/src/grpc/framework/alpha/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/_face_utilities.py (renamed from src/python/src/grpc/framework/alpha/_face_utilities.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/_reexport.py (renamed from src/python/src/grpc/framework/alpha/_reexport.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/exceptions.py (renamed from src/python/src/grpc/framework/alpha/exceptions.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/interfaces.py (renamed from src/python/src/grpc/framework/alpha/interfaces.py)0
-rw-r--r--src/python/grpcio/grpc/framework/alpha/utilities.py (renamed from src/python/src/grpc/framework/alpha/utilities.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/__init__.py (renamed from src/python/src/grpc/early_adopter/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_cancellation.py (renamed from src/python/src/grpc/framework/base/_cancellation.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_constants.py (renamed from src/python/src/grpc/framework/base/_constants.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_context.py (renamed from src/python/src/grpc/framework/base/_context.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_emission.py (renamed from src/python/src/grpc/framework/base/_emission.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_ends.py (renamed from src/python/src/grpc/framework/base/_ends.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_expiration.py (renamed from src/python/src/grpc/framework/base/_expiration.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_ingestion.py (renamed from src/python/src/grpc/framework/base/_ingestion.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_interfaces.py (renamed from src/python/src/grpc/framework/base/_interfaces.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_reception.py (renamed from src/python/src/grpc/framework/base/_reception.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_termination.py (renamed from src/python/src/grpc/framework/base/_termination.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/_transmission.py (renamed from src/python/src/grpc/framework/base/_transmission.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/exceptions.py (renamed from src/python/src/grpc/framework/base/exceptions.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/implementations.py (renamed from src/python/src/grpc/framework/base/implementations.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/in_memory.py (renamed from src/python/src/grpc/framework/base/in_memory.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/interfaces.py (renamed from src/python/src/grpc/framework/base/interfaces.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/null.py (renamed from src/python/src/grpc/framework/base/null.py)0
-rw-r--r--src/python/grpcio/grpc/framework/base/util.py (renamed from src/python/src/grpc/framework/base/util.py)0
-rw-r--r--src/python/grpcio/grpc/framework/common/__init__.py (renamed from src/python/src/grpc/framework/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/common/cardinality.py (renamed from src/python/src/grpc/framework/common/cardinality.py)0
-rw-r--r--src/python/grpcio/grpc/framework/common/style.py (renamed from src/python/src/grpc/framework/common/style.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/__init__.py (renamed from src/python/src/grpc/framework/base/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/_calls.py (renamed from src/python/src/grpc/framework/face/_calls.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/_control.py (renamed from src/python/src/grpc/framework/face/_control.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/_service.py (renamed from src/python/src/grpc/framework/face/_service.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/demonstration.py (renamed from src/python/src/grpc/framework/face/demonstration.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/exceptions.py (renamed from src/python/src/grpc/framework/face/exceptions.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/implementations.py (renamed from src/python/src/grpc/framework/face/implementations.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/interfaces.py (renamed from src/python/src/grpc/framework/face/interfaces.py)0
-rw-r--r--src/python/grpcio/grpc/framework/face/utilities.py (renamed from src/python/src/grpc/framework/face/utilities.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/__init__.py (renamed from src/python/src/grpc/framework/common/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/_timer_future.py (renamed from src/python/src/grpc/framework/foundation/_timer_future.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/abandonment.py (renamed from src/python/src/grpc/framework/foundation/abandonment.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/activated.py (renamed from src/python/src/grpc/framework/foundation/activated.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/callable_util.py (renamed from src/python/src/grpc/framework/foundation/callable_util.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/future.py (renamed from src/python/src/grpc/framework/foundation/future.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/later.py (renamed from src/python/src/grpc/framework/foundation/later.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/logging_pool.py (renamed from src/python/src/grpc/framework/foundation/logging_pool.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/relay.py (renamed from src/python/src/grpc/framework/foundation/relay.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/stream.py (renamed from src/python/src/grpc/framework/foundation/stream.py)0
-rw-r--r--src/python/grpcio/grpc/framework/foundation/stream_util.py (renamed from src/python/src/grpc/framework/foundation/stream_util.py)0
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/__init__.py (renamed from src/python/src/grpc/framework/face/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/links/__init__.py (renamed from src/python/src/grpc/framework/face/testing/__init__.py)0
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/links/links.py (renamed from src/python/src/grpc/framework/interfaces/links/links.py)0
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/links/utilities.py (renamed from src/python/src/grpc/framework/interfaces/links/utilities.py)0
-rw-r--r--src/python/grpcio/requirements.txt (renamed from src/python/requirements.txt)0
-rw-r--r--src/python/grpcio/setup.cfg2
-rw-r--r--src/python/grpcio/setup.py (renamed from src/python/src/setup.py)52
-rw-r--r--src/python/grpcio_test/.gitignore10
-rw-r--r--src/python/grpcio_test/MANIFEST.in4
-rw-r--r--src/python/grpcio_test/commands.py57
-rw-r--r--src/python/grpcio_test/grpc_interop/__init__.py (renamed from src/python/src/grpc/framework/foundation/__init__.py)0
-rw-r--r--src/python/grpcio_test/grpc_interop/_insecure_interop_test.py (renamed from src/python/interop/interop/_insecure_interop_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_interop/_interop_test_case.py (renamed from src/python/interop/interop/_interop_test_case.py)2
-rw-r--r--src/python/grpcio_test/grpc_interop/_secure_interop_test.py (renamed from src/python/interop/interop/_secure_interop_test.py)6
-rw-r--r--src/python/grpcio_test/grpc_interop/client.py (renamed from src/python/interop/interop/client.py)4
-rw-r--r--src/python/grpcio_test/grpc_interop/credentials/README (renamed from src/python/interop/interop/credentials/README)0
-rwxr-xr-xsrc/python/grpcio_test/grpc_interop/credentials/ca.pem (renamed from src/python/interop/interop/credentials/ca.pem)0
-rwxr-xr-xsrc/python/grpcio_test/grpc_interop/credentials/server1.key (renamed from src/python/interop/interop/credentials/server1.key)0
-rwxr-xr-xsrc/python/grpcio_test/grpc_interop/credentials/server1.pem (renamed from src/python/interop/interop/credentials/server1.pem)0
-rw-r--r--src/python/grpcio_test/grpc_interop/empty_pb2.py (renamed from src/python/interop/interop/empty_pb2.py)0
-rw-r--r--src/python/grpcio_test/grpc_interop/messages_pb2.py (renamed from src/python/interop/interop/messages_pb2.py)0
-rw-r--r--src/python/grpcio_test/grpc_interop/methods.py (renamed from src/python/interop/interop/methods.py)4
-rw-r--r--src/python/grpcio_test/grpc_interop/resources.py (renamed from src/python/interop/interop/resources.py)0
-rw-r--r--src/python/grpcio_test/grpc_interop/server.py (renamed from src/python/interop/interop/server.py)4
-rw-r--r--src/python/grpcio_test/grpc_interop/test_pb2.py (renamed from src/python/interop/interop/test_pb2.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/__init__.py (renamed from src/python/src/grpc/framework/interfaces/__init__.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/.gitignore5
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/__init__.py (renamed from src/python/src/grpc/framework/interfaces/links/__init__.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_blocking_invocation_inline_service_test.py (renamed from src/python/src/grpc/_adapter/_blocking_invocation_inline_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_c_test.py (renamed from src/python/src/grpc/_adapter/_c_test.py)12
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_event_invocation_synchronous_event_service_test.py (renamed from src/python/src/grpc/_adapter/_event_invocation_synchronous_event_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_face_test_case.py (renamed from src/python/src/grpc/_adapter/_face_test_case.py)6
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_future_invocation_asynchronous_event_service_test.py (renamed from src/python/src/grpc/_adapter/_future_invocation_asynchronous_event_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_intermediary_low_test.py (renamed from src/python/src/grpc/_adapter/_intermediary_low_test.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_links_test.py (renamed from src/python/src/grpc/_adapter/_links_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_lonely_rear_link_test.py (renamed from src/python/src/grpc/_adapter/_lonely_rear_link_test.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_low_test.py (renamed from src/python/src/grpc/_adapter/_low_test.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_proto_scenarios.py (renamed from src/python/src/grpc/_adapter/_proto_scenarios.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_test_links.py (renamed from src/python/src/grpc/_adapter/_test_links.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/.gitignore7
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/__init__.py28
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py (renamed from src/python/src/grpc/_cython/adapter_low_test.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/cygrpc_test.py (renamed from src/python/src/grpc/_cython/cygrpc_test.py)16
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/test_utilities.py (renamed from src/python/src/grpc/_cython/test_utilities.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_junkdrawer/__init__.py (renamed from src/python/interop/setup.py)27
-rw-r--r--src/python/grpcio_test/grpc_test/_junkdrawer/math_pb2.py (renamed from src/python/src/grpc/_junkdrawer/math_pb2.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_junkdrawer/stock_pb2.py (renamed from src/python/src/grpc/_junkdrawer/stock_pb2.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/_links/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py (renamed from src/python/src/grpc/_links/_lonely_invocation_link_test.py)6
-rw-r--r--src/python/grpcio_test/grpc_test/_links/_proto_scenarios.py (renamed from src/python/src/grpc/_links/_proto_scenarios.py)6
-rw-r--r--src/python/grpcio_test/grpc_test/_links/_transmission_test.py (renamed from src/python/src/grpc/_links/_transmission_test.py)20
-rw-r--r--src/python/grpcio_test/grpc_test/early_adopter/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/early_adopter/implementations_test.py (renamed from src/python/src/grpc/early_adopter/implementations_test.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/framework/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/base/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/base/implementations_test.py (renamed from src/python/src/grpc/framework/base/implementations_test.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/framework/base/interfaces_test_case.py (renamed from src/python/src/grpc/framework/base/interfaces_test_case.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/framework/common/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/common/test_constants.py (renamed from src/python/src/grpc/framework/common/test_constants.py)6
-rw-r--r--src/python/grpcio_test/grpc_test/framework/common/test_control.py (renamed from src/python/src/grpc/framework/common/test_control.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/common/test_coverage.py (renamed from src/python/src/grpc/framework/common/test_coverage.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/_test_case.py (renamed from src/python/src/grpc/framework/face/_test_case.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/blocking_invocation_inline_service_test.py (renamed from src/python/src/grpc/framework/face/blocking_invocation_inline_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/event_invocation_synchronous_event_service_test.py (renamed from src/python/src/grpc/framework/face/event_invocation_synchronous_event_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/future_invocation_asynchronous_event_service_test.py (renamed from src/python/src/grpc/framework/face/future_invocation_asynchronous_event_service_test.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/base_util.py (renamed from src/python/src/grpc/framework/face/testing/base_util.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/blocking_invocation_inline_service_test_case.py (renamed from src/python/src/grpc/framework/face/testing/blocking_invocation_inline_service_test_case.py)10
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/callback.py (renamed from src/python/src/grpc/framework/face/testing/callback.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/control.py (renamed from src/python/src/grpc/framework/face/testing/control.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/coverage.py (renamed from src/python/src/grpc/framework/face/testing/coverage.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/digest.py (renamed from src/python/src/grpc/framework/face/testing/digest.py)6
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/event_invocation_synchronous_event_service_test_case.py (renamed from src/python/src/grpc/framework/face/testing/event_invocation_synchronous_event_service_test_case.py)12
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py (renamed from src/python/src/grpc/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py)10
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/interfaces.py (renamed from src/python/src/grpc/framework/face/testing/interfaces.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/serial.py (renamed from src/python/src/grpc/framework/face/testing/serial.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/service.py (renamed from src/python/src/grpc/framework/face/testing/service.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/stock_service.py (renamed from src/python/src/grpc/framework/face/testing/stock_service.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/face/testing/test_case.py (renamed from src/python/src/grpc/framework/face/testing/test_case.py)2
-rw-r--r--src/python/grpcio_test/grpc_test/framework/foundation/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/foundation/_later_test.py (renamed from src/python/src/grpc/framework/foundation/_later_test.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/foundation/_logging_pool_test.py (renamed from src/python/src/grpc/framework/foundation/_logging_pool_test.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/foundation/stream_testing.py (renamed from src/python/src/grpc/framework/foundation/stream_testing.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/links/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py (renamed from src/python/src/grpc/framework/interfaces/links/test_cases.py)4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py (renamed from src/python/src/grpc/framework/interfaces/links/test_utilities.py)0
-rw-r--r--src/python/grpcio_test/grpc_test/test_common.py71
-rw-r--r--src/python/grpcio_test/requirements.txt5
-rw-r--r--src/python/grpcio_test/setup.cfg3
-rw-r--r--src/python/grpcio_test/setup.py79
-rw-r--r--src/python/src/.gitignore4
-rw-r--r--src/python/src/MANIFEST.in1
189 files changed, 809 insertions, 225 deletions
diff --git a/src/python/grpcio/.gitignore b/src/python/grpcio/.gitignore
new file mode 100644
index 0000000000..4c02b8d14d
--- /dev/null
+++ b/src/python/grpcio/.gitignore
@@ -0,0 +1,9 @@
+MANIFEST
+*.egg-info/
+build/
+dist/
+*.egg
+*.egg/
+*.eggs/
+doc/
+_grpcio_metadata.py
diff --git a/src/python/grpcio/MANIFEST.in b/src/python/grpcio/MANIFEST.in
new file mode 100644
index 0000000000..9583dc7768
--- /dev/null
+++ b/src/python/grpcio/MANIFEST.in
@@ -0,0 +1,3 @@
+graft grpc
+include commands.py
+include requirements.txt
diff --git a/src/python/src/README.rst b/src/python/grpcio/README.rst
index 00bdecf56f..00bdecf56f 100644
--- a/src/python/src/README.rst
+++ b/src/python/grpcio/README.rst
diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py
new file mode 100644
index 0000000000..89c0fbf0f3
--- /dev/null
+++ b/src/python/grpcio/commands.py
@@ -0,0 +1,102 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Provides distutils command classes for the GRPC Python setup process."""
+
+import os
+import os.path
+import sys
+
+import setuptools
+from setuptools.command import build_py
+
+_CONF_PY_ADDENDUM = """
+extensions.append('sphinx.ext.napoleon')
+napoleon_google_docstring = True
+napoleon_numpy_docstring = True
+
+html_theme = 'sphinx_rtd_theme'
+"""
+
+
+class SphinxDocumentation(setuptools.Command):
+ """Command to generate documentation via sphinx."""
+
+ description = ''
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ # We import here to ensure that setup.py has had a chance to install the
+ # relevant package eggs first.
+ import sphinx
+ import sphinx.apidoc
+ metadata = self.distribution.metadata
+ src_dir = os.path.join(
+ os.getcwd(), self.distribution.package_dir['grpc'])
+ sys.path.append(src_dir)
+ sphinx.apidoc.main([
+ '', '--force', '--full', '-H', metadata.name, '-A', metadata.author,
+ '-V', metadata.version, '-R', metadata.version,
+ '-o', os.path.join('doc', 'src'), src_dir])
+ conf_filepath = os.path.join('doc', 'src', 'conf.py')
+ with open(conf_filepath, 'a') as conf_file:
+ conf_file.write(_CONF_PY_ADDENDUM)
+ sphinx.main(['', os.path.join('doc', 'src'), os.path.join('doc', 'build')])
+
+
+class BuildProjectMetadata(setuptools.Command):
+ """Command to generate project metadata in a module."""
+
+ description = ''
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ with open('grpc/_grpcio_metadata.py', 'w') as module_file:
+ module_file.write('__version__ = """{}"""'.format(
+ self.distribution.get_version()))
+
+
+class BuildPy(build_py.build_py):
+ """Custom project build command."""
+
+ def run(self):
+ self.run_command('build_project_metadata')
+ build_py.build_py.run(self)
diff --git a/src/python/interop/interop/__init__.py b/src/python/grpcio/grpc/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/interop/interop/__init__.py
+++ b/src/python/grpcio/grpc/__init__.py
diff --git a/src/python/src/grpc/_adapter/.gitignore b/src/python/grpcio/grpc/_adapter/.gitignore
index a6f96cd6db..a6f96cd6db 100644
--- a/src/python/src/grpc/_adapter/.gitignore
+++ b/src/python/grpcio/grpc/_adapter/.gitignore
diff --git a/src/python/src/grpc/__init__.py b/src/python/grpcio/grpc/_adapter/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/__init__.py
+++ b/src/python/grpcio/grpc/_adapter/__init__.py
diff --git a/src/python/src/grpc/_adapter/_c/module.c b/src/python/grpcio/grpc/_adapter/_c/module.c
index 1f3aedd9d8..1f3aedd9d8 100644
--- a/src/python/src/grpc/_adapter/_c/module.c
+++ b/src/python/grpcio/grpc/_adapter/_c/module.c
diff --git a/src/python/src/grpc/_adapter/_c/types.c b/src/python/grpcio/grpc/_adapter/_c/types.c
index 8855c32ca6..8855c32ca6 100644
--- a/src/python/src/grpc/_adapter/_c/types.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types.c
diff --git a/src/python/src/grpc/_adapter/_c/types.h b/src/python/grpcio/grpc/_adapter/_c/types.h
index 3449f0643f..4e0da4a28a 100644
--- a/src/python/src/grpc/_adapter/_c/types.h
+++ b/src/python/grpcio/grpc/_adapter/_c/types.h
@@ -63,8 +63,6 @@ ClientCredentials *pygrpc_ClientCredentials_jwt(
PyTypeObject *type, PyObject *args, PyObject *kwargs);
ClientCredentials *pygrpc_ClientCredentials_refresh_token(
PyTypeObject *type, PyObject *args, PyObject *kwargs);
-ClientCredentials *pygrpc_ClientCredentials_fake_transport_security(
- PyTypeObject *type, PyObject *ignored);
ClientCredentials *pygrpc_ClientCredentials_iam(
PyTypeObject *type, PyObject *args, PyObject *kwargs);
extern PyTypeObject pygrpc_ClientCredentials_type;
@@ -81,8 +79,6 @@ typedef struct ServerCredentials {
void pygrpc_ServerCredentials_dealloc(ServerCredentials *self);
ServerCredentials *pygrpc_ServerCredentials_ssl(
PyTypeObject *type, PyObject *args, PyObject *kwargs);
-ServerCredentials *pygrpc_ServerCredentials_fake_transport_security(
- PyTypeObject *type, PyObject *ignored);
extern PyTypeObject pygrpc_ServerCredentials_type;
diff --git a/src/python/src/grpc/_adapter/_c/types/call.c b/src/python/grpcio/grpc/_adapter/_c/types/call.c
index 0739070044..0739070044 100644
--- a/src/python/src/grpc/_adapter/_c/types/call.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/call.c
diff --git a/src/python/src/grpc/_adapter/_c/types/channel.c b/src/python/grpcio/grpc/_adapter/_c/types/channel.c
index c235597466..963104742f 100644
--- a/src/python/src/grpc/_adapter/_c/types/channel.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/channel.c
@@ -104,7 +104,7 @@ Channel *pygrpc_Channel_new(
if (creds) {
self->c_chan = grpc_secure_channel_create(creds->c_creds, target, &c_args);
} else {
- self->c_chan = grpc_channel_create(target, &c_args);
+ self->c_chan = grpc_insecure_channel_create(target, &c_args);
}
pygrpc_discard_channel_args(c_args);
return self;
@@ -128,7 +128,7 @@ Call *pygrpc_Channel_create_call(
}
call = pygrpc_Call_new_empty(cq);
call->c_call = grpc_channel_create_call(
- self->c_chan, cq->c_cq, method, host,
+ self->c_chan, NULL, GRPC_PROPAGATE_DEFAULTS, cq->c_cq, method, host,
pygrpc_cast_double_to_gpr_timespec(deadline));
return call;
}
diff --git a/src/python/src/grpc/_adapter/_c/types/client_credentials.c b/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c
index 6a4561c060..e314c15324 100644
--- a/src/python/src/grpc/_adapter/_c/types/client_credentials.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c
@@ -54,9 +54,6 @@ PyMethodDef pygrpc_ClientCredentials_methods[] = {
METH_CLASS|METH_KEYWORDS, ""},
{"refresh_token", (PyCFunction)pygrpc_ClientCredentials_refresh_token,
METH_CLASS|METH_KEYWORDS, ""},
- {"fake_transport_security",
- (PyCFunction)pygrpc_ClientCredentials_fake_transport_security,
- METH_CLASS|METH_NOARGS, ""},
{"iam", (PyCFunction)pygrpc_ClientCredentials_iam,
METH_CLASS|METH_KEYWORDS, ""},
{NULL}
@@ -208,6 +205,7 @@ ClientCredentials *pygrpc_ClientCredentials_service_account(
return self;
}
+/* TODO: Rename this credentials to something like service_account_jwt_access */
ClientCredentials *pygrpc_ClientCredentials_jwt(
PyTypeObject *type, PyObject *args, PyObject *kwargs) {
ClientCredentials *self;
@@ -219,7 +217,7 @@ ClientCredentials *pygrpc_ClientCredentials_jwt(
return NULL;
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_jwt_credentials_create(
+ self->c_creds = grpc_service_account_jwt_access_credentials_create(
json_key, pygrpc_cast_double_to_gpr_timespec(lifetime));
if (!self->c_creds) {
Py_DECREF(self);
@@ -249,20 +247,6 @@ ClientCredentials *pygrpc_ClientCredentials_refresh_token(
return self;
}
-ClientCredentials *pygrpc_ClientCredentials_fake_transport_security(
- PyTypeObject *type, PyObject *ignored) {
- ClientCredentials *self = (ClientCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_fake_transport_security_credentials_create();
- if (!self->c_creds) {
- Py_DECREF(self);
- PyErr_SetString(PyExc_RuntimeError,
- "couldn't create fake credentials; "
- "something is horribly wrong with the universe");
- return NULL;
- }
- return self;
-}
-
ClientCredentials *pygrpc_ClientCredentials_iam(
PyTypeObject *type, PyObject *args, PyObject *kwargs) {
ClientCredentials *self;
diff --git a/src/python/src/grpc/_adapter/_c/types/completion_queue.c b/src/python/grpcio/grpc/_adapter/_c/types/completion_queue.c
index 2dd44b6ddd..2dd44b6ddd 100644
--- a/src/python/src/grpc/_adapter/_c/types/completion_queue.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/completion_queue.c
diff --git a/src/python/src/grpc/_adapter/_c/types/server.c b/src/python/grpcio/grpc/_adapter/_c/types/server.c
index 2a00f34039..c2190ea672 100644
--- a/src/python/src/grpc/_adapter/_c/types/server.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/server.c
@@ -155,7 +155,7 @@ PyObject *pygrpc_Server_add_http2_port(
port = grpc_server_add_secure_http2_port(
self->c_serv, addr, creds->c_creds);
} else {
- port = grpc_server_add_http2_port(self->c_serv, addr);
+ port = grpc_server_add_insecure_http2_port(self->c_serv, addr);
}
return PyInt_FromLong(port);
diff --git a/src/python/src/grpc/_adapter/_c/types/server_credentials.c b/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c
index 2e02c8fe81..f6859b79d7 100644
--- a/src/python/src/grpc/_adapter/_c/types/server_credentials.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c
@@ -43,9 +43,6 @@
PyMethodDef pygrpc_ServerCredentials_methods[] = {
{"ssl", (PyCFunction)pygrpc_ServerCredentials_ssl,
METH_CLASS|METH_KEYWORDS, ""},
- {"fake_transport_security",
- (PyCFunction)pygrpc_ServerCredentials_fake_transport_security,
- METH_CLASS|METH_NOARGS, ""},
{NULL}
};
const char pygrpc_ServerCredentials_doc[] = "";
@@ -131,16 +128,11 @@ ServerCredentials *pygrpc_ServerCredentials_ssl(
}
self = (ServerCredentials *)type->tp_alloc(type, 0);
+ /* TODO: Add a force_client_auth parameter in the python object and pass it
+ here as the last arg. */
self->c_creds = grpc_ssl_server_credentials_create(
- root_certs, key_cert_pairs, num_key_cert_pairs);
+ root_certs, key_cert_pairs, num_key_cert_pairs, 0);
gpr_free(key_cert_pairs);
return self;
}
-ServerCredentials *pygrpc_ServerCredentials_fake_transport_security(
- PyTypeObject *type, PyObject *ignored) {
- ServerCredentials *self = (ServerCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_fake_transport_security_server_credentials_create();
- return self;
-}
-
diff --git a/src/python/src/grpc/_adapter/_c/utility.c b/src/python/grpcio/grpc/_adapter/_c/utility.c
index d9f911a41a..51f3c9be01 100644
--- a/src/python/src/grpc/_adapter/_c/utility.c
+++ b/src/python/grpcio/grpc/_adapter/_c/utility.c
@@ -374,6 +374,7 @@ PyObject *pygrpc_consume_ops(grpc_op *op, size_t nops) {
}
double pygrpc_cast_gpr_timespec_to_double(gpr_timespec timespec) {
+ timespec = gpr_convert_clock_type(timespec, GPR_CLOCK_REALTIME);
return timespec.tv_sec + 1e-9*timespec.tv_nsec;
}
diff --git a/src/python/src/grpc/_adapter/_common.py b/src/python/grpcio/grpc/_adapter/_common.py
index 492849f4cb..492849f4cb 100644
--- a/src/python/src/grpc/_adapter/_common.py
+++ b/src/python/grpcio/grpc/_adapter/_common.py
diff --git a/src/python/src/grpc/_adapter/_intermediary_low.py b/src/python/grpcio/grpc/_adapter/_intermediary_low.py
index 3c7f0a2619..3c7f0a2619 100644
--- a/src/python/src/grpc/_adapter/_intermediary_low.py
+++ b/src/python/grpcio/grpc/_adapter/_intermediary_low.py
diff --git a/src/python/src/grpc/_adapter/_low.py b/src/python/grpcio/grpc/_adapter/_low.py
index dcf67dbc11..dcf67dbc11 100644
--- a/src/python/src/grpc/_adapter/_low.py
+++ b/src/python/grpcio/grpc/_adapter/_low.py
diff --git a/src/python/src/grpc/_adapter/_types.py b/src/python/grpcio/grpc/_adapter/_types.py
index 5ddb1774ea..5ddb1774ea 100644
--- a/src/python/src/grpc/_adapter/_types.py
+++ b/src/python/grpcio/grpc/_adapter/_types.py
diff --git a/src/python/src/grpc/_adapter/fore.py b/src/python/grpcio/grpc/_adapter/fore.py
index 7d88bda263..7d88bda263 100644
--- a/src/python/src/grpc/_adapter/fore.py
+++ b/src/python/grpcio/grpc/_adapter/fore.py
diff --git a/src/python/src/grpc/_adapter/rear.py b/src/python/grpcio/grpc/_adapter/rear.py
index fd6f45f7a7..fd6f45f7a7 100644
--- a/src/python/src/grpc/_adapter/rear.py
+++ b/src/python/grpcio/grpc/_adapter/rear.py
diff --git a/src/python/src/grpc/_cython/.gitignore b/src/python/grpcio/grpc/_cython/.gitignore
index c315029288..c315029288 100644
--- a/src/python/src/grpc/_cython/.gitignore
+++ b/src/python/grpcio/grpc/_cython/.gitignore
diff --git a/src/python/src/grpc/_cython/README.rst b/src/python/grpcio/grpc/_cython/README.rst
index c0e66734e8..c0e66734e8 100644
--- a/src/python/src/grpc/_cython/README.rst
+++ b/src/python/grpcio/grpc/_cython/README.rst
diff --git a/src/python/src/grpc/_cython/__init__.py b/src/python/grpcio/grpc/_cython/__init__.py
index b89398809f..b89398809f 100644
--- a/src/python/src/grpc/_cython/__init__.py
+++ b/src/python/grpcio/grpc/_cython/__init__.py
diff --git a/src/python/src/grpc/_cython/_cygrpc/__init__.py b/src/python/grpcio/grpc/_cython/_cygrpc/__init__.py
index b89398809f..b89398809f 100644
--- a/src/python/src/grpc/_cython/_cygrpc/__init__.py
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/__init__.py
diff --git a/src/python/src/grpc/_cython/_cygrpc/call.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/call.pxd
index fe9b81e3d3..fe9b81e3d3 100644
--- a/src/python/src/grpc/_cython/_cygrpc/call.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/call.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/call.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/call.pyx
index 4349786b3a..4349786b3a 100644
--- a/src/python/src/grpc/_cython/_cygrpc/call.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/call.pyx
diff --git a/src/python/src/grpc/_cython/_cygrpc/channel.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/channel.pxd
index 3e341bf222..3e341bf222 100644
--- a/src/python/src/grpc/_cython/_cygrpc/channel.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/channel.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/channel.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx
index b20313818d..b20313818d 100644
--- a/src/python/src/grpc/_cython/_cygrpc/channel.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx
diff --git a/src/python/src/grpc/_cython/_cygrpc/completion_queue.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pxd
index fd562ad75b..fd562ad75b 100644
--- a/src/python/src/grpc/_cython/_cygrpc/completion_queue.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/completion_queue.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx
index 886d85360a..886d85360a 100644
--- a/src/python/src/grpc/_cython/_cygrpc/completion_queue.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx
diff --git a/src/python/src/grpc/_cython/_cygrpc/credentials.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd
index 6b74a267e0..6b74a267e0 100644
--- a/src/python/src/grpc/_cython/_cygrpc/credentials.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/credentials.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx
index c14d8844dd..2d74702fbd 100644
--- a/src/python/src/grpc/_cython/_cygrpc/credentials.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx
@@ -126,6 +126,7 @@ def client_credentials_service_account(
credentials.references.extend([json_key, scope])
return credentials
+#TODO rename to something like client_credentials_service_account_jwt_access.
def client_credentials_jwt(json_key, records.Timespec token_lifetime not None):
if isinstance(json_key, bytes):
pass
@@ -134,7 +135,7 @@ def client_credentials_jwt(json_key, records.Timespec token_lifetime not None):
else:
raise TypeError("expected json_key to be str or bytes")
cdef ClientCredentials credentials = ClientCredentials()
- credentials.c_credentials = grpc.grpc_jwt_credentials_create(
+ credentials.c_credentials = grpc.grpc_service_account_jwt_access_credentials_create(
json_key, token_lifetime.c_time)
credentials.references.append(json_key)
return credentials
@@ -152,12 +153,6 @@ def client_credentials_refresh_token(json_refresh_token):
credentials.references.append(json_refresh_token)
return credentials
-def client_credentials_fake_transport_security():
- cdef ClientCredentials credentials = ClientCredentials()
- credentials.c_credentials = (
- grpc.grpc_fake_transport_security_credentials_create())
- return credentials
-
def client_credentials_iam(authorization_token, authority_selector):
if isinstance(authorization_token, bytes):
pass
@@ -210,8 +205,3 @@ def server_credentials_ssl(pem_root_certs, pem_key_cert_pairs):
)
return credentials
-def server_credentials_fake_transport_security():
- cdef ServerCredentials credentials = ServerCredentials()
- credentials.c_credentials = (
- grpc.grpc_fake_transport_security_server_credentials_create())
- return credentials
diff --git a/src/python/src/grpc/_cython/_cygrpc/grpc.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd
index 7db8fbe31c..d065383587 100644
--- a/src/python/src/grpc/_cython/_cygrpc/grpc.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd
@@ -313,11 +313,10 @@ cdef extern from "grpc/grpc_security.h":
grpc_credentials *grpc_compute_engine_credentials_create()
grpc_credentials *grpc_service_account_credentials_create(
const char *json_key, const char *scope, gpr_timespec token_lifetime)
- grpc_credentials *grpc_jwt_credentials_create(const char *json_key,
+ grpc_credentials *grpc_service_account_jwt_access_credentials_create(const char *json_key,
gpr_timespec token_lifetime)
grpc_credentials *grpc_refresh_token_credentials_create(
const char *json_refresh_token)
- grpc_credentials *grpc_fake_transport_security_credentials_create()
grpc_credentials *grpc_iam_credentials_create(const char *authorization_token,
const char *authority_selector)
void grpc_credentials_release(grpc_credentials *creds)
@@ -334,7 +333,6 @@ cdef extern from "grpc/grpc_security.h":
const char *pem_root_certs,
grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
size_t num_key_cert_pairs);
- grpc_server_credentials *grpc_fake_transport_security_server_credentials_create()
void grpc_server_credentials_release(grpc_server_credentials *creds)
int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
diff --git a/src/python/src/grpc/_cython/_cygrpc/records.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd
index 9ee487882a..9ee487882a 100644
--- a/src/python/src/grpc/_cython/_cygrpc/records.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/records.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx
index 4814769fd2..4814769fd2 100644
--- a/src/python/src/grpc/_cython/_cygrpc/records.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx
diff --git a/src/python/src/grpc/_cython/_cygrpc/server.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/server.pxd
index 0257542a03..0257542a03 100644
--- a/src/python/src/grpc/_cython/_cygrpc/server.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/server.pxd
diff --git a/src/python/src/grpc/_cython/_cygrpc/server.pyx b/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx
index dcf9d38337..dcf9d38337 100644
--- a/src/python/src/grpc/_cython/_cygrpc/server.pyx
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/server.pyx
diff --git a/src/python/src/grpc/_cython/adapter_low.py b/src/python/grpcio/grpc/_cython/adapter_low.py
index 7546dd1599..2bb468eece 100644
--- a/src/python/src/grpc/_cython/adapter_low.py
+++ b/src/python/grpcio/grpc/_cython/adapter_low.py
@@ -72,10 +72,6 @@ class ClientCredentials(object):
raise NotImplementedError()
@staticmethod
- def fake_transport_security():
- raise NotImplementedError()
-
- @staticmethod
def iam():
raise NotImplementedError()
@@ -88,10 +84,6 @@ class ServerCredentials(object):
def ssl():
raise NotImplementedError()
- @staticmethod
- def fake_transport_security():
- raise NotImplementedError()
-
class CompletionQueue(type_interfaces.CompletionQueue):
def __init__(self):
diff --git a/src/python/src/grpc/_cython/cygrpc.pyx b/src/python/grpcio/grpc/_cython/cygrpc.pyx
index dcb06f345c..f4d9661580 100644
--- a/src/python/src/grpc/_cython/cygrpc.pyx
+++ b/src/python/grpcio/grpc/_cython/cygrpc.pyx
@@ -82,12 +82,8 @@ client_credentials_compute_engine = (
credentials.client_credentials_compute_engine)
client_credentials_jwt = credentials.client_credentials_jwt
client_credentials_refresh_token = credentials.client_credentials_refresh_token
-client_credentials_fake_transport_security = (
- credentials.client_credentials_fake_transport_security)
client_credentials_iam = credentials.client_credentials_iam
server_credentials_ssl = credentials.server_credentials_ssl
-server_credentials_fake_transport_security = (
- credentials.server_credentials_fake_transport_security)
CompletionQueue = completion_queue.CompletionQueue
Channel = channel.Channel
diff --git a/src/python/src/grpc/_adapter/__init__.py b/src/python/grpcio/grpc/_links/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/_adapter/__init__.py
+++ b/src/python/grpcio/grpc/_links/__init__.py
diff --git a/src/python/src/grpc/_links/invocation.py b/src/python/grpcio/grpc/_links/invocation.py
index 0058ae91f8..0058ae91f8 100644
--- a/src/python/src/grpc/_links/invocation.py
+++ b/src/python/grpcio/grpc/_links/invocation.py
diff --git a/src/python/src/grpc/_links/service.py b/src/python/grpcio/grpc/_links/service.py
index 7783e91824..7783e91824 100644
--- a/src/python/src/grpc/_links/service.py
+++ b/src/python/grpcio/grpc/_links/service.py
diff --git a/src/python/src/grpc/_junkdrawer/__init__.py b/src/python/grpcio/grpc/early_adopter/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/_junkdrawer/__init__.py
+++ b/src/python/grpcio/grpc/early_adopter/__init__.py
diff --git a/src/python/src/grpc/early_adopter/implementations.py b/src/python/grpcio/grpc/early_adopter/implementations.py
index 10919fae69..10919fae69 100644
--- a/src/python/src/grpc/early_adopter/implementations.py
+++ b/src/python/grpcio/grpc/early_adopter/implementations.py
diff --git a/src/python/src/grpc/_links/__init__.py b/src/python/grpcio/grpc/framework/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/_links/__init__.py
+++ b/src/python/grpcio/grpc/framework/__init__.py
diff --git a/src/python/src/grpc/framework/alpha/__init__.py b/src/python/grpcio/grpc/framework/alpha/__init__.py
index b89398809f..b89398809f 100644
--- a/src/python/src/grpc/framework/alpha/__init__.py
+++ b/src/python/grpcio/grpc/framework/alpha/__init__.py
diff --git a/src/python/src/grpc/framework/alpha/_face_utilities.py b/src/python/grpcio/grpc/framework/alpha/_face_utilities.py
index fb0cfe426d..fb0cfe426d 100644
--- a/src/python/src/grpc/framework/alpha/_face_utilities.py
+++ b/src/python/grpcio/grpc/framework/alpha/_face_utilities.py
diff --git a/src/python/src/grpc/framework/alpha/_reexport.py b/src/python/grpcio/grpc/framework/alpha/_reexport.py
index 198cb95ad5..198cb95ad5 100644
--- a/src/python/src/grpc/framework/alpha/_reexport.py
+++ b/src/python/grpcio/grpc/framework/alpha/_reexport.py
diff --git a/src/python/src/grpc/framework/alpha/exceptions.py b/src/python/grpcio/grpc/framework/alpha/exceptions.py
index 5234d3b91c..5234d3b91c 100644
--- a/src/python/src/grpc/framework/alpha/exceptions.py
+++ b/src/python/grpcio/grpc/framework/alpha/exceptions.py
diff --git a/src/python/src/grpc/framework/alpha/interfaces.py b/src/python/grpcio/grpc/framework/alpha/interfaces.py
index 8380567c97..8380567c97 100644
--- a/src/python/src/grpc/framework/alpha/interfaces.py
+++ b/src/python/grpcio/grpc/framework/alpha/interfaces.py
diff --git a/src/python/src/grpc/framework/alpha/utilities.py b/src/python/grpcio/grpc/framework/alpha/utilities.py
index 7d7f78f5e4..7d7f78f5e4 100644
--- a/src/python/src/grpc/framework/alpha/utilities.py
+++ b/src/python/grpcio/grpc/framework/alpha/utilities.py
diff --git a/src/python/src/grpc/early_adopter/__init__.py b/src/python/grpcio/grpc/framework/base/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/early_adopter/__init__.py
+++ b/src/python/grpcio/grpc/framework/base/__init__.py
diff --git a/src/python/src/grpc/framework/base/_cancellation.py b/src/python/grpcio/grpc/framework/base/_cancellation.py
index ffbc90668f..ffbc90668f 100644
--- a/src/python/src/grpc/framework/base/_cancellation.py
+++ b/src/python/grpcio/grpc/framework/base/_cancellation.py
diff --git a/src/python/src/grpc/framework/base/_constants.py b/src/python/grpcio/grpc/framework/base/_constants.py
index 8fbdc82782..8fbdc82782 100644
--- a/src/python/src/grpc/framework/base/_constants.py
+++ b/src/python/grpcio/grpc/framework/base/_constants.py
diff --git a/src/python/src/grpc/framework/base/_context.py b/src/python/grpcio/grpc/framework/base/_context.py
index d84871d639..d84871d639 100644
--- a/src/python/src/grpc/framework/base/_context.py
+++ b/src/python/grpcio/grpc/framework/base/_context.py
diff --git a/src/python/src/grpc/framework/base/_emission.py b/src/python/grpcio/grpc/framework/base/_emission.py
index 1829669a72..1829669a72 100644
--- a/src/python/src/grpc/framework/base/_emission.py
+++ b/src/python/grpcio/grpc/framework/base/_emission.py
diff --git a/src/python/src/grpc/framework/base/_ends.py b/src/python/grpcio/grpc/framework/base/_ends.py
index 176f3ac06e..176f3ac06e 100644
--- a/src/python/src/grpc/framework/base/_ends.py
+++ b/src/python/grpcio/grpc/framework/base/_ends.py
diff --git a/src/python/src/grpc/framework/base/_expiration.py b/src/python/grpcio/grpc/framework/base/_expiration.py
index 17acbef4c1..17acbef4c1 100644
--- a/src/python/src/grpc/framework/base/_expiration.py
+++ b/src/python/grpcio/grpc/framework/base/_expiration.py
diff --git a/src/python/src/grpc/framework/base/_ingestion.py b/src/python/grpcio/grpc/framework/base/_ingestion.py
index 06d5b92f0b..06d5b92f0b 100644
--- a/src/python/src/grpc/framework/base/_ingestion.py
+++ b/src/python/grpcio/grpc/framework/base/_ingestion.py
diff --git a/src/python/src/grpc/framework/base/_interfaces.py b/src/python/grpcio/grpc/framework/base/_interfaces.py
index d88cf76590..d88cf76590 100644
--- a/src/python/src/grpc/framework/base/_interfaces.py
+++ b/src/python/grpcio/grpc/framework/base/_interfaces.py
diff --git a/src/python/src/grpc/framework/base/_reception.py b/src/python/grpcio/grpc/framework/base/_reception.py
index dd428964f1..dd428964f1 100644
--- a/src/python/src/grpc/framework/base/_reception.py
+++ b/src/python/grpcio/grpc/framework/base/_reception.py
diff --git a/src/python/src/grpc/framework/base/_termination.py b/src/python/grpcio/grpc/framework/base/_termination.py
index ddcbc60293..ddcbc60293 100644
--- a/src/python/src/grpc/framework/base/_termination.py
+++ b/src/python/grpcio/grpc/framework/base/_termination.py
diff --git a/src/python/src/grpc/framework/base/_transmission.py b/src/python/grpcio/grpc/framework/base/_transmission.py
index 6845129234..6845129234 100644
--- a/src/python/src/grpc/framework/base/_transmission.py
+++ b/src/python/grpcio/grpc/framework/base/_transmission.py
diff --git a/src/python/src/grpc/framework/base/exceptions.py b/src/python/grpcio/grpc/framework/base/exceptions.py
index b8f4752184..b8f4752184 100644
--- a/src/python/src/grpc/framework/base/exceptions.py
+++ b/src/python/grpcio/grpc/framework/base/exceptions.py
diff --git a/src/python/src/grpc/framework/base/implementations.py b/src/python/grpcio/grpc/framework/base/implementations.py
index 5656f9f981..5656f9f981 100644
--- a/src/python/src/grpc/framework/base/implementations.py
+++ b/src/python/grpcio/grpc/framework/base/implementations.py
diff --git a/src/python/src/grpc/framework/base/in_memory.py b/src/python/grpcio/grpc/framework/base/in_memory.py
index c92d0bc663..c92d0bc663 100644
--- a/src/python/src/grpc/framework/base/in_memory.py
+++ b/src/python/grpcio/grpc/framework/base/in_memory.py
diff --git a/src/python/src/grpc/framework/base/interfaces.py b/src/python/grpcio/grpc/framework/base/interfaces.py
index e22c10d975..e22c10d975 100644
--- a/src/python/src/grpc/framework/base/interfaces.py
+++ b/src/python/grpcio/grpc/framework/base/interfaces.py
diff --git a/src/python/src/grpc/framework/base/null.py b/src/python/grpcio/grpc/framework/base/null.py
index 1e30d4557b..1e30d4557b 100644
--- a/src/python/src/grpc/framework/base/null.py
+++ b/src/python/grpcio/grpc/framework/base/null.py
diff --git a/src/python/src/grpc/framework/base/util.py b/src/python/grpcio/grpc/framework/base/util.py
index c832c826cf..c832c826cf 100644
--- a/src/python/src/grpc/framework/base/util.py
+++ b/src/python/grpcio/grpc/framework/base/util.py
diff --git a/src/python/src/grpc/framework/__init__.py b/src/python/grpcio/grpc/framework/common/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/__init__.py
+++ b/src/python/grpcio/grpc/framework/common/__init__.py
diff --git a/src/python/src/grpc/framework/common/cardinality.py b/src/python/grpcio/grpc/framework/common/cardinality.py
index 610425e803..610425e803 100644
--- a/src/python/src/grpc/framework/common/cardinality.py
+++ b/src/python/grpcio/grpc/framework/common/cardinality.py
diff --git a/src/python/src/grpc/framework/common/style.py b/src/python/grpcio/grpc/framework/common/style.py
index 6ae694bdcb..6ae694bdcb 100644
--- a/src/python/src/grpc/framework/common/style.py
+++ b/src/python/grpcio/grpc/framework/common/style.py
diff --git a/src/python/src/grpc/framework/base/__init__.py b/src/python/grpcio/grpc/framework/face/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/base/__init__.py
+++ b/src/python/grpcio/grpc/framework/face/__init__.py
diff --git a/src/python/src/grpc/framework/face/_calls.py b/src/python/grpcio/grpc/framework/face/_calls.py
index 87edeb0f0e..87edeb0f0e 100644
--- a/src/python/src/grpc/framework/face/_calls.py
+++ b/src/python/grpcio/grpc/framework/face/_calls.py
diff --git a/src/python/src/grpc/framework/face/_control.py b/src/python/grpcio/grpc/framework/face/_control.py
index e918907b74..e918907b74 100644
--- a/src/python/src/grpc/framework/face/_control.py
+++ b/src/python/grpcio/grpc/framework/face/_control.py
diff --git a/src/python/src/grpc/framework/face/_service.py b/src/python/grpcio/grpc/framework/face/_service.py
index cdf413356a..cdf413356a 100644
--- a/src/python/src/grpc/framework/face/_service.py
+++ b/src/python/grpcio/grpc/framework/face/_service.py
diff --git a/src/python/src/grpc/framework/face/demonstration.py b/src/python/grpcio/grpc/framework/face/demonstration.py
index f6b4b609ff..f6b4b609ff 100644
--- a/src/python/src/grpc/framework/face/demonstration.py
+++ b/src/python/grpcio/grpc/framework/face/demonstration.py
diff --git a/src/python/src/grpc/framework/face/exceptions.py b/src/python/grpcio/grpc/framework/face/exceptions.py
index f112df70bc..f112df70bc 100644
--- a/src/python/src/grpc/framework/face/exceptions.py
+++ b/src/python/grpcio/grpc/framework/face/exceptions.py
diff --git a/src/python/src/grpc/framework/face/implementations.py b/src/python/grpcio/grpc/framework/face/implementations.py
index 4a6de52974..4a6de52974 100644
--- a/src/python/src/grpc/framework/face/implementations.py
+++ b/src/python/grpcio/grpc/framework/face/implementations.py
diff --git a/src/python/src/grpc/framework/face/interfaces.py b/src/python/grpcio/grpc/framework/face/interfaces.py
index b7cc4c1169..b7cc4c1169 100644
--- a/src/python/src/grpc/framework/face/interfaces.py
+++ b/src/python/grpcio/grpc/framework/face/interfaces.py
diff --git a/src/python/src/grpc/framework/face/utilities.py b/src/python/grpcio/grpc/framework/face/utilities.py
index a63fe8c60d..a63fe8c60d 100644
--- a/src/python/src/grpc/framework/face/utilities.py
+++ b/src/python/grpcio/grpc/framework/face/utilities.py
diff --git a/src/python/src/grpc/framework/common/__init__.py b/src/python/grpcio/grpc/framework/foundation/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/common/__init__.py
+++ b/src/python/grpcio/grpc/framework/foundation/__init__.py
diff --git a/src/python/src/grpc/framework/foundation/_timer_future.py b/src/python/grpcio/grpc/framework/foundation/_timer_future.py
index 2c9996aa9d..2c9996aa9d 100644
--- a/src/python/src/grpc/framework/foundation/_timer_future.py
+++ b/src/python/grpcio/grpc/framework/foundation/_timer_future.py
diff --git a/src/python/src/grpc/framework/foundation/abandonment.py b/src/python/grpcio/grpc/framework/foundation/abandonment.py
index 960b4d06b4..960b4d06b4 100644
--- a/src/python/src/grpc/framework/foundation/abandonment.py
+++ b/src/python/grpcio/grpc/framework/foundation/abandonment.py
diff --git a/src/python/src/grpc/framework/foundation/activated.py b/src/python/grpcio/grpc/framework/foundation/activated.py
index 426a71c705..426a71c705 100644
--- a/src/python/src/grpc/framework/foundation/activated.py
+++ b/src/python/grpcio/grpc/framework/foundation/activated.py
diff --git a/src/python/src/grpc/framework/foundation/callable_util.py b/src/python/grpcio/grpc/framework/foundation/callable_util.py
index 32b0751a01..32b0751a01 100644
--- a/src/python/src/grpc/framework/foundation/callable_util.py
+++ b/src/python/grpcio/grpc/framework/foundation/callable_util.py
diff --git a/src/python/src/grpc/framework/foundation/future.py b/src/python/grpcio/grpc/framework/foundation/future.py
index bfc16fc1ea..bfc16fc1ea 100644
--- a/src/python/src/grpc/framework/foundation/future.py
+++ b/src/python/grpcio/grpc/framework/foundation/future.py
diff --git a/src/python/src/grpc/framework/foundation/later.py b/src/python/grpcio/grpc/framework/foundation/later.py
index 1d1e065041..1d1e065041 100644
--- a/src/python/src/grpc/framework/foundation/later.py
+++ b/src/python/grpcio/grpc/framework/foundation/later.py
diff --git a/src/python/src/grpc/framework/foundation/logging_pool.py b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
index 7c7a6eebfc..7c7a6eebfc 100644
--- a/src/python/src/grpc/framework/foundation/logging_pool.py
+++ b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
diff --git a/src/python/src/grpc/framework/foundation/relay.py b/src/python/grpcio/grpc/framework/foundation/relay.py
index 9c23946552..9c23946552 100644
--- a/src/python/src/grpc/framework/foundation/relay.py
+++ b/src/python/grpcio/grpc/framework/foundation/relay.py
diff --git a/src/python/src/grpc/framework/foundation/stream.py b/src/python/grpcio/grpc/framework/foundation/stream.py
index 75c0cf145b..75c0cf145b 100644
--- a/src/python/src/grpc/framework/foundation/stream.py
+++ b/src/python/grpcio/grpc/framework/foundation/stream.py
diff --git a/src/python/src/grpc/framework/foundation/stream_util.py b/src/python/grpcio/grpc/framework/foundation/stream_util.py
index 2210e4efcf..2210e4efcf 100644
--- a/src/python/src/grpc/framework/foundation/stream_util.py
+++ b/src/python/grpcio/grpc/framework/foundation/stream_util.py
diff --git a/src/python/src/grpc/framework/face/__init__.py b/src/python/grpcio/grpc/framework/interfaces/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/face/__init__.py
+++ b/src/python/grpcio/grpc/framework/interfaces/__init__.py
diff --git a/src/python/src/grpc/framework/face/testing/__init__.py b/src/python/grpcio/grpc/framework/interfaces/links/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/face/testing/__init__.py
+++ b/src/python/grpcio/grpc/framework/interfaces/links/__init__.py
diff --git a/src/python/src/grpc/framework/interfaces/links/links.py b/src/python/grpcio/grpc/framework/interfaces/links/links.py
index 5ebbac8a6f..5ebbac8a6f 100644
--- a/src/python/src/grpc/framework/interfaces/links/links.py
+++ b/src/python/grpcio/grpc/framework/interfaces/links/links.py
diff --git a/src/python/src/grpc/framework/interfaces/links/utilities.py b/src/python/grpcio/grpc/framework/interfaces/links/utilities.py
index 6e4fd76d93..6e4fd76d93 100644
--- a/src/python/src/grpc/framework/interfaces/links/utilities.py
+++ b/src/python/grpcio/grpc/framework/interfaces/links/utilities.py
diff --git a/src/python/requirements.txt b/src/python/grpcio/requirements.txt
index 43395df03b..43395df03b 100644
--- a/src/python/requirements.txt
+++ b/src/python/grpcio/requirements.txt
diff --git a/src/python/grpcio/setup.cfg b/src/python/grpcio/setup.cfg
new file mode 100644
index 0000000000..8f69613632
--- /dev/null
+++ b/src/python/grpcio/setup.cfg
@@ -0,0 +1,2 @@
+[build_ext]
+inplace=1
diff --git a/src/python/src/setup.py b/src/python/grpcio/setup.py
index a857ae98cc..caa71a4f7c 100644
--- a/src/python/src/setup.py
+++ b/src/python/grpcio/setup.py
@@ -30,11 +30,17 @@
"""A setup module for the GRPC Python package."""
import os
+import os.path
import sys
from distutils import core as _core
import setuptools
+# Ensure we're in the proper directory whether or not we're being used by pip.
+os.chdir(os.path.dirname(os.path.abspath(__file__)))
+
+# Break import-style to ensure we can actually find our commands module.
+import commands
# Use environment variables to determine whether or not the Cython extension
# should *use* Cython or use the generated C files. Note that this requires the
@@ -73,29 +79,27 @@ _C_EXTENSION_MODULE = _core.Extension(
_EXTENSION_MODULES = [_C_EXTENSION_MODULE]
_PACKAGES = (
- 'grpc',
- 'grpc._adapter',
- 'grpc._junkdrawer',
- 'grpc._links',
- 'grpc.early_adopter',
- 'grpc.framework',
- 'grpc.framework.alpha',
- 'grpc.framework.base',
- 'grpc.framework.common',
- 'grpc.framework.face',
- 'grpc.framework.face.testing',
- 'grpc.framework.foundation',
- 'grpc.framework.interfaces',
- 'grpc.framework.interfaces.links',
+ setuptools.find_packages('.', exclude=['*._cython', '*._cython.*'])
)
_PACKAGE_DIRECTORIES = {
- 'grpc': 'grpc',
- 'grpc._adapter': 'grpc/_adapter',
- 'grpc._junkdrawer': 'grpc/_junkdrawer',
- 'grpc._links': 'grpc/_links',
- 'grpc.early_adopter': 'grpc/early_adopter',
- 'grpc.framework': 'grpc/framework',
+ '': '.',
+}
+
+_INSTALL_REQUIRES = (
+ 'enum34==1.0.4',
+ 'futures==2.2.0',
+ 'protobuf==3.0.0a3',
+)
+
+_SETUP_REQUIRES = (
+ 'sphinx>=1.3',
+) + _INSTALL_REQUIRES
+
+_COMMAND_CLASS = {
+ 'doc': commands.SphinxDocumentation,
+ 'build_project_metadata': commands.BuildProjectMetadata,
+ 'build_py': commands.BuildPy,
}
setuptools.setup(
@@ -104,9 +108,7 @@ setuptools.setup(
ext_modules=_EXTENSION_MODULES,
packages=list(_PACKAGES),
package_dir=_PACKAGE_DIRECTORIES,
- install_requires=[
- 'enum34==1.0.4',
- 'futures==2.2.0',
- 'protobuf==3.0.0a3'
- ]
+ install_requires=_INSTALL_REQUIRES,
+ setup_requires=_SETUP_REQUIRES,
+ cmdclass=_COMMAND_CLASS
)
diff --git a/src/python/grpcio_test/.gitignore b/src/python/grpcio_test/.gitignore
new file mode 100644
index 0000000000..218e3a15ab
--- /dev/null
+++ b/src/python/grpcio_test/.gitignore
@@ -0,0 +1,10 @@
+MANIFEST
+*.egg-info/
+build/
+dist/
+*.egg
+*.egg/
+*.eggs/
+.coverage
+.coverage.*
+nosetests.xml
diff --git a/src/python/grpcio_test/MANIFEST.in b/src/python/grpcio_test/MANIFEST.in
new file mode 100644
index 0000000000..c9327307dc
--- /dev/null
+++ b/src/python/grpcio_test/MANIFEST.in
@@ -0,0 +1,4 @@
+graft grpc_interop
+graft grpc_test
+include commands.py
+include requirements.txt
diff --git a/src/python/grpcio_test/commands.py b/src/python/grpcio_test/commands.py
new file mode 100644
index 0000000000..c796d94c76
--- /dev/null
+++ b/src/python/grpcio_test/commands.py
@@ -0,0 +1,57 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Provides distutils command classes for the GRPC Python test setup process."""
+
+import os
+import os.path
+import sys
+
+import setuptools
+
+
+class RunTests(setuptools.Command):
+ """Command to run all tests via py.test."""
+
+ description = ''
+ user_options = [('pytest-args=', 'a', 'arguments to pass to py.test')]
+
+ def initialize_options(self):
+ self.pytest_args = []
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ # We import here to ensure that setup.py has had a chance to install the
+ # relevant package eggs first.
+ import pytest
+ result = pytest.main(self.pytest_args)
+ if result != 0:
+ raise SystemExit(result)
diff --git a/src/python/src/grpc/framework/foundation/__init__.py b/src/python/grpcio_test/grpc_interop/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/foundation/__init__.py
+++ b/src/python/grpcio_test/grpc_interop/__init__.py
diff --git a/src/python/interop/interop/_insecure_interop_test.py b/src/python/grpcio_test/grpc_interop/_insecure_interop_test.py
index 98ea3a6648..825988a072 100644
--- a/src/python/interop/interop/_insecure_interop_test.py
+++ b/src/python/grpcio_test/grpc_interop/_insecure_interop_test.py
@@ -33,8 +33,8 @@ import unittest
from grpc.early_adopter import implementations
-from interop import _interop_test_case
-from interop import methods
+from grpc_interop import _interop_test_case
+from grpc_interop import methods
class InsecureInteropTest(
diff --git a/src/python/interop/interop/_interop_test_case.py b/src/python/grpcio_test/grpc_interop/_interop_test_case.py
index f40ef0ec83..ed8f7ef009 100644
--- a/src/python/interop/interop/_interop_test_case.py
+++ b/src/python/grpcio_test/grpc_interop/_interop_test_case.py
@@ -29,7 +29,7 @@
"""Common code for unit tests of the interoperability test code."""
-from interop import methods
+from grpc_interop import methods
class InteropTestCase(object):
diff --git a/src/python/interop/interop/_secure_interop_test.py b/src/python/grpcio_test/grpc_interop/_secure_interop_test.py
index be7618f549..a2682dee99 100644
--- a/src/python/interop/interop/_secure_interop_test.py
+++ b/src/python/grpcio_test/grpc_interop/_secure_interop_test.py
@@ -33,9 +33,9 @@ import unittest
from grpc.early_adopter import implementations
-from interop import _interop_test_case
-from interop import methods
-from interop import resources
+from grpc_interop import _interop_test_case
+from grpc_interop import methods
+from grpc_interop import resources
_SERVER_HOST_OVERRIDE = 'foo.test.google.fr'
diff --git a/src/python/interop/interop/client.py b/src/python/grpcio_test/grpc_interop/client.py
index 41f0d94539..2dd2103cbe 100644
--- a/src/python/interop/interop/client.py
+++ b/src/python/grpcio_test/grpc_interop/client.py
@@ -34,8 +34,8 @@ from oauth2client import client as oauth2client_client
from grpc.early_adopter import implementations
-from interop import methods
-from interop import resources
+from grpc_interop import methods
+from grpc_interop import resources
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
diff --git a/src/python/interop/interop/credentials/README b/src/python/grpcio_test/grpc_interop/credentials/README
index cb20dcb49f..cb20dcb49f 100644
--- a/src/python/interop/interop/credentials/README
+++ b/src/python/grpcio_test/grpc_interop/credentials/README
diff --git a/src/python/interop/interop/credentials/ca.pem b/src/python/grpcio_test/grpc_interop/credentials/ca.pem
index 6c8511a73c..6c8511a73c 100755
--- a/src/python/interop/interop/credentials/ca.pem
+++ b/src/python/grpcio_test/grpc_interop/credentials/ca.pem
diff --git a/src/python/interop/interop/credentials/server1.key b/src/python/grpcio_test/grpc_interop/credentials/server1.key
index 143a5b8765..143a5b8765 100755
--- a/src/python/interop/interop/credentials/server1.key
+++ b/src/python/grpcio_test/grpc_interop/credentials/server1.key
diff --git a/src/python/interop/interop/credentials/server1.pem b/src/python/grpcio_test/grpc_interop/credentials/server1.pem
index 8e582e571f..8e582e571f 100755
--- a/src/python/interop/interop/credentials/server1.pem
+++ b/src/python/grpcio_test/grpc_interop/credentials/server1.pem
diff --git a/src/python/interop/interop/empty_pb2.py b/src/python/grpcio_test/grpc_interop/empty_pb2.py
index 8c1ce2f13e..8c1ce2f13e 100644
--- a/src/python/interop/interop/empty_pb2.py
+++ b/src/python/grpcio_test/grpc_interop/empty_pb2.py
diff --git a/src/python/interop/interop/messages_pb2.py b/src/python/grpcio_test/grpc_interop/messages_pb2.py
index 0bf3d86a31..0bf3d86a31 100644
--- a/src/python/interop/interop/messages_pb2.py
+++ b/src/python/grpcio_test/grpc_interop/messages_pb2.py
diff --git a/src/python/interop/interop/methods.py b/src/python/grpcio_test/grpc_interop/methods.py
index 194afadb17..f4c94685ee 100644
--- a/src/python/interop/interop/methods.py
+++ b/src/python/grpcio_test/grpc_interop/methods.py
@@ -38,8 +38,8 @@ from oauth2client import client as oauth2client_client
from grpc.framework.alpha import utilities
-from interop import empty_pb2
-from interop import messages_pb2
+from grpc_interop import empty_pb2
+from grpc_interop import messages_pb2
_TIMEOUT = 7
diff --git a/src/python/interop/interop/resources.py b/src/python/grpcio_test/grpc_interop/resources.py
index 2c3045313d..2c3045313d 100644
--- a/src/python/interop/interop/resources.py
+++ b/src/python/grpcio_test/grpc_interop/resources.py
diff --git a/src/python/interop/interop/server.py b/src/python/grpcio_test/grpc_interop/server.py
index a67d412038..60f630a6be 100644
--- a/src/python/interop/interop/server.py
+++ b/src/python/grpcio_test/grpc_interop/server.py
@@ -35,8 +35,8 @@ import time
from grpc.early_adopter import implementations
-from interop import methods
-from interop import resources
+from grpc_interop import methods
+from grpc_interop import resources
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
diff --git a/src/python/interop/interop/test_pb2.py b/src/python/grpcio_test/grpc_interop/test_pb2.py
index 71325d5a9f..71325d5a9f 100644
--- a/src/python/interop/interop/test_pb2.py
+++ b/src/python/grpcio_test/grpc_interop/test_pb2.py
diff --git a/src/python/src/grpc/framework/interfaces/__init__.py b/src/python/grpcio_test/grpc_test/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/interfaces/__init__.py
+++ b/src/python/grpcio_test/grpc_test/__init__.py
diff --git a/src/python/grpcio_test/grpc_test/_adapter/.gitignore b/src/python/grpcio_test/grpc_test/_adapter/.gitignore
new file mode 100644
index 0000000000..a6f96cd6db
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_adapter/.gitignore
@@ -0,0 +1,5 @@
+*.a
+*.so
+*.dll
+*.pyc
+*.pyd
diff --git a/src/python/src/grpc/framework/interfaces/links/__init__.py b/src/python/grpcio_test/grpc_test/_adapter/__init__.py
index 7086519106..7086519106 100644
--- a/src/python/src/grpc/framework/interfaces/links/__init__.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/__init__.py
diff --git a/src/python/src/grpc/_adapter/_blocking_invocation_inline_service_test.py b/src/python/grpcio_test/grpc_test/_adapter/_blocking_invocation_inline_service_test.py
index 7a8ff0ad89..a1f776211c 100644
--- a/src/python/src/grpc/_adapter/_blocking_invocation_inline_service_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_blocking_invocation_inline_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc._adapter import _face_test_case
-from grpc.framework.face.testing import blocking_invocation_inline_service_test_case as test_case
+from grpc_test._adapter import _face_test_case
+from grpc_test.framework.face.testing import blocking_invocation_inline_service_test_case as test_case
class BlockingInvocationInlineServiceTest(
diff --git a/src/python/src/grpc/_adapter/_c_test.py b/src/python/grpcio_test/grpc_test/_adapter/_c_test.py
index 133b124072..fe020e2a9c 100644
--- a/src/python/src/grpc/_adapter/_c_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_c_test.py
@@ -36,14 +36,6 @@ from grpc._adapter import _types
class CTypeSmokeTest(unittest.TestCase):
- def testClientCredentialsUpDown(self):
- credentials = _c.ClientCredentials.fake_transport_security()
- del credentials
-
- def testServerCredentialsUpDown(self):
- credentials = _c.ServerCredentials.fake_transport_security()
- del credentials
-
def testCompletionQueueUpDown(self):
completion_queue = _c.CompletionQueue()
del completion_queue
@@ -58,10 +50,6 @@ class CTypeSmokeTest(unittest.TestCase):
channel = _c.Channel('[::]:0', [])
del channel
- def testSecureChannelUpDown(self):
- channel = _c.Channel('[::]:0', [], _c.ClientCredentials.fake_transport_security())
- del channel
-
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/python/src/grpc/_adapter/_event_invocation_synchronous_event_service_test.py b/src/python/grpcio_test/grpc_test/_adapter/_event_invocation_synchronous_event_service_test.py
index b8ceb75d68..0d01ebc8dc 100644
--- a/src/python/src/grpc/_adapter/_event_invocation_synchronous_event_service_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_event_invocation_synchronous_event_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc._adapter import _face_test_case
-from grpc.framework.face.testing import event_invocation_synchronous_event_service_test_case as test_case
+from grpc_test._adapter import _face_test_case
+from grpc_test.framework.face.testing import event_invocation_synchronous_event_service_test_case as test_case
class EventInvocationSynchronousEventServiceTest(
diff --git a/src/python/src/grpc/_adapter/_face_test_case.py b/src/python/grpcio_test/grpc_test/_adapter/_face_test_case.py
index 5fa974ed06..dfbd0b60af 100644
--- a/src/python/src/grpc/_adapter/_face_test_case.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_face_test_case.py
@@ -36,10 +36,10 @@ from grpc._adapter import rear
from grpc.framework.base import util
from grpc.framework.base import implementations as base_implementations
from grpc.framework.face import implementations as face_implementations
-from grpc.framework.face.testing import coverage
-from grpc.framework.face.testing import serial
-from grpc.framework.face.testing import test_case
from grpc.framework.foundation import logging_pool
+from grpc_test.framework.face.testing import coverage
+from grpc_test.framework.face.testing import serial
+from grpc_test.framework.face.testing import test_case
_TIMEOUT = 3
_MAXIMUM_TIMEOUT = 90
diff --git a/src/python/src/grpc/_adapter/_future_invocation_asynchronous_event_service_test.py b/src/python/grpcio_test/grpc_test/_adapter/_future_invocation_asynchronous_event_service_test.py
index 3773e65575..ea4a6a0bae 100644
--- a/src/python/src/grpc/_adapter/_future_invocation_asynchronous_event_service_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_future_invocation_asynchronous_event_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc._adapter import _face_test_case
-from grpc.framework.face.testing import future_invocation_asynchronous_event_service_test_case as test_case
+from grpc_test._adapter import _face_test_case
+from grpc_test.framework.face.testing import future_invocation_asynchronous_event_service_test_case as test_case
class FutureInvocationAsynchronousEventServiceTest(
diff --git a/src/python/src/grpc/_adapter/_intermediary_low_test.py b/src/python/grpcio_test/grpc_test/_adapter/_intermediary_low_test.py
index 27a5b82e9c..27a5b82e9c 100644
--- a/src/python/src/grpc/_adapter/_intermediary_low_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_intermediary_low_test.py
diff --git a/src/python/src/grpc/_adapter/_links_test.py b/src/python/grpcio_test/grpc_test/_adapter/_links_test.py
index 4729b84f84..c4686b327a 100644
--- a/src/python/src/grpc/_adapter/_links_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_links_test.py
@@ -32,12 +32,12 @@
import threading
import unittest
-from grpc._adapter import _proto_scenarios
-from grpc._adapter import _test_links
from grpc._adapter import fore
from grpc._adapter import rear
from grpc.framework.base import interfaces
from grpc.framework.foundation import logging_pool
+from grpc_test._adapter import _proto_scenarios
+from grpc_test._adapter import _test_links
_IDENTITY = lambda x: x
_TIMEOUT = 32
diff --git a/src/python/src/grpc/_adapter/_lonely_rear_link_test.py b/src/python/grpcio_test/grpc_test/_adapter/_lonely_rear_link_test.py
index 7f5021f40e..9b5758f60f 100644
--- a/src/python/src/grpc/_adapter/_lonely_rear_link_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_lonely_rear_link_test.py
@@ -31,10 +31,10 @@
import unittest
-from grpc._adapter import _test_links
from grpc._adapter import rear
from grpc.framework.base import interfaces
from grpc.framework.foundation import logging_pool
+from grpc_test._adapter import _test_links
_IDENTITY = lambda x: x
_TIMEOUT = 2
diff --git a/src/python/src/grpc/_adapter/_low_test.py b/src/python/grpcio_test/grpc_test/_adapter/_low_test.py
index a49cd007bf..9a8edfad0c 100644
--- a/src/python/src/grpc/_adapter/_low_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_low_test.py
@@ -97,7 +97,7 @@ class InsecureServerInsecureClient(unittest.TestCase):
CLIENT_METADATA_BIN_VALUE = b'\0'*1000
SERVER_INITIAL_METADATA_KEY = 'init_me_me_me'
SERVER_INITIAL_METADATA_VALUE = 'whodawha?'
- SERVER_TRAILING_METADATA_KEY = 'California_is_in_a_drought'
+ SERVER_TRAILING_METADATA_KEY = 'california_is_in_a_drought'
SERVER_TRAILING_METADATA_VALUE = 'zomg it is'
SERVER_STATUS_CODE = _types.StatusCode.OK
SERVER_STATUS_DETAILS = 'our work is never over'
diff --git a/src/python/src/grpc/_adapter/_proto_scenarios.py b/src/python/grpcio_test/grpc_test/_adapter/_proto_scenarios.py
index 60a622ba8b..b3d6ec8607 100644
--- a/src/python/src/grpc/_adapter/_proto_scenarios.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_proto_scenarios.py
@@ -32,7 +32,7 @@
import abc
import threading
-from grpc._junkdrawer import math_pb2
+from grpc_test._junkdrawer import math_pb2
class ProtoScenario(object):
diff --git a/src/python/src/grpc/_adapter/_test_links.py b/src/python/grpcio_test/grpc_test/_adapter/_test_links.py
index 86c7e61b17..86c7e61b17 100644
--- a/src/python/src/grpc/_adapter/_test_links.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_test_links.py
diff --git a/src/python/grpcio_test/grpc_test/_cython/.gitignore b/src/python/grpcio_test/grpc_test/_cython/.gitignore
new file mode 100644
index 0000000000..c315029288
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_cython/.gitignore
@@ -0,0 +1,7 @@
+*.h
+*.c
+*.a
+*.so
+*.dll
+*.pyc
+*.pyd
diff --git a/src/python/grpcio_test/grpc_test/_cython/__init__.py b/src/python/grpcio_test/grpc_test/_cython/__init__.py
new file mode 100644
index 0000000000..b89398809f
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_cython/__init__.py
@@ -0,0 +1,28 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/python/src/grpc/_cython/adapter_low_test.py b/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py
index 9bab930e56..9bab930e56 100644
--- a/src/python/src/grpc/_cython/adapter_low_test.py
+++ b/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py
diff --git a/src/python/src/grpc/_cython/cygrpc_test.py b/src/python/grpcio_test/grpc_test/_cython/cygrpc_test.py
index 838e1e2254..637506b42e 100644
--- a/src/python/src/grpc/_cython/cygrpc_test.py
+++ b/src/python/grpcio_test/grpc_test/_cython/cygrpc_test.py
@@ -31,7 +31,7 @@ import time
import unittest
from grpc._cython import cygrpc
-from grpc._cython import test_utilities
+from grpc_test._cython import test_utilities
class TypeSmokeTest(unittest.TestCase):
@@ -76,14 +76,6 @@ class TypeSmokeTest(unittest.TestCase):
timespec = cygrpc.Timespec(now)
self.assertAlmostEqual(now, float(timespec), places=8)
- def testClientCredentialsUpDown(self):
- credentials = cygrpc.client_credentials_fake_transport_security()
- del credentials
-
- def testServerCredentialsUpDown(self):
- credentials = cygrpc.server_credentials_fake_transport_security()
- del credentials
-
def testCompletionQueueUpDown(self):
completion_queue = cygrpc.CompletionQueue()
del completion_queue
@@ -96,12 +88,6 @@ class TypeSmokeTest(unittest.TestCase):
channel = cygrpc.Channel('[::]:0', cygrpc.ChannelArgs([]))
del channel
- def testSecureChannelUpDown(self):
- channel = cygrpc.Channel(
- '[::]:0', cygrpc.ChannelArgs([]),
- cygrpc.client_credentials_fake_transport_security())
- del channel
-
@unittest.skip('TODO(atash): undo skip after #2229 is merged')
def testServerStartNoExplicitShutdown(self):
server = cygrpc.Server()
diff --git a/src/python/src/grpc/_cython/test_utilities.py b/src/python/grpcio_test/grpc_test/_cython/test_utilities.py
index 21ea3075b4..21ea3075b4 100644
--- a/src/python/src/grpc/_cython/test_utilities.py
+++ b/src/python/grpcio_test/grpc_test/_cython/test_utilities.py
diff --git a/src/python/interop/setup.py b/src/python/grpcio_test/grpc_test/_junkdrawer/__init__.py
index 75012b0d8f..7086519106 100644
--- a/src/python/interop/setup.py
+++ b/src/python/grpcio_test/grpc_test/_junkdrawer/__init__.py
@@ -27,31 +27,4 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""A setup module for the GRPC Python interop testing package."""
-import setuptools
-
-_PACKAGES = (
- 'interop',
-)
-
-_PACKAGE_DIRECTORIES = {
- 'interop': 'interop',
-}
-
-_PACKAGE_DATA = {
- 'interop': [
- 'credentials/ca.pem', 'credentials/server1.key',
- 'credentials/server1.pem',]
-}
-
-_INSTALL_REQUIRES = ['oauth2client>=1.4.7', 'grpcio>=0.10.0a0']
-
-setuptools.setup(
- name='interop',
- version='0.0.1',
- packages=_PACKAGES,
- package_dir=_PACKAGE_DIRECTORIES,
- package_data=_PACKAGE_DATA,
- install_requires=_INSTALL_REQUIRES
-)
diff --git a/src/python/src/grpc/_junkdrawer/math_pb2.py b/src/python/grpcio_test/grpc_test/_junkdrawer/math_pb2.py
index 20165955b4..20165955b4 100644
--- a/src/python/src/grpc/_junkdrawer/math_pb2.py
+++ b/src/python/grpcio_test/grpc_test/_junkdrawer/math_pb2.py
diff --git a/src/python/src/grpc/_junkdrawer/stock_pb2.py b/src/python/grpcio_test/grpc_test/_junkdrawer/stock_pb2.py
index eef18f82d6..eef18f82d6 100644
--- a/src/python/src/grpc/_junkdrawer/stock_pb2.py
+++ b/src/python/grpcio_test/grpc_test/_junkdrawer/stock_pb2.py
diff --git a/src/python/grpcio_test/grpc_test/_links/__init__.py b/src/python/grpcio_test/grpc_test/_links/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_links/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/_links/_lonely_invocation_link_test.py b/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py
index 3d629f4387..abe240e07a 100644
--- a/src/python/src/grpc/_links/_lonely_invocation_link_test.py
+++ b/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py
@@ -33,10 +33,10 @@ import unittest
from grpc._adapter import _intermediary_low
from grpc._links import invocation
-from grpc.framework.common import test_constants
from grpc.framework.interfaces.links import links
-from grpc.framework.interfaces.links import test_cases
-from grpc.framework.interfaces.links import test_utilities
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.links import test_cases
+from grpc_test.framework.interfaces.links import test_utilities
_NULL_BEHAVIOR = lambda unused_argument: None
diff --git a/src/python/src/grpc/_links/_proto_scenarios.py b/src/python/grpcio_test/grpc_test/_links/_proto_scenarios.py
index ccf3c29782..0d74d66297 100644
--- a/src/python/src/grpc/_links/_proto_scenarios.py
+++ b/src/python/grpcio_test/grpc_test/_links/_proto_scenarios.py
@@ -32,7 +32,8 @@
import abc
import threading
-from grpc._junkdrawer import math_pb2
+from grpc_test._junkdrawer import math_pb2
+from grpc_test.framework.common import test_constants
class ProtoScenario(object):
@@ -219,10 +220,9 @@ class BidirectionallyUnaryScenario(ProtoScenario):
class BidirectionallyStreamingScenario(ProtoScenario):
"""A scenario that transmits no protocol buffers in either direction."""
- _STREAM_LENGTH = 200
_REQUESTS = tuple(
math_pb2.DivArgs(dividend=59 + index, divisor=7 + index)
- for index in range(_STREAM_LENGTH))
+ for index in range(test_constants.STREAM_LENGTH))
def __init__(self):
self._lock = threading.Lock()
diff --git a/src/python/src/grpc/_links/_transmission_test.py b/src/python/grpcio_test/grpc_test/_links/_transmission_test.py
index 3eeec03f46..9cdc9620f0 100644
--- a/src/python/src/grpc/_links/_transmission_test.py
+++ b/src/python/grpcio_test/grpc_test/_links/_transmission_test.py
@@ -32,13 +32,14 @@
import unittest
from grpc._adapter import _intermediary_low
-from grpc._links import _proto_scenarios
from grpc._links import invocation
from grpc._links import service
-from grpc.framework.common import test_constants
from grpc.framework.interfaces.links import links
-from grpc.framework.interfaces.links import test_cases
-from grpc.framework.interfaces.links import test_utilities
+from grpc_test import test_common
+from grpc_test._links import _proto_scenarios
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.links import test_cases
+from grpc_test.framework.interfaces.links import test_utilities
_IDENTITY = lambda x: x
@@ -94,12 +95,11 @@ class TransmissionTest(test_cases.TransmissionTest, unittest.TestCase):
return _intermediary_low.Code.OK, 'An exuberant test "details" message!'
def assertMetadataTransmitted(self, original_metadata, transmitted_metadata):
- # we need to filter out any additional metadata added in transmitted_metadata
- # since implementations are allowed to add to what is sent (in any position)
- keys, _ = zip(*original_metadata)
- self.assertSequenceEqual(
- original_metadata,
- [x for x in transmitted_metadata if x[0] in keys])
+ self.assertTrue(
+ test_common.metadata_transmitted(
+ original_metadata, transmitted_metadata),
+ '%s erroneously transmitted as %s' % (
+ original_metadata, transmitted_metadata))
class RoundTripTest(unittest.TestCase):
diff --git a/src/python/grpcio_test/grpc_test/early_adopter/__init__.py b/src/python/grpcio_test/grpc_test/early_adopter/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/early_adopter/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/early_adopter/implementations_test.py b/src/python/grpcio_test/grpc_test/early_adopter/implementations_test.py
index 49f0e949c4..611637e8b8 100644
--- a/src/python/src/grpc/early_adopter/implementations_test.py
+++ b/src/python/grpcio_test/grpc_test/early_adopter/implementations_test.py
@@ -35,7 +35,7 @@ import unittest
from grpc.early_adopter import implementations
from grpc.framework.alpha import utilities
-from grpc._junkdrawer import math_pb2
+from grpc_test._junkdrawer import math_pb2
SERVICE_NAME = 'math.Math'
diff --git a/src/python/grpcio_test/grpc_test/framework/__init__.py b/src/python/grpcio_test/grpc_test/framework/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio_test/grpc_test/framework/base/__init__.py b/src/python/grpcio_test/grpc_test/framework/base/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/base/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/base/implementations_test.py b/src/python/grpcio_test/grpc_test/framework/base/implementations_test.py
index 72087f4456..5a7d1398fd 100644
--- a/src/python/src/grpc/framework/base/implementations_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/base/implementations_test.py
@@ -32,9 +32,9 @@
import unittest
from grpc.framework.base import implementations
-from grpc.framework.base import interfaces_test_case
from grpc.framework.base import util
from grpc.framework.foundation import logging_pool
+from grpc_test.framework.base import interfaces_test_case
POOL_MAX_WORKERS = 10
DEFAULT_TIMEOUT = 30
diff --git a/src/python/src/grpc/framework/base/interfaces_test_case.py b/src/python/grpcio_test/grpc_test/framework/base/interfaces_test_case.py
index dec10c2924..be775ad4e0 100644
--- a/src/python/src/grpc/framework/base/interfaces_test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/base/interfaces_test_case.py
@@ -35,8 +35,8 @@ import time
from grpc.framework.base import interfaces
from grpc.framework.base import util
from grpc.framework.foundation import stream
-from grpc.framework.foundation import stream_testing
from grpc.framework.foundation import stream_util
+from grpc_test.framework.foundation import stream_testing
TICK = 0.1
SMALL_TIMEOUT = TICK * 50
diff --git a/src/python/grpcio_test/grpc_test/framework/common/__init__.py b/src/python/grpcio_test/grpc_test/framework/common/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/common/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/common/test_constants.py b/src/python/grpcio_test/grpc_test/framework/common/test_constants.py
index 237b8754ed..3126d0d82c 100644
--- a/src/python/src/grpc/framework/common/test_constants.py
+++ b/src/python/grpcio_test/grpc_test/framework/common/test_constants.py
@@ -35,3 +35,9 @@ SHORT_TIMEOUT = 4
# Absurdly large value for maximum duration in seconds for should-not-time-out
# RPCs made during tests.
LONG_TIMEOUT = 3000
+
+# The number of payloads to transmit in streaming tests.
+STREAM_LENGTH = 200
+
+# The size of thread pools to use in tests.
+POOL_SIZE = 10
diff --git a/src/python/src/grpc/framework/common/test_control.py b/src/python/grpcio_test/grpc_test/framework/common/test_control.py
index 3960c4e649..3960c4e649 100644
--- a/src/python/src/grpc/framework/common/test_control.py
+++ b/src/python/grpcio_test/grpc_test/framework/common/test_control.py
diff --git a/src/python/src/grpc/framework/common/test_coverage.py b/src/python/grpcio_test/grpc_test/framework/common/test_coverage.py
index a7ed3582c4..a7ed3582c4 100644
--- a/src/python/src/grpc/framework/common/test_coverage.py
+++ b/src/python/grpcio_test/grpc_test/framework/common/test_coverage.py
diff --git a/src/python/grpcio_test/grpc_test/framework/face/__init__.py b/src/python/grpcio_test/grpc_test/framework/face/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/face/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/face/_test_case.py b/src/python/grpcio_test/grpc_test/framework/face/_test_case.py
index 642d500628..486b6e630e 100644
--- a/src/python/src/grpc/framework/face/_test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/_test_case.py
@@ -30,9 +30,9 @@
"""Common lifecycle code for in-memory-ticket-exchange Face-layer tests."""
from grpc.framework.face import implementations
-from grpc.framework.face.testing import base_util
-from grpc.framework.face.testing import test_case
from grpc.framework.foundation import logging_pool
+from grpc_test.framework.face.testing import base_util
+from grpc_test.framework.face.testing import test_case
_TIMEOUT = 3
_MAXIMUM_POOL_SIZE = 10
diff --git a/src/python/src/grpc/framework/face/blocking_invocation_inline_service_test.py b/src/python/grpcio_test/grpc_test/framework/face/blocking_invocation_inline_service_test.py
index 763f0f0edc..8674666418 100644
--- a/src/python/src/grpc/framework/face/blocking_invocation_inline_service_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/blocking_invocation_inline_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc.framework.face import _test_case
-from grpc.framework.face.testing import blocking_invocation_inline_service_test_case as test_case
+from grpc_test.framework.face import _test_case
+from grpc_test.framework.face.testing import blocking_invocation_inline_service_test_case as test_case
class BlockingInvocationInlineServiceTest(
diff --git a/src/python/src/grpc/framework/face/event_invocation_synchronous_event_service_test.py b/src/python/grpcio_test/grpc_test/framework/face/event_invocation_synchronous_event_service_test.py
index e1ab3cf711..dca373ef7c 100644
--- a/src/python/src/grpc/framework/face/event_invocation_synchronous_event_service_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/event_invocation_synchronous_event_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc.framework.face import _test_case
-from grpc.framework.face.testing import event_invocation_synchronous_event_service_test_case as test_case
+from grpc_test.framework.face import _test_case
+from grpc_test.framework.face.testing import event_invocation_synchronous_event_service_test_case as test_case
class EventInvocationSynchronousEventServiceTest(
diff --git a/src/python/src/grpc/framework/face/future_invocation_asynchronous_event_service_test.py b/src/python/grpcio_test/grpc_test/framework/face/future_invocation_asynchronous_event_service_test.py
index 2d13bb911d..99fdf18123 100644
--- a/src/python/src/grpc/framework/face/future_invocation_asynchronous_event_service_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/future_invocation_asynchronous_event_service_test.py
@@ -31,8 +31,8 @@
import unittest
-from grpc.framework.face import _test_case
-from grpc.framework.face.testing import future_invocation_asynchronous_event_service_test_case as test_case
+from grpc_test.framework.face import _test_case
+from grpc_test.framework.face.testing import future_invocation_asynchronous_event_service_test_case as test_case
class FutureInvocationAsynchronousEventServiceTest(
diff --git a/src/python/grpcio_test/grpc_test/framework/face/testing/__init__.py b/src/python/grpcio_test/grpc_test/framework/face/testing/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/face/testing/base_util.py b/src/python/grpcio_test/grpc_test/framework/face/testing/base_util.py
index 1df1529b27..1df1529b27 100644
--- a/src/python/src/grpc/framework/face/testing/base_util.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/base_util.py
diff --git a/src/python/src/grpc/framework/face/testing/blocking_invocation_inline_service_test_case.py b/src/python/grpcio_test/grpc_test/framework/face/testing/blocking_invocation_inline_service_test_case.py
index e57ee00104..7e1158f96b 100644
--- a/src/python/src/grpc/framework/face/testing/blocking_invocation_inline_service_test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/blocking_invocation_inline_service_test_case.py
@@ -34,11 +34,11 @@ import abc
import unittest # pylint: disable=unused-import
from grpc.framework.face import exceptions
-from grpc.framework.face.testing import control
-from grpc.framework.face.testing import coverage
-from grpc.framework.face.testing import digest
-from grpc.framework.face.testing import stock_service
-from grpc.framework.face.testing import test_case
+from grpc_test.framework.face.testing import control
+from grpc_test.framework.face.testing import coverage
+from grpc_test.framework.face.testing import digest
+from grpc_test.framework.face.testing import stock_service
+from grpc_test.framework.face.testing import test_case
_TIMEOUT = 3
_LONG_TIMEOUT = 45
diff --git a/src/python/src/grpc/framework/face/testing/callback.py b/src/python/grpcio_test/grpc_test/framework/face/testing/callback.py
index d0e63c8c56..d0e63c8c56 100644
--- a/src/python/src/grpc/framework/face/testing/callback.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/callback.py
diff --git a/src/python/src/grpc/framework/face/testing/control.py b/src/python/grpcio_test/grpc_test/framework/face/testing/control.py
index 3960c4e649..3960c4e649 100644
--- a/src/python/src/grpc/framework/face/testing/control.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/control.py
diff --git a/src/python/src/grpc/framework/face/testing/coverage.py b/src/python/grpcio_test/grpc_test/framework/face/testing/coverage.py
index f3aca113fe..f3aca113fe 100644
--- a/src/python/src/grpc/framework/face/testing/coverage.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/coverage.py
diff --git a/src/python/src/grpc/framework/face/testing/digest.py b/src/python/grpcio_test/grpc_test/framework/face/testing/digest.py
index db8fcbb018..54ff21779a 100644
--- a/src/python/src/grpc/framework/face/testing/digest.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/digest.py
@@ -38,11 +38,11 @@ from grpc.framework.common import cardinality
from grpc.framework.common import style
from grpc.framework.face import exceptions
from grpc.framework.face import interfaces as face_interfaces
-from grpc.framework.face.testing import control as testing_control # pylint: disable=unused-import
-from grpc.framework.face.testing import interfaces # pylint: disable=unused-import
-from grpc.framework.face.testing import service as testing_service # pylint: disable=unused-import
from grpc.framework.foundation import stream
from grpc.framework.foundation import stream_util
+from grpc_test.framework.face.testing import control as testing_control # pylint: disable=unused-import
+from grpc_test.framework.face.testing import interfaces # pylint: disable=unused-import
+from grpc_test.framework.face.testing import service as testing_service # pylint: disable=unused-import
_IDENTITY = lambda x: x
diff --git a/src/python/src/grpc/framework/face/testing/event_invocation_synchronous_event_service_test_case.py b/src/python/grpcio_test/grpc_test/framework/face/testing/event_invocation_synchronous_event_service_test_case.py
index 0f0b0e3d52..18eed53d6e 100644
--- a/src/python/src/grpc/framework/face/testing/event_invocation_synchronous_event_service_test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/event_invocation_synchronous_event_service_test_case.py
@@ -33,12 +33,12 @@ import abc
import unittest
from grpc.framework.face import interfaces
-from grpc.framework.face.testing import callback as testing_callback
-from grpc.framework.face.testing import control
-from grpc.framework.face.testing import coverage
-from grpc.framework.face.testing import digest
-from grpc.framework.face.testing import stock_service
-from grpc.framework.face.testing import test_case
+from grpc_test.framework.face.testing import callback as testing_callback
+from grpc_test.framework.face.testing import control
+from grpc_test.framework.face.testing import coverage
+from grpc_test.framework.face.testing import digest
+from grpc_test.framework.face.testing import stock_service
+from grpc_test.framework.face.testing import test_case
_TIMEOUT = 3
diff --git a/src/python/src/grpc/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py b/src/python/grpcio_test/grpc_test/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py
index 21bf9a4248..3b42914342 100644
--- a/src/python/src/grpc/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/future_invocation_asynchronous_event_service_test_case.py
@@ -35,13 +35,13 @@ import threading
import unittest
from grpc.framework.face import exceptions
-from grpc.framework.face.testing import control
-from grpc.framework.face.testing import coverage
-from grpc.framework.face.testing import digest
-from grpc.framework.face.testing import stock_service
-from grpc.framework.face.testing import test_case
from grpc.framework.foundation import future
from grpc.framework.foundation import logging_pool
+from grpc_test.framework.face.testing import control
+from grpc_test.framework.face.testing import coverage
+from grpc_test.framework.face.testing import digest
+from grpc_test.framework.face.testing import stock_service
+from grpc_test.framework.face.testing import test_case
_TIMEOUT = 3
_MAXIMUM_POOL_SIZE = 10
diff --git a/src/python/src/grpc/framework/face/testing/interfaces.py b/src/python/grpcio_test/grpc_test/framework/face/testing/interfaces.py
index 5932dabf1e..5932dabf1e 100644
--- a/src/python/src/grpc/framework/face/testing/interfaces.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/interfaces.py
diff --git a/src/python/src/grpc/framework/face/testing/serial.py b/src/python/grpcio_test/grpc_test/framework/face/testing/serial.py
index 47fc5822de..47fc5822de 100644
--- a/src/python/src/grpc/framework/face/testing/serial.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/serial.py
diff --git a/src/python/src/grpc/framework/face/testing/service.py b/src/python/grpcio_test/grpc_test/framework/face/testing/service.py
index bf54d41d66..ee9d6a3da3 100644
--- a/src/python/src/grpc/framework/face/testing/service.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/service.py
@@ -33,7 +33,7 @@ import abc
# interfaces is referenced from specification in this module.
from grpc.framework.face import interfaces as face_interfaces # pylint: disable=unused-import
-from grpc.framework.face.testing import interfaces
+from grpc_test.framework.face.testing import interfaces
class UnaryUnaryTestMethodImplementation(interfaces.Method):
diff --git a/src/python/src/grpc/framework/face/testing/stock_service.py b/src/python/grpcio_test/grpc_test/framework/face/testing/stock_service.py
index 61aaf444a0..0f83ca4db1 100644
--- a/src/python/src/grpc/framework/face/testing/stock_service.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/stock_service.py
@@ -30,11 +30,11 @@
"""Examples of Python implementations of the stock.proto Stock service."""
from grpc.framework.common import cardinality
-from grpc.framework.face.testing import service
from grpc.framework.foundation import abandonment
from grpc.framework.foundation import stream
from grpc.framework.foundation import stream_util
-from grpc._junkdrawer import stock_pb2
+from grpc_test.framework.face.testing import service
+from grpc_test._junkdrawer import stock_pb2
SYMBOL_FORMAT = 'test symbol:%03d'
STREAM_LENGTH = 400
diff --git a/src/python/src/grpc/framework/face/testing/test_case.py b/src/python/grpcio_test/grpc_test/framework/face/testing/test_case.py
index e60e3d1d40..858d5cf7fd 100644
--- a/src/python/src/grpc/framework/face/testing/test_case.py
+++ b/src/python/grpcio_test/grpc_test/framework/face/testing/test_case.py
@@ -33,7 +33,7 @@ import abc
# face_interfaces and interfaces are referenced in specification in this module.
from grpc.framework.face import interfaces as face_interfaces # pylint: disable=unused-import
-from grpc.framework.face.testing import interfaces # pylint: disable=unused-import
+from grpc_test.framework.face.testing import interfaces # pylint: disable=unused-import
class FaceTestCase(object):
diff --git a/src/python/grpcio_test/grpc_test/framework/foundation/__init__.py b/src/python/grpcio_test/grpc_test/framework/foundation/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/foundation/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/foundation/_later_test.py b/src/python/grpcio_test/grpc_test/framework/foundation/_later_test.py
index 6c2459e185..6c2459e185 100644
--- a/src/python/src/grpc/framework/foundation/_later_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/foundation/_later_test.py
diff --git a/src/python/src/grpc/framework/foundation/_logging_pool_test.py b/src/python/grpcio_test/grpc_test/framework/foundation/_logging_pool_test.py
index 452802da6a..452802da6a 100644
--- a/src/python/src/grpc/framework/foundation/_logging_pool_test.py
+++ b/src/python/grpcio_test/grpc_test/framework/foundation/_logging_pool_test.py
diff --git a/src/python/src/grpc/framework/foundation/stream_testing.py b/src/python/grpcio_test/grpc_test/framework/foundation/stream_testing.py
index 098a53d5e7..098a53d5e7 100644
--- a/src/python/src/grpc/framework/foundation/stream_testing.py
+++ b/src/python/grpcio_test/grpc_test/framework/foundation/stream_testing.py
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/__init__.py b/src/python/grpcio_test/grpc_test/framework/interfaces/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/links/__init__.py b/src/python/grpcio_test/grpc_test/framework/interfaces/links/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/links/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/src/grpc/framework/interfaces/links/test_cases.py b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py
index bf1f09d99d..26ca035c44 100644
--- a/src/python/src/grpc/framework/interfaces/links/test_cases.py
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py
@@ -33,9 +33,9 @@
import abc
import unittest # pylint: disable=unused-import
-from grpc.framework.common import test_constants
from grpc.framework.interfaces.links import links
-from grpc.framework.interfaces.links import test_utilities
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.links import test_utilities
def at_least_n_payloads_received_predicate(n):
diff --git a/src/python/src/grpc/framework/interfaces/links/test_utilities.py b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py
index 6c2e3346aa..6c2e3346aa 100644
--- a/src/python/src/grpc/framework/interfaces/links/test_utilities.py
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py
diff --git a/src/python/grpcio_test/grpc_test/test_common.py b/src/python/grpcio_test/grpc_test/test_common.py
new file mode 100644
index 0000000000..f8e1f1e43f
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/test_common.py
@@ -0,0 +1,71 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Common code used throughout tests of gRPC."""
+
+import collections
+
+
+def metadata_transmitted(original_metadata, transmitted_metadata):
+ """Judges whether or not metadata was acceptably transmitted.
+
+ gRPC is allowed to insert key-value pairs into the metadata values given by
+ applications and to reorder key-value pairs with different keys but it is not
+ allowed to alter existing key-value pairs or to reorder key-value pairs with
+ the same key.
+
+ Args:
+ original_metadata: A metadata value used in a test of gRPC.
+ transmitted_metadata: A metadata value corresponding to original_metadata
+ after having been transmitted via gRPC.
+
+ Returns:
+ A boolean indicating whether transmitted_metadata accurately reflects
+ original_metadata after having been transmitted via gRPC.
+ """
+ original = collections.defaultdict(list)
+ for key, value in original_metadata:
+ original[key].append(value)
+ transmitted = collections.defaultdict(list)
+ for key, value in transmitted_metadata:
+ transmitted[key].append(value)
+
+ for key, values in original.iteritems():
+ transmitted_values = transmitted[key]
+ transmitted_iterator = iter(transmitted_values)
+ try:
+ for value in values:
+ while True:
+ transmitted_value = next(transmitted_iterator)
+ if value == transmitted_value:
+ break
+ except StopIteration:
+ return False
+ else:
+ return True
diff --git a/src/python/grpcio_test/requirements.txt b/src/python/grpcio_test/requirements.txt
new file mode 100644
index 0000000000..856198def5
--- /dev/null
+++ b/src/python/grpcio_test/requirements.txt
@@ -0,0 +1,5 @@
+pytest>=2.6
+pytest-cov>=2.0
+pytest-xdist>=1.11
+oauth2client>=1.4.7
+grpcio>=0.10.0a0
diff --git a/src/python/grpcio_test/setup.cfg b/src/python/grpcio_test/setup.cfg
new file mode 100644
index 0000000000..b32d3f5972
--- /dev/null
+++ b/src/python/grpcio_test/setup.cfg
@@ -0,0 +1,3 @@
+[pytest]
+norecursedirs = _cython
+python_files = *_test.py
diff --git a/src/python/grpcio_test/setup.py b/src/python/grpcio_test/setup.py
new file mode 100644
index 0000000000..925c32720f
--- /dev/null
+++ b/src/python/grpcio_test/setup.py
@@ -0,0 +1,79 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""A setup module for the GRPC Python interop testing package."""
+
+import os
+import os.path
+
+import setuptools
+
+# Ensure we're in the proper directory whether or not we're being used by pip.
+os.chdir(os.path.dirname(os.path.abspath(__file__)))
+
+# Break import-style to ensure we can actually find our commands module.
+import commands
+
+_PACKAGES = setuptools.find_packages('.', exclude=['*._cython', '*._cython.*'])
+
+_PACKAGE_DIRECTORIES = {
+ '': '.',
+}
+
+_PACKAGE_DATA = {
+ 'grpc_interop': [
+ 'credentials/ca.pem', 'credentials/server1.key',
+ 'credentials/server1.pem',]
+}
+
+_SETUP_REQUIRES = (
+ 'pytest>=2.6',
+ 'pytest-cov>=2.0',
+ 'pytest-xdist>=1.11',
+)
+
+_INSTALL_REQUIRES = (
+ 'oauth2client>=1.4.7',
+ 'grpcio>=0.10.0a0',
+)
+
+_COMMAND_CLASS = {
+ 'test': commands.RunTests
+}
+
+setuptools.setup(
+ name='grpcio_test',
+ version='0.10.0a0',
+ packages=_PACKAGES,
+ package_dir=_PACKAGE_DIRECTORIES,
+ package_data=_PACKAGE_DATA,
+ install_requires=_INSTALL_REQUIRES + _SETUP_REQUIRES,
+ setup_requires=_SETUP_REQUIRES,
+ cmdclass=_COMMAND_CLASS
+)
diff --git a/src/python/src/.gitignore b/src/python/src/.gitignore
deleted file mode 100644
index 144e501237..0000000000
--- a/src/python/src/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-MANIFEST
-grpcio.egg-info/
-build/
-dist/
diff --git a/src/python/src/MANIFEST.in b/src/python/src/MANIFEST.in
deleted file mode 100644
index 6f32db0548..0000000000
--- a/src/python/src/MANIFEST.in
+++ /dev/null
@@ -1 +0,0 @@
-graft grpc