Update to work with PY3.11. (#320)

diff --git a/apitools/base/protorpclite/util.py b/apitools/base/protorpclite/util.py
index bf4abf7..c996312 100644
--- a/apitools/base/protorpclite/util.py
+++ b/apitools/base/protorpclite/util.py
@@ -148,7 +148,7 @@
     if isinstance(max_positional_args, six.integer_types):
         return positional_decorator
     else:
-        args, _, _, defaults = inspect.getargspec(max_positional_args)
+        args, _, _, defaults, *_ = inspect.getfullargspec(max_positional_args)
         if defaults is None:
             raise ValueError(
                 'Functions with no keyword arguments must specify '
diff --git a/samples/uptodate_check_test.py b/samples/uptodate_check_test.py
index 8ca258e..6e8c9fb 100644
--- a/samples/uptodate_check_test.py
+++ b/samples/uptodate_check_test.py
@@ -59,10 +59,6 @@
                      prefix + '_messages.py',
                      '__init__.py']))
             self.assertEquals(expected_files, set(os.listdir(tmp_dir_path)))
-            if six.PY3:
-                # The source files won't be identical under python3,
-                # so we exit early.
-                return
             for expected_file in expected_files:
                 self.AssertDiffEqual(
                     _GetContent(GetSampleClientPath(
diff --git a/tox.ini b/tox.ini
index 09d2afc..29a9251 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,11 +1,10 @@
 [tox]
 envlist =
-    py27-oauth2client{1,2,3,4}
-    py35-oauth2client{1,2,3,4}
+    py311-oauth2client{1,2,3,4}
 
 [testenv]
 deps =
-    nose
+    nose-py3
     python-gflags
     oauth2client1: oauth2client<1.5dev
     oauth2client2: oauth2client>=2,<=3dev
@@ -18,7 +17,7 @@
 
 [testenv:lint]
 basepython =
-    python2.7
+    python3.11
 commands =
     pip install six google-apitools
     pycodestyle apitools
@@ -28,7 +27,7 @@
 
 [testenv:cover]
 basepython =
-    python2.7
+    python3.11
 commands =
     nosetests --with-xunit --with-xcoverage --cover-package=apitools --nocapture --cover-erase --cover-tests --cover-branches []
 deps =
@@ -49,7 +48,7 @@
 
 [testenv:transfer_coverage]
 basepython =
-    python2.7
+    python3.11
 deps =
     mock
     nose