Repository: microsoft/botbuilder-python
Pull request #2022 (2023-10-04 21:41:01)

Python 3.11 Compatibility
#minor

## Description
- remove deprecation warning in schema
- fix linting issues

## TODO
- another PR needs to be created to update the codebase and pipeline to support Python 3.11
> this would mean uncommenting [this](https://github.com/microsoft/botbuilder-python/blob/aacebo/py-3.11/pipelines/botbuilder-python-ci.yml#L11) and [this](https://github.com/microsoft/botbuilder-python/blob/aacebo/py-3.11/pipelines/botbuilder-python-ci.yml#L27) and updating the [pylint version](https://github.com/microsoft/botbuilder-python/blob/aacebo/py-3.11/pipelines/botbuilder-python-ci.yml#L59) to a version that supports 3.11. This will require you to update the `.pylintrc` and fix the codebase to conform to the new rules. 
- another PR needs to be opened to update dependencies so the packages can be imported into newer projects 


tracyboehrer: @aacebo These are failing the PyLint step:  pylint --rcfile=.pylintrc libraries

Patch:
diff --git a/.pylintrc b/.pylintrc
index d0ec3b74..955005f0 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -7,7 +7,7 @@ extension-pkg-whitelist=
 
 # Add files or directories to the blacklist. They should be base names, not
 # paths.
-ignore=CVS,build,botbuilder-schema,samples,django_tests,Generator,operations,operations_async,schema
+ignore=CVS,build,botbuilder-schema,samples,django_tests,Generator,operations,operations_async,schema,tests
 
 # Add files or directories matching the regex patterns to the blacklist. The
 # regex matches against base names, not paths.
@@ -160,7 +160,8 @@ disable=print-statement,
         no-name-in-module,
         too-many-branches,
         too-many-ancestors,
-        too-many-nested-blocks
+        too-many-nested-blocks,
+        attribute-defined-outside-init
 
 # Enable the message, report, category or checker with the given id(s). You can
 # either give multiple identifier separated by comma (,) or put this option
diff --git a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer.py b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer.py
index 9c09af77..a95ebae9 100644
--- a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer.py
+++ b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer.py
@@ -256,7 +256,6 @@ class LuisRecognizer(Recognizer):
             LuisPredictionOptions, LuisRecognizerOptionsV2, LuisRecognizerOptionsV3
         ] = None,
     ) -> RecognizerResult:
-
         BotAssert.context_not_none(turn_context)
 
         if turn_context.activity.type != ActivityTypes.message:
@@ -277,7 +276,6 @@ class LuisRecognizer(Recognizer):
                 text=utterance, intents={"": IntentScore(score=1.0)}, entities={}
             )
         else:
-
             luis_recognizer = self._build_recognizer(options)
             recognizer_result = await luis_recognizer.recognizer_internal(turn_context)
 
diff --git a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v2.py b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v2.py
index 34d246d9..b58c9b40 100644
--- a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v2.py
+++ b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v2.py
@@ -18,7 +18,6 @@ from .activity_util import ActivityUtil
 
 
 class LuisRecognizerV2(LuisRecognizerInternal):
-
     # The value type for a LUIS trace activity.
     luis_trace_type: str = "https://www.luis.ai/schemas/trace"
 
@@ -43,7 +42,6 @@ class LuisRecognizerV2(LuisRecognizerInternal):
         self._application = luis_application
 
     async def recognizer_internal(self, turn_context: TurnContext):
-
         utterance: str = (
             turn_context.activity.text if turn_context.activity is not None else None
         )
diff --git a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v3.py b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v3.py
index 09cb8594..b487abfb 100644
--- a/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v3.py
+++ b/libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer_v3.py
@@ -102,7 +102,6 @@ class LuisRecognizerV3(LuisRecognizerInternal):
         return recognizer_result
 
     def _build_url(self):
-
         base_uri = (
             self._application.endpoint or "https://westus.api.cognitive.microsoft.com"
         )
@@ -172,7 +171,6 @@ class LuisRecognizerV3(LuisRecognizerInternal):
         return self._map_properties(entities, False)
 
     def _map_properties(self, source, in_instance):
-
         if isinstance(source, (int, float, bool, str)):
             return source
 
diff --git a/libraries/botbuilder-ai/botbuilder/ai/qna/qnamaker.py b/libraries/botbuilder-ai/botbuilder/ai/qna/qnamaker.py
index 18a77521..e0bf9bae 100644
--- a/libraries/botbuilder-ai/botbuilder/ai/qna/qnamaker.py
+++ b/libraries/botbuilder-ai/botbuilder/ai/qna/qnamaker.py
@@ -254,7 +254,6 @@ class QnAMaker(QnAMakerTelemetryClient):
     def _has_matched_answer_in_kb(self, query_results: [QueryResult]) -> bool:
         if query_results:
             if query_results[0].id != -1:
-
                 return True
 
         return False
diff --git a/libraries/botbuilder-azure/botbuilder/azure/blob_storage.py b/libraries/botbuilder-azure/botbuilder/azure/blob_storage.py
index 02576a04..4ed6793e 100644
--- a/libraries/botbuilder-azure/botbuilder/azure/blob_storage.py
+++ b/libraries/botbuilder-azure/botbuilder/azure/blob_storage.py
@@ -143,7 +143,7 @@ class BlobStorage(Storage):
 
         await self._initialize()
 
-        for (name, item) in changes.items():
+        for name, item in changes.items():
             blob_reference = self.__container_client.get_blob_client(name)
 
             e_tag = None
diff --git a/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_partitioned_storage.py b/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_partitioned_storage.py
index db5ae168..982ac597 100644
--- a/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_partitioned_storage.py
+++ b/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_partitioned_storage.py
@@ -146,7 +146,7 @@ class CosmosDbPartitionedStorage(Storage):
 
         await self.initialize()
 
-        for (key, change) in changes.items():
+        for key, change in changes.items():
             e_tag = None
             if isinstance(change, dict):
                 e_tag = change.get("e_tag", None)
diff --git a/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_storage.py b/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_storage.py
index 9a1c89d2..b5e29e65 100644
--- a/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_storage.py
+++ b/libraries/botbuilder-azure/botbuilder/azure/cosmosdb_storage.py
@@ -178,7 +178,7 @@ class CosmosDbStorage(Storage):
             if not self.__container_exists:
                 self.__create_db_and_container()
                 # iterate over the changes
-            for (key, change) in changes.items():
+            for key, change in changes.items():
                 # store the e_tag
                 e_tag = None
                 if isinstance(change, dict):
diff --git a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py
index 1e1b7bdd..15e23e8f 100644
--- a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py
+++ b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py
@@ -910,7 +910,6 @@ class BotFrameworkAdapter(
         magic_code: str = None,
         oauth_app_credentials: AppCredentials = None,  # pylint: disable=unused-argument
     ) -> TokenResponse:
-
         """
         Attempts to retrieve the token for a user that's in a login flow.
 
diff --git a/libraries/botbuilder-core/botbuilder/core/bot_state.py b/libraries/botbuilder-core/botbuilder/core/bot_state.py
index 867fb07e..72a2c2cf 100644
--- a/libraries/botbuilder-core/botbuilder/core/bot_state.py
+++ b/libraries/botbuilder-core/botbuilder/core/bot_state.py
@@ -18,7 +18,6 @@ class CachedBotState:
     """
 
     def __init__(self, state: Dict[str, object] = None):
-
         self.state = state if state is not None else {}
         self.hash = self.compute_hash(state)
 
diff --git a/libraries/botbuilder-core/botbuilder/core/bot_state_set.py b/libraries/botbuilder-core/botbuilder/core/bot_state_set.py
index 99016af4..67d33708 100644
--- a/libraries/botbuilder-core/botbuilder/core/bot_state_set.py
+++ b/libraries/botbuilder-core/botbuilder/core/bot_state_set.py
@@ -1,7 +1,6 @@
 # Copyright (c) Microsoft Corporation. All rights reserved.
 # Licensed under the MIT License.
 
-from asyncio import wait
 from typing import List
 from .bot_state import BotState
 from .turn_context import TurnContext
@@ -19,14 +18,9 @@ class BotStateSet:
         return self
 
     async def load_all(self, turn_context: TurnContext, force: bool = False):
-        await wait(
-            [bot_state.load(turn_context, force) for bot_state in self.bot_states]
-        )
+        for bot_state in self.bot_states:
+            await bot_state.load(turn_context, force)
 
     async def save_all_changes(self, turn_context: TurnContext, force: bool = False):
-        await wait(
-            [
-                bot_state.save_changes(turn_context, force)
-                for bot_state in self.bot_states
-            ]
-        )
+        for bot_state in self.bot_states:
+            await bot_state.save_changes(turn_context, force)
diff --git a/libraries/botbuilder-core/botbuilder/core/inspection/inspection_middleware.py b/libraries/botbuilder-core/botbuilder/core/inspection/inspection_middleware.py
index 02335092..2f84b0ef 100644
--- a/libraries/botbuilder-core/botbuilder/core/inspection/inspection_middleware.py
+++ b/libraries/botbuilder-core/botbuilder/core/inspection/inspection_middleware.py
@@ -29,7 +29,6 @@ class InspectionMiddleware(InterceptionMiddleware):
         conversation_state: ConversationState = None,
         credentials: MicrosoftAppCredentials = None,
     ):
-
         self.inspection_state = inspection_state
         self.inspection_state_accessor = inspection_state.create_property(
             "InspectionSessionByStatus"
@@ -43,13 +42,11 @@ class InspectionMiddleware(InterceptionMiddleware):
 
     async def process_command(self, context: TurnContext) -> Any:
         if context.activity.type == ActivityTypes.message and context.activity.text:
-
             original_text = context.activity.text
             TurnContext.remove_recipient_mention(context.activity)
 
             command = context.activity.text.strip().split(" ")
             if len(command) > 1 and command[0] == InspectionMiddleware._COMMAND:
-
                 if len(command) == 2 and command[1] == "open":
                     await self._process_open_command(context)
                     return True
diff --git a/libraries/botbuilder-core/botbuilder/core/memory_storage.py b/libraries/botbuilder-core/botbuilder/core/memory_storage.py
index b1ec20f7..cc4a04ae 100644
--- a/libraries/botbuilder-core/botbuilder/core/memory_storage.py
+++ b/libraries/botbuilder-core/botbuilder/core/memory_storage.py
@@ -40,7 +40,7 @@ class MemoryStorage(Storage):
             return
         try:
             # iterate over the changes
-            for (key, change) in changes.items():
+            for key, change in changes.items():
                 new_value = deepcopy(change)
                 old_state_etag = None
 
diff --git a/libraries/botbuilder-core/botbuilder/core/middleware_set.py b/libraries/botbuilder-core/botbuilder/core/middleware_set.py
index aaa7f03c..c62873b2 100644
--- a/libraries/botbuilder-core/botbuilder/core/middleware_set.py
+++ b/libraries/botbuilder-core/botbuilder/core/middleware_set.py
@@ -45,7 +45,7 @@ class MiddlewareSet(Middleware):
         :param middleware :
         :return:
         """
-        for (idx, mid) in enumerate(middleware):
+        for idx, mid in enumerate(middleware):
             if hasattr(mid, "on_turn") and callable(mid.on_turn):
                 self._middleware.append(mid)
                 return self
diff --git a/libraries/botbuilder-core/botbuilder/core/skills/skill_handler.py b/libraries/botbuilder-core/botbuilder/core/skills/skill_handler.py
index 476ce284..8ea67e18 100644
--- a/libraries/botbuilder-core/botbuilder/core/skills/skill_handler.py
+++ b/libraries/botbuilder-core/botbuilder/core/skills/skill_handler.py
@@ -20,7 +20,6 @@ from .conversation_id_factory import ConversationIdFactoryBase
 
 
 class SkillHandler(ChannelServiceHandler):
-
     SKILL_CONVERSATION_REFERENCE_KEY = (
         "botbuilder.core.skills.SkillConversationReference"
     )
diff --git a/libraries/botbuilder-core/botbuilder/core/streaming/bot_framework_http_adapter_base.py b/libraries/botbuilder-core/botbuilder/core/streaming/bot_framework_http_adapter_base.py
index 86bd9246..73b8331b 100644
--- a/libraries/botbuilder-core/botbuilder/core/streaming/bot_framework_http_adapter_base.py
+++ b/libraries/botbuilder-core/botbuilder/core/streaming/bot_framework_http_adapter_base.py
@@ -89,7 +89,7 @@ class BotFrameworkHttpAdapterBase(BotFrameworkAdapter, StreamingActivityProcesso
         return not activity.service_url.startswith("https")
 
     async def process_outgoing_activity(
-        self, turn_context: TurnContext, activity: Activity
+        self, _turn_context: TurnContext, activity: Activity
     ) -> ResourceResponse:
         if not activity:
             raise TypeError(
diff --git a/libraries/botbuilder-core/botbuilder/core/teams/teams_info.py b/libraries/botbuilder-core/botbuilder/core/teams/teams_info.py
index c2a84a43..2cd9ee0c 100644
--- a/libraries/botbuilder-core/botbuilder/core/teams/teams_info.py
+++ b/libraries/botbuilder-core/botbuilder/core/teams/teams_info.py
@@ -141,7 +141,6 @@ class TeamsInfo:
     async def get_paged_members(
         turn_context: TurnContext, continuation_token: str = None, page_size: int = None
     ) -> List[TeamsPagedMembersResult]:
-
         team_id = TeamsInfo.get_team_id(turn_context)
         if not team_id:
             conversation_id = turn_context.activity.conversation.id
diff --git a/libraries/botbuilder-core/botbuilder/core/turn_context.py b/libraries/botbuilder-core/botbuilder/core/turn_context.py
index b8799a02..2b4d688a 100644
--- a/libraries/botbuilder-core/botbuilder/core/turn_context.py
+++ b/libraries/botbuilder-core/botbuilder/core/turn_context.py
@@ -18,7 +18,6 @@ from .re_escape import escape
 
 
 class TurnContext:
-
     # Same constant as in the BF Adapter, duplicating here to avoid circular dependency
     _INVOKE_RESPONSE_KEY = "BotFrameworkAdapter.InvokeResponse"
 
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/choices/find.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/choices/find.py
index 4f37ce45..b3b3c6b9 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/choices/find.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/choices/find.py
@@ -101,7 +101,6 @@ class Find:
         )
 
         for entry in sorted_values:
-
             # Find all matches for a value
             # - To match "last one" in "the last time I chose the last one" we need
             #   to re-search the string starting from the end of the previous match.
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_container.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_container.py
index a0e2f04e..1e0a6267 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_container.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_container.py
@@ -65,7 +65,6 @@ class DialogContainer(Dialog, ABC):
 
         # Trace unhandled "versionChanged" events.
         if not handled and dialog_event.name == DialogEvents.version_changed:
-
             trace_message = (
                 f"Unhandled dialog event: {dialog_event.name}. Active Dialog: "
                 f"{dialog_context.active_dialog.id}"
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_events.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_events.py
index d3d0cb4a..4de7ed99 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_events.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/dialog_events.py
@@ -5,7 +5,6 @@ from enum import Enum
 
 
 class DialogEvents(str, Enum):
-
     begin_dialog = "beginDialog"
     reprompt_dialog = "repromptDialog"
     cancel_dialog = "cancelDialog"
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/dialog_state_manager.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/dialog_state_manager.py
index c123f2cc..c1bf6c10 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/dialog_state_manager.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/dialog_state_manager.py
@@ -36,7 +36,6 @@ BUILTIN_TYPES = list(filter(lambda x: not x.startswith("_"), dir(builtins)))
 # PathResolvers allow for shortcut behavior for mapping things like $foo -> dialog.foo.
 # </summary>
 class DialogStateManager:
-
     SEPARATORS = [",", "["]
 
     def __init__(
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/path_resolvers/at_path_resolver.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/path_resolvers/at_path_resolver.py
index 91bbb656..0cc1ccc7 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/path_resolvers/at_path_resolver.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/path_resolvers/at_path_resolver.py
@@ -5,7 +5,6 @@ from .alias_path_resolver import AliasPathResolver
 
 
 class AtPathResolver(AliasPathResolver):
-
     _DELIMITERS = [".", "["]
 
     def __init__(self):
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/scopes/class_memory_scope.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/scopes/class_memory_scope.py
index 1589ac15..d5592e23 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/scopes/class_memory_scope.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/memory/scopes/class_memory_scope.py
@@ -41,7 +41,7 @@ class ClassMemoryScope(MemoryScope):
                     if hasattr(prop_value, "try_get_value"):
                         clone[prop] = prop_value.try_get_value(dialog_context.state)
                     elif hasattr(prop_value, "__dict__") and not isinstance(
-                        prop_value, type
+                        prop_value, type(prop_value)
                     ):
                         clone[prop] = ClassMemoryScope._bind_to_dialog_context(
                             prop_value, dialog_context
diff --git a/libraries/botbuilder-dialogs/botbuilder/dialogs/waterfall_dialog.py b/libraries/botbuilder-dialogs/botbuilder/dialogs/waterfall_dialog.py
index 570b5b34..02dfbbbe 100644
--- a/libraries/botbuilder-dialogs/botbuilder/dialogs/waterfall_dialog.py
+++ b/libraries/botbuilder-dialogs/botbuilder/dialogs/waterfall_dialog.py
@@ -44,7 +44,6 @@ class WaterfallDialog(Dialog):
     async def begin_dialog(
         self, dialog_context: DialogContext, options: object = None
     ) -> DialogTurnResult:
-
         if not dialog_context:
             raise TypeError("WaterfallDialog.begin_dialog(): dc cannot be None.")
 
@@ -113,7 +112,6 @@ class WaterfallDialog(Dialog):
             self.telemetry_client.track_event("WaterfallCancel", properties)
         else:
             if reason is DialogReason.EndCalled:
-
                 instance_id = str(instance.state[self.PersistedInstanceId])
                 properties = {"DialogId": self.id, "InstanceId": instance_id}
                 self.telemetry_client.track_event("WaterfallComplete", properties)
diff --git a/libraries/botbuilder-integration-aiohttp/botbuilder/integration/aiohttp/skills/skill_http_client.py b/libraries/botbuilder-integration-aiohttp/botbuilder/integration/aiohttp/skills/skill_http_client.py
index 6f3e2a21..542287af 100644
--- a/libraries/botbuilder-integration-aiohttp/botbuilder/integration/aiohttp/skills/skill_http_client.py
+++ b/libraries/botbuilder-integration-aiohttp/botbuilder/integration/aiohttp/skills/skill_http_client.py
@@ -45,7 +45,6 @@ class SkillHttpClient(BotFrameworkHttpClient):
         activity: Activity,
         originating_audience: str = None,
     ) -> InvokeResponse:
-
         if originating_audience is None:
             originating_audience = (
                 GovernmentConstants.TO_CHANNEL_FROM_BOT_OAUTH_SCOPE
diff --git a/libraries/botbuilder-integration-aiohttp/setup.py b/libraries/botbuilder-integration-aiohttp/setup.py
index ddedc2e4..7889c475 100644
--- a/libraries/botbuilder-integration-aiohttp/setup.py
+++ b/libraries/botbuilder-integration-aiohttp/setup.py
@@ -9,7 +9,7 @@ REQUIRES = [
     "botbuilder-schema==4.15.0",
     "botframework-connector==4.15.0",
     "botbuilder-core==4.15.0",
-    "yarl<=1.4.2",
+    "yarl>=1.8.1",
     "aiohttp==3.8.4",
 ]
 
diff --git a/libraries/botbuilder-schema/botbuilder/schema/__init__.py b/libraries/botbuilder-schema/botbuilder/schema/__init__.py
index 082eb28e..24d431b7 100644
--- a/libraries/botbuilder-schema/botbuilder/schema/__init__.py
+++ b/libraries/botbuilder-schema/botbuilder/schema/__init__.py
@@ -77,10 +77,6 @@ from ._sign_in_enums import SignInConstants
 from .callerid_constants import CallerIdConstants
 from .speech_constants import SpeechConstants
 
-warn(
-    "The Bot Framework Python SDK is being retired with final long-term support ending in November 2023, after which this repository will be archived. There will be no further feature development, with only critical security and bug fixes within this repository being undertaken. Existing bots built with this SDK will continue to function. For all new bot development we recommend that you adopt Power Virtual Agents."
-)
-
 __all__ = [
     "Activity",
     "ActivityEventNames",
diff --git a/libraries/botbuilder-schema/botbuilder/schema/_connector_client_enums.py b/libraries/botbuilder-schema/botbuilder/schema/_connector_client_enums.py
index 2c1fbebc..c32031ef 100644
--- a/libraries/botbuilder-schema/botbuilder/schema/_connector_client_enums.py
+++ b/libraries/botbuilder-schema/botbuilder/schema/_connector_client_enums.py
@@ -5,14 +5,12 @@ from enum import Enum
 
 
 class RoleTypes(str, Enum):
-
     user = "user"
     bot = "bot"
     skill = "skill"
 
 
 class ActivityTypes(str, Enum):
-
     message = "message"
     contact_relation_update = "contactRelationUpdate"
     conversation_update = "conversationUpdate"
@@ -34,33 +32,28 @@ class ActivityTypes(str, Enum):
 
 
 class TextFormatTypes(str, Enum):
-
     markdown = "markdown"
     plain = "plain"
     xml = "xml"
 
 
 class AttachmentLayoutTypes(str, Enum):
-
     list = "list"
     carousel = "carousel"
 
 
 class MessageReactionTypes(str, Enum):
-
     like = "like"
     plus_one = "plusOne"
 
 
 class InputHints(str, Enum):
-
     accepting_input = "acceptingInput"
     ignoring_input = "ignoringInput"
     expecting_input = "expectingInput"
 
 
 class ActionTypes(str, Enum):
-
     open_url = "openUrl"
     im_back = "imBack"
     post_back = "postBack"
@@ -74,7 +67,6 @@ class ActionTypes(str, Enum):
 
 
 class EndOfConversationCodes(str, Enum):
-
     unknown = "unknown"
     completed_successfully = "completedSuccessfully"
     user_cancelled = "userCancelled"
@@ -84,14 +76,12 @@ class EndOfConversationCodes(str, Enum):
 
 
 class ActivityImportance(str, Enum):
-
     low = "low"
     normal = "normal"
     high = "high"
 
 
 class DeliveryModes(str, Enum):
-
     normal = "normal"
     notification = "notification"
     expect_replies = "expectReplies"
@@ -99,19 +89,16 @@ class DeliveryModes(str, Enum):
 
 
 class ContactRelationUpdateActionTypes(str, Enum):
-
     add = "add"
     remove = "remove"
 
 
 class InstallationUpdateActionTypes(str, Enum):
-
     add = "add"
     remove = "remove"
 
 
 class SemanticActionStates(str, Enum):
-
     start_action = "start"
     continue_action = "continue"
     done_action = "done"
diff --git a/libraries/botbuilder-schema/botbuilder/schema/_models_py3.py b/libraries/botbuilder-schema/botbuilder/schema/_models_py3.py
index 43fc72e5..523204c0 100644
--- a/libraries/botbuilder-schema/botbuilder/schema/_models_py3.py
+++ b/libraries/botbuilder-schema/botbuilder/schema/_models_py3.py
@@ -1565,7 +1565,6 @@ class ErrorResponseException(HttpOperationError):
     """
 
     def __init__(self, deserialize, response, *args):
-
         super(ErrorResponseException, self).__init__(
             deserialize, response, "ErrorResponse", *args
         )
diff --git a/libraries/botbuilder-schema/botbuilder/schema/_sign_in_enums.py b/libraries/botbuilder-schema/botbuilder/schema/_sign_in_enums.py
index 015e5a73..3bc6f6b6 100644
--- a/libraries/botbuilder-schema/botbuilder/schema/_sign_in_enums.py
+++ b/libraries/botbuilder-schema/botbuilder/schema/_sign_in_enums.py
@@ -5,7 +5,6 @@ from enum import Enum
 
 
 class SignInConstants(str, Enum):
-
     # Name for the signin invoke to verify the 6-digit authentication code as part of sign-in.
     verify_state_operation_name = "signin/verifyState"
     # Name for signin invoke to perform a token exchange.
diff --git a/libraries/botbuilder-schema/setup.py b/libraries/botbuilder-schema/setup.py
index d977fd73..3f056bc7 100644
--- a/libraries/botbuilder-schema/setup.py
+++ b/libraries/botbuilder-schema/setup.py
@@ -6,8 +6,7 @@ from setuptools import setup
 
 NAME = "botbuilder-schema"
 VERSION = os.environ["packageVersion"] if "packageVersion" in os.environ else "4.15.0"
-REQUIRES = ["msrest==0.6.*",
-            "urllib3<2.0.0"]
+REQUIRES = ["msrest==0.6.*", "urllib3<2.0.0"]
 
 root = os.path.abspath(os.path.dirname(__file__))
 
diff --git a/libraries/botframework-connector/azure_bdist_wheel.py b/libraries/botframework-connector/azure_bdist_wheel.py
index a0e0049b..d33af36b 100644
--- a/libraries/botframework-connector/azure_bdist_wheel.py
+++ b/libraries/botframework-connector/azure_bdist_wheel.py
@@ -75,7 +75,6 @@ def safer_version(version):
 
 
 class bdist_wheel(Command):
-
     description = "create a wheel distribution"
 
     user_options = [
@@ -518,9 +517,9 @@ class bdist_wheel(Command):
 from distutils import log as logger
 import os.path
 
+
 # from wheel.bdist_wheel import bdist_wheel
 class azure_bdist_wheel(bdist_wheel):
-
     description = "Create an Azure wheel distribution"
 
     user_options = bdist_wheel.user_options + [
diff --git a/libraries/botframework-connector/botframework/connector/_configuration.py b/libraries/botframework-connector/botframework/connector/_configuration.py
index ce9a8c1d..5dde8f9f 100644
--- a/libraries/botframework-connector/botframework/connector/_configuration.py
+++ b/libraries/botframework-connector/botframework/connector/_configuration.py
@@ -22,7 +22,6 @@ class ConnectorClientConfiguration(Configuration):
     """
 
     def __init__(self, credentials, base_url=None):
-
         if credentials is None:
             raise ValueError("Parameter 'credentials' must not be None.")
         if not base_url:
diff --git a/libraries/botframework-connector/botframework/connector/aio/operations_async/_attachments_operations_async.py b/libraries/botframework-connector/botframework/connector/aio/operations_async/_attachments_operations_async.py
index 1bb926cf..7694e1e6 100644
--- a/libraries/botframework-connector/botframework/connector/aio/operations_async/_attachments_operations_async.py
+++ b/libraries/botframework-connector/botframework/connector/aio/operations_async/_attachments_operations_async.py
@@ -26,7 +26,6 @@ class AttachmentsOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer) -> None:
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/aio/operations_async/_conversations_operations_async.py b/libraries/botframework-connector/botframework/connector/aio/operations_async/_conversations_operations_async.py
index a982ec67..e6416e42 100644
--- a/libraries/botframework-connector/botframework/connector/aio/operations_async/_conversations_operations_async.py
+++ b/libraries/botframework-connector/botframework/connector/aio/operations_async/_conversations_operations_async.py
@@ -27,7 +27,6 @@ class ConversationsOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer) -> None:
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/async_mixin/async_mixin.py b/libraries/botframework-connector/botframework/connector/async_mixin/async_mixin.py
index c8a913df..31464254 100644
--- a/libraries/botframework-connector/botframework/connector/async_mixin/async_mixin.py
+++ b/libraries/botframework-connector/botframework/connector/async_mixin/async_mixin.py
@@ -85,7 +85,6 @@ class AsyncServiceClientMixin:
 
         response = None
         try:
-
             try:
                 future = loop.run_in_executor(
                     None,
diff --git a/libraries/botframework-connector/botframework/connector/auth/authentication_constants.py b/libraries/botframework-connector/botframework/connector/auth/authentication_constants.py
index 8a10a2bc..6cda3226 100644
--- a/libraries/botframework-connector/botframework/connector/auth/authentication_constants.py
+++ b/libraries/botframework-connector/botframework/connector/auth/authentication_constants.py
@@ -5,7 +5,6 @@ from abc import ABC
 
 
 class AuthenticationConstants(ABC):
-
     # TO CHANNEL FROM BOT: Login URL
     #
     # DEPRECATED: DO NOT USE
diff --git a/libraries/botframework-connector/botframework/connector/auth/enterprise_channel_validation.py b/libraries/botframework-connector/botframework/connector/auth/enterprise_channel_validation.py
index 7abd054a..0e6354e7 100644
--- a/libraries/botframework-connector/botframework/connector/auth/enterprise_channel_validation.py
+++ b/libraries/botframework-connector/botframework/connector/auth/enterprise_channel_validation.py
@@ -15,7 +15,6 @@ from .verify_options import VerifyOptions
 
 
 class EnterpriseChannelValidation(ABC):
-
     TO_BOT_FROM_ENTERPRISE_CHANNEL_TOKEN_VALIDATION_PARAMETERS = VerifyOptions(
         issuer=[AuthenticationConstants.TO_BOT_FROM_CHANNEL_TOKEN_ISSUER],
         audience=None,
diff --git a/libraries/botframework-connector/botframework/connector/auth/government_channel_validation.py b/libraries/botframework-connector/botframework/connector/auth/government_channel_validation.py
index 5d7868b7..c7438865 100644
--- a/libraries/botframework-connector/botframework/connector/auth/government_channel_validation.py
+++ b/libraries/botframework-connector/botframework/connector/auth/government_channel_validation.py
@@ -13,7 +13,6 @@ from .verify_options import VerifyOptions
 
 
 class GovernmentChannelValidation(ABC):
-
     OPEN_ID_METADATA_ENDPOINT = ""
 
     TO_BOT_FROM_GOVERNMENT_CHANNEL_TOKEN_VALIDATION_PARAMETERS = VerifyOptions(
diff --git a/libraries/botframework-connector/botframework/connector/auth/jwt_token_validation.py b/libraries/botframework-connector/botframework/connector/auth/jwt_token_validation.py
index e83d6ccf..e4cbddd3 100644
--- a/libraries/botframework-connector/botframework/connector/auth/jwt_token_validation.py
+++ b/libraries/botframework-connector/botframework/connector/auth/jwt_token_validation.py
@@ -21,7 +21,6 @@ from .channel_provider import ChannelProvider
 
 
 class JwtTokenValidation:
-
     # TODO remove the default value on channel_service
     @staticmethod
     async def authenticate_request(
diff --git a/libraries/botframework-connector/botframework/connector/connector_client.py b/libraries/botframework-connector/botframework/connector/connector_client.py
index db503016..1a0c2947 100644
--- a/libraries/botframework-connector/botframework/connector/connector_client.py
+++ b/libraries/botframework-connector/botframework/connector/connector_client.py
@@ -46,7 +46,6 @@ class ConnectorClient(SDKClient):
     """
 
     def __init__(self, credentials, base_url=None):
-
         self.config = ConnectorClientConfiguration(credentials, base_url)
         super(ConnectorClient, self).__init__(self.config.credentials, self.config)
 
diff --git a/libraries/botframework-connector/botframework/connector/operations/_attachments_operations.py b/libraries/botframework-connector/botframework/connector/operations/_attachments_operations.py
index d7d6287e..1f3b2f7c 100644
--- a/libraries/botframework-connector/botframework/connector/operations/_attachments_operations.py
+++ b/libraries/botframework-connector/botframework/connector/operations/_attachments_operations.py
@@ -26,7 +26,6 @@ class AttachmentsOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer):
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/operations/_conversations_operations.py b/libraries/botframework-connector/botframework/connector/operations/_conversations_operations.py
index a4c37f6f..6834f7a2 100644
--- a/libraries/botframework-connector/botframework/connector/operations/_conversations_operations.py
+++ b/libraries/botframework-connector/botframework/connector/operations/_conversations_operations.py
@@ -27,7 +27,6 @@ class ConversationsOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer):
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/teams/operations/teams_operations.py b/libraries/botframework-connector/botframework/connector/teams/operations/teams_operations.py
index 994a5c70..ff1bdb18 100644
--- a/libraries/botframework-connector/botframework/connector/teams/operations/teams_operations.py
+++ b/libraries/botframework-connector/botframework/connector/teams/operations/teams_operations.py
@@ -23,7 +23,6 @@ class TeamsOperations(object):
     models = models
 
     def __init__(self, client, config, serializer, deserializer):
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/teams/teams_connector_client.py b/libraries/botframework-connector/botframework/connector/teams/teams_connector_client.py
index 73c3fec6..5e071b09 100644
--- a/libraries/botframework-connector/botframework/connector/teams/teams_connector_client.py
+++ b/libraries/botframework-connector/botframework/connector/teams/teams_connector_client.py
@@ -24,7 +24,6 @@ class TeamsConnectorClientConfiguration(Configuration):
     """
 
     def __init__(self, credentials, base_url=None):
-
         if credentials is None:
             raise ValueError("Parameter 'credentials' must not be None.")
         if not base_url:
@@ -63,7 +62,6 @@ class TeamsConnectorClient(SDKClient):
     """
 
     def __init__(self, credentials, base_url=None):
-
         self.config = TeamsConnectorClientConfiguration(credentials, base_url)
         super(TeamsConnectorClient, self).__init__(self.config.credentials, self.config)
 
diff --git a/libraries/botframework-connector/botframework/connector/token_api/_configuration.py b/libraries/botframework-connector/botframework/connector/token_api/_configuration.py
index dd94bf96..28550431 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/_configuration.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/_configuration.py
@@ -22,7 +22,6 @@ class TokenApiClientConfiguration(Configuration):
     """
 
     def __init__(self, credentials, base_url=None):
-
         if credentials is None:
             raise ValueError("Parameter 'credentials' must not be None.")
         if not base_url:
diff --git a/libraries/botframework-connector/botframework/connector/token_api/_token_api_client.py b/libraries/botframework-connector/botframework/connector/token_api/_token_api_client.py
index dbb6a52f..3aafe680 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/_token_api_client.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/_token_api_client.py
@@ -32,7 +32,6 @@ class TokenApiClient(SDKClient):
     """
 
     def __init__(self, credentials, base_url=None):
-
         self.config = TokenApiClientConfiguration(credentials, base_url)
         super(TokenApiClient, self).__init__(self.config.credentials, self.config)
 
diff --git a/libraries/botframework-connector/botframework/connector/token_api/aio/_token_api_client_async.py b/libraries/botframework-connector/botframework/connector/token_api/aio/_token_api_client_async.py
index 513cb62b..bd6e7030 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/aio/_token_api_client_async.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/aio/_token_api_client_async.py
@@ -32,7 +32,6 @@ class TokenApiClient(SDKClientAsync):
     """
 
     def __init__(self, credentials, base_url=None):
-
         self.config = TokenApiClientConfiguration(credentials, base_url)
         super(TokenApiClient, self).__init__(self.config)
 
diff --git a/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_bot_sign_in_operations_async.py b/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_bot_sign_in_operations_async.py
index 385f1446..bd5eb294 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_bot_sign_in_operations_async.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_bot_sign_in_operations_async.py
@@ -27,7 +27,6 @@ class BotSignInOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer) -> None:
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_user_token_operations_async.py b/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_user_token_operations_async.py
index 5ac397d6..f18b84d7 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_user_token_operations_async.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/aio/operations_async/_user_token_operations_async.py
@@ -26,7 +26,6 @@ class UserTokenOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer) -> None:
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/token_api/models/_models.py b/libraries/botframework-connector/botframework/connector/token_api/models/_models.py
index 63c1eeda..5f69104c 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/models/_models.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/models/_models.py
@@ -71,7 +71,6 @@ class ErrorResponseException(HttpOperationError):
     """
 
     def __init__(self, deserialize, response, *args):
-
         super(ErrorResponseException, self).__init__(
             deserialize, response, "ErrorResponse", *args
         )
diff --git a/libraries/botframework-connector/botframework/connector/token_api/models/_models_py3.py b/libraries/botframework-connector/botframework/connector/token_api/models/_models_py3.py
index 271c532d..60ab62c9 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/models/_models_py3.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/models/_models_py3.py
@@ -73,7 +73,6 @@ class ErrorResponseException(HttpOperationError):
     """
 
     def __init__(self, deserialize, response, *args):
-
         super(ErrorResponseException, self).__init__(
             deserialize, response, "ErrorResponse", *args
         )
diff --git a/libraries/botframework-connector/botframework/connector/token_api/operations/_bot_sign_in_operations.py b/libraries/botframework-connector/botframework/connector/token_api/operations/_bot_sign_in_operations.py
index 83f128b1..7758e406 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/operations/_bot_sign_in_operations.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/operations/_bot_sign_in_operations.py
@@ -27,7 +27,6 @@ class BotSignInOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer):
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-connector/botframework/connector/token_api/operations/_user_token_operations.py b/libraries/botframework-connector/botframework/connector/token_api/operations/_user_token_operations.py
index f6395257..f8b43edb 100644
--- a/libraries/botframework-connector/botframework/connector/token_api/operations/_user_token_operations.py
+++ b/libraries/botframework-connector/botframework/connector/token_api/operations/_user_token_operations.py
@@ -26,7 +26,6 @@ class UserTokenOperations:
     models = models
 
     def __init__(self, client, config, serializer, deserializer):
-
         self._client = client
         self._serialize = serializer
         self._deserialize = deserializer
diff --git a/libraries/botframework-streaming/botframework/streaming/payload_transport/send_queue.py b/libraries/botframework-streaming/botframework/streaming/payload_transport/send_queue.py
index d337d911..1f52bee4 100644
--- a/libraries/botframework-streaming/botframework/streaming/payload_transport/send_queue.py
+++ b/libraries/botframework-streaming/botframework/streaming/payload_transport/send_queue.py
@@ -37,3 +37,4 @@ class SendQueue:
             except Exception:
                 # AppInsights.TrackException(e)
                 traceback.print_exc()
+                return
diff --git a/libraries/botframework-streaming/botframework/streaming/payloads/header_serializer.py b/libraries/botframework-streaming/botframework/streaming/payloads/header_serializer.py
index b0b507ab..53a1d8fc 100644
--- a/libraries/botframework-streaming/botframework/streaming/payloads/header_serializer.py
+++ b/libraries/botframework-streaming/botframework/streaming/payloads/header_serializer.py
@@ -34,7 +34,6 @@ class HeaderSerializer:
         buffer: List[int],
         offset: int,  # pylint: disable=unused-argument
     ) -> int:
-
         # write type
         buffer[HeaderSerializer.TYPE_OFFSET] = HeaderSerializer._char_to_binary_int(
             header.type
diff --git a/pipelines/botbuilder-python-ci.yml b/pipelines/botbuilder-python-ci.yml
index 61de37a8..04a848e1 100644
--- a/pipelines/botbuilder-python-ci.yml
+++ b/pipelines/botbuilder-python-ci.yml
@@ -8,6 +8,7 @@ variables:
   COVERALLS_SERVICE_NAME: python-ci
   python.37: 3.7.x
   python.38: 3.8.x
+  # python.311: 3.11.x
   # PythonCoverallsToken: get this from Azure
 
 jobs:
@@ -23,6 +24,8 @@ jobs:
           PYTHON_VERSION: '$(python.37)'
         Python38:
           PYTHON_VERSION: '$(python.38)'
+        # Python311:
+        #   PYTHON_VERSION: '$(python.311)'
       maxParallel: 3
 
   steps:


Test patch:
diff --git a/libraries/botbuilder-applicationinsights/tests/test_telemetry_waterfall.py b/libraries/botbuilder-applicationinsights/tests/test_telemetry_waterfall.py
index 31f10527..a0952907 100644
--- a/libraries/botbuilder-applicationinsights/tests/test_telemetry_waterfall.py
+++ b/libraries/botbuilder-applicationinsights/tests/test_telemetry_waterfall.py
@@ -65,7 +65,6 @@ class TelemetryWaterfallTests(aiounittest.AsyncTestCase):
 
         # Initialize TestAdapter
         async def exec_test(turn_context: TurnContext) -> None:
-
             dialog_context = await dialogs.create_context(turn_context)
             results = await dialog_context.continue_dialog()
             if results.status == DialogTurnStatus.Empty:
@@ -119,7 +118,6 @@ class TelemetryWaterfallTests(aiounittest.AsyncTestCase):
 
         # Initialize TestAdapter
         async def exec_test(turn_context: TurnContext) -> None:
-
             dialog_context = await dialogs.create_context(turn_context)
             await dialog_context.continue_dialog()
             if not turn_context.responded:
diff --git a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py
index 616971f6..8e987665 100644
--- a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py
+++ b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py
@@ -319,7 +319,6 @@ class TestBotFrameworkAdapter(aiounittest.AsyncTestCase):
         await adapter.process_activity(incoming, "", aux_func_assert_tenant_id_copied)
 
     async def test_should_create_valid_conversation_for_msteams(self):
-
         tenant_id = "testTenant"
 
         reference = deepcopy(REFERENCE)
diff --git a/libraries/botbuilder-core/tests/test_inspection_middleware.py b/libraries/botbuilder-core/tests/test_inspection_middleware.py
index 68259a1b..dbd2c740 100644
--- a/libraries/botbuilder-core/tests/test_inspection_middleware.py
+++ b/libraries/botbuilder-core/tests/test_inspection_middleware.py
@@ -113,7 +113,6 @@ class TestConversationState(aiounittest.AsyncTestCase):
             y_prop = conversation_state.create_property("y")
 
             async def exec_test2(turn_context):
-
                 await turn_context.send_activity(
                     MessageFactory.text(f"echo: { turn_context.activity.text }")
                 )
@@ -227,7 +226,6 @@ class TestConversationState(aiounittest.AsyncTestCase):
             y_prop = conversation_state.create_property("y")
 
             async def exec_test2(turn_context):
-
                 await turn_context.send_activity(
                     MessageFactory.text(f"echo: {turn_context.activity.text}")
                 )
diff --git a/libraries/botbuilder-core/tests/test_memory_transcript_store.py b/libraries/botbuilder-core/tests/test_memory_transcript_store.py
index 12cb0e8a..14b313c9 100644
--- a/libraries/botbuilder-core/tests/test_memory_transcript_store.py
+++ b/libraries/botbuilder-core/tests/test_memory_transcript_store.py
@@ -26,6 +26,7 @@ from botbuilder.schema import (
     ConversationReference,
 )
 
+
 # pylint: disable=line-too-long,missing-docstring
 class TestMemoryTranscriptStore(aiounittest.AsyncTestCase):
     # pylint: disable=unused-argument
diff --git a/libraries/botbuilder-core/tests/test_message_factory.py b/libraries/botbuilder-core/tests/test_message_factory.py
index 265ef379..3012dc49 100644
--- a/libraries/botbuilder-core/tests/test_message_factory.py
+++ b/libraries/botbuilder-core/tests/test_message_factory.py
@@ -49,7 +49,6 @@ def assert_attachments(activity: Activity, count: int, types: List[str] = None):
 
 
 class TestMessageFactory(aiounittest.AsyncTestCase):
-
     suggested_actions = [
         CardAction(title="a", type=ActionTypes.im_back, value="a"),
         CardAction(title="b", type=ActionTypes.im_back, value="b"),
diff --git a/libraries/botbuilder-core/tests/test_middleware_set.py b/libraries/botbuilder-core/tests/test_middleware_set.py
index a6785c50..55f6c471 100644
--- a/libraries/botbuilder-core/tests/test_middleware_set.py
+++ b/libraries/botbuilder-core/tests/test_middleware_set.py
@@ -56,7 +56,6 @@ class TestMiddlewareSet(aiounittest.AsyncTestCase):
         await middleware_set.receive_activity_internal("Bye", request_handler)
 
     async def test_middleware_run_in_order(self):
-
         called_first = False
         called_second = False
 
diff --git a/libraries/botbuilder-core/tests/test_turn_context.py b/libraries/botbuilder-core/tests/test_turn_context.py
index 8f4d3b6b..473580ef 100644
--- a/libraries/botbuilder-core/tests/test_turn_context.py
+++ b/libraries/botbuilder-core/tests/test_turn_context.py
@@ -35,7 +35,7 @@ class SimpleAdapter(BotAdapter):
         assert activities is not None
         assert isinstance(activities, list)
         assert activities
-        for (idx, activity) in enumerate(activities):  # pylint: disable=unused-variable
+        for idx, activity in enumerate(activities):  # pylint: disable=unused-variable
             assert isinstance(activity, Activity)
             assert activity.type == "message" or activity.type == ActivityTypes.trace
             responses.append(ResourceResponse(id="5678"))
diff --git a/libraries/botbuilder-dialogs/tests/test_confirm_prompt.py b/libraries/botbuilder-dialogs/tests/test_confirm_prompt.py
index 132fef92..cedf5f03 100644
--- a/libraries/botbuilder-dialogs/tests/test_confirm_prompt.py
+++ b/libraries/botbuilder-dialogs/tests/test_confirm_prompt.py
@@ -282,7 +282,6 @@ class ConfirmPromptTest(aiounittest.AsyncTestCase):
 
     async def test_confirm_prompt_should_default_to_english_locale(self):
         async def exec_test(turn_context: TurnContext):
-
             dialog_context = await dialogs.create_context(turn_context)
 
             results: DialogTurnResult = await dialog_context.continue_dialog()
diff --git a/libraries/botbuilder-dialogs/tests/test_date_time_prompt.py b/libraries/botbuilder-dialogs/tests/test_date_time_prompt.py
index f3ea4d95..765ef4c3 100644
--- a/libraries/botbuilder-dialogs/tests/test_date_time_prompt.py
+++ b/libraries/botbuilder-dialogs/tests/test_date_time_prompt.py
@@ -32,7 +32,6 @@ class DatetimePromptTests(aiounittest.AsyncTestCase):
 
             results = await dialog_context.continue_dialog()
             if results.status == DialogTurnStatus.Empty:
-
                 options = PromptOptions(prompt=MessageFactory.text(prompt_msg))
                 await dialog_context.begin_dialog("DateTimePrompt", options)
             else:
diff --git a/libraries/botbuilder-dialogs/tests/test_number_prompt.py b/libraries/botbuilder-dialogs/tests/test_number_prompt.py
index 1b951001..52fda0ea 100644
--- a/libraries/botbuilder-dialogs/tests/test_number_prompt.py
+++ b/libraries/botbuilder-dialogs/tests/test_number_prompt.py
@@ -180,7 +180,6 @@ class NumberPromptTests(aiounittest.AsyncTestCase):
         dialogs.add(number_prompt)
 
         async def exec_test(turn_context: TurnContext) -> None:
-
             dialog_context = await dialogs.create_context(turn_context)
             results = await dialog_context.continue_dialog()
 
diff --git a/libraries/botbuilder-dialogs/tests/test_oauth_prompt.py b/libraries/botbuilder-dialogs/tests/test_oauth_prompt.py
index 7a1eaeba..0c5fac1e 100644
--- a/libraries/botbuilder-dialogs/tests/test_oauth_prompt.py
+++ b/libraries/botbuilder-dialogs/tests/test_oauth_prompt.py
@@ -76,7 +76,6 @@ class OAuthPromptTests(aiounittest.AsyncTestCase):
         async def inspector(
             activity: Activity, description: str = None
         ):  # pylint: disable=unused-argument
-
             self.assertTrue(len(activity.attachments) == 1)
             self.assertTrue(
                 activity.attachments[0].content_type
@@ -184,7 +183,6 @@ class OAuthPromptTests(aiounittest.AsyncTestCase):
 
             results = await dialog_context.continue_dialog()
             if results.status == DialogTurnStatus.Empty:
-
                 # If magicCode is detected when prompting, this will end the dialog and return the token in tokenResult
                 token_result = await dialog_context.prompt("prompt", PromptOptions())
                 if isinstance(token_result.result, TokenResponse):
diff --git a/libraries/botbuilder-dialogs/tests/test_waterfall.py b/libraries/botbuilder-dialogs/tests/test_waterfall.py
index c26f6ee0..1290cedc 100644
--- a/libraries/botbuilder-dialogs/tests/test_waterfall.py
+++ b/libraries/botbuilder-dialogs/tests/test_waterfall.py
@@ -80,7 +80,6 @@ class WaterfallTests(aiounittest.AsyncTestCase):
 
         # Initialize TestAdapter
         async def exec_test(turn_context: TurnContext) -> None:
-
             dialog_context = await dialogs.create_context(turn_context)
             results = await dialog_context.continue_dialog()
             if results.status == DialogTurnStatus.Empty:
diff --git a/libraries/botframework-connector/tests/requirements.txt b/libraries/botframework-connector/tests/requirements.txt
index a376f63c..62eb5aba 100644
--- a/libraries/botframework-connector/tests/requirements.txt
+++ b/libraries/botframework-connector/tests/requirements.txt
@@ -1,6 +1,5 @@
 pytest-cov>=2.6.0
 pytest~=6.2.3
-pyyaml==5.4
-azure-devtools>=0.4.1
+pyyaml==6.0
 pytest-asyncio==0.15.1
 ddt==1.2.1
\ No newline at end of file
diff --git a/libraries/botframework-connector/tests/test_attachments.py b/libraries/botframework-connector/tests/test_attachments.py
index d1706d2b..bd280c84 100644
--- a/libraries/botframework-connector/tests/test_attachments.py
+++ b/libraries/botframework-connector/tests/test_attachments.py
@@ -5,7 +5,6 @@ import os
 import base64
 import asyncio
 import pytest
-from azure_devtools.scenario_tests import ReplayableTest
 
 import msrest
 from botbuilder.schema import AttachmentData, ErrorResponseException
@@ -51,9 +50,9 @@ LOOP = asyncio.get_event_loop()
 AUTH_TOKEN = LOOP.run_until_complete(get_auth_token())
 
 
-class AttachmentsTest(ReplayableTest):
-    def __init__(self, method_name):  # pylint: disable=useless-super-delegation
-        super(AttachmentsTest, self).__init__(method_name)
+class AttachmentsTest:
+    def __init__(self):  # pylint: disable=useless-super-delegation
+        super(AttachmentsTest, self).__init__()
 
     @property
     def credentials(self):
diff --git a/libraries/botframework-connector/tests/test_attachments_async.py b/libraries/botframework-connector/tests/test_attachments_async.py
index b6049414..c0f7c945 100644
--- a/libraries/botframework-connector/tests/test_attachments_async.py
+++ b/libraries/botframework-connector/tests/test_attachments_async.py
@@ -5,7 +5,6 @@ import os
 import base64
 import asyncio
 import pytest
-from azure_devtools.scenario_tests import ReplayableTest
 
 import msrest
 from botbuilder.schema import AttachmentData, ErrorResponseException
@@ -58,9 +57,9 @@ LOOP = asyncio.get_event_loop()
 AUTH_TOKEN = LOOP.run_until_complete(get_auth_token())
 
 
-class AttachmentsTest(ReplayableTest):
-    def __init__(self, method_name):
-        super(AttachmentsTest, self).__init__(method_name)
+class AttachmentsTest:
+    def __init__(self):
+        super(AttachmentsTest, self).__init__()
         self.loop = asyncio.get_event_loop()
 
     @property
diff --git a/libraries/botframework-connector/tests/test_conversations.py b/libraries/botframework-connector/tests/test_conversations.py
index badd636d..c6492664 100644
--- a/libraries/botframework-connector/tests/test_conversations.py
+++ b/libraries/botframework-connector/tests/test_conversations.py
@@ -3,7 +3,6 @@
 
 import asyncio
 import pytest
-from azure_devtools.scenario_tests import ReplayableTest
 
 from botbuilder.schema import (
     Activity,
@@ -48,9 +47,9 @@ LOOP = asyncio.get_event_loop()
 AUTH_TOKEN = LOOP.run_until_complete(get_auth_token())
 
 
-class ConversationTest(ReplayableTest):
-    def __init__(self, method_name):  # pylint: disable=useless-super-delegation
-        super(ConversationTest, self).__init__(method_name)
+class ConversationTest:
+    def __init__(self):  # pylint: disable=useless-super-delegation
+        super(ConversationTest, self).__init__()
 
     @property
     def credentials(self):
diff --git a/libraries/botframework-connector/tests/test_conversations_async.py b/libraries/botframework-connector/tests/test_conversations_async.py
index a6ad2242..074247c8 100644
--- a/libraries/botframework-connector/tests/test_conversations_async.py
+++ b/libraries/botframework-connector/tests/test_conversations_async.py
@@ -3,7 +3,6 @@
 
 import asyncio
 import pytest
-from azure_devtools.scenario_tests import ReplayableTest
 
 from botbuilder.schema import (
     Activity,
@@ -48,9 +47,9 @@ LOOP = asyncio.get_event_loop()
 AUTH_TOKEN = LOOP.run_until_complete(get_auth_token())
 
 
-class TestAsyncConversation(ReplayableTest):
-    def __init__(self, method_name):
-        super(TestAsyncConversation, self).__init__(method_name)
+class TestAsyncConversation:
+    def __init__(self):
+        super(TestAsyncConversation, self).__init__()
         self.loop = asyncio.get_event_loop()
         self.credentials = MicrosoftTokenAuthenticationStub(AUTH_TOKEN)
 
diff --git a/libraries/functional-tests/functionaltestbot/functionaltestbot/app.py b/libraries/functional-tests/functionaltestbot/functionaltestbot/app.py
index 071a17d2..fc975093 100644
--- a/libraries/functional-tests/functionaltestbot/functionaltestbot/app.py
+++ b/libraries/functional-tests/functionaltestbot/functionaltestbot/app.py
@@ -25,6 +25,7 @@ APP.config.from_object("config.DefaultConfig")
 SETTINGS = BotFrameworkAdapterSettings(APP.config["APP_ID"], APP.config["APP_PASSWORD"])
 ADAPTER = BotFrameworkAdapter(SETTINGS)
 
+
 # Catch-all for errors.
 # pylint: disable=unused-argument
 async def on_error(self, context: TurnContext, error: Exception):
@@ -46,6 +47,7 @@ ADAPTER.on_turn_error = MethodType(on_error, ADAPTER)
 # Create the main dialog
 BOT = MyBot()
 
+
 # Listen for incoming requests on GET / for Azure monitoring
 @APP.route("/", methods=["GET"])
 def ping():