Merge ~cjwatson/launchpad:py3only-scandir into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: bd40ffed732d70beeb73eee14afc67a1bd14fc44
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:py3only-scandir
Merge into: launchpad:master
Diff against target: 942 lines (+50/-99)
41 files modified
configs/development/gunicorn.conf.py (+1/-3)
lib/lp/archivepublisher/customupload.py (+2/-3)
lib/lp/archivepublisher/model/ftparchive.py (+1/-2)
lib/lp/archivepublisher/publishing.py (+4/-5)
lib/lp/archivepublisher/scripts/publish_ftpmaster.py (+1/-2)
lib/lp/archivepublisher/signing.py (+1/-2)
lib/lp/archivepublisher/tests/test_publisher.py (+1/-2)
lib/lp/archivepublisher/tests/test_signing.py (+1/-2)
lib/lp/archiveuploader/charmrecipeupload.py (+1/-2)
lib/lp/archiveuploader/dscfile.py (+1/-2)
lib/lp/archiveuploader/livefsupload.py (+1/-2)
lib/lp/archiveuploader/ocirecipeupload.py (+1/-2)
lib/lp/archiveuploader/snapupload.py (+1/-2)
lib/lp/archiveuploader/uploadprocessor.py (+2/-3)
lib/lp/bugs/tests/test_doc.py (+1/-3)
lib/lp/registry/model/codeofconduct.py (+1/-2)
lib/lp/registry/scripts/productreleasefinder/walker.py (+4/-4)
lib/lp/scripts/utilities/js/jsbuild.py (+3/-4)
lib/lp/services/config/fixture.py (+1/-2)
lib/lp/services/config/tests/test_config.py (+1/-2)
lib/lp/services/librarianserver/librariangc.py (+2/-3)
lib/lp/services/librarianserver/swift.py (+1/-3)
lib/lp/services/mail/mailbox.py (+1/-2)
lib/lp/services/scripts/tests/__init__.py (+1/-3)
lib/lp/services/testing/__init__.py (+1/-3)
lib/lp/services/webservice/tests/test_wadllib.py (+1/-2)
lib/lp/soyuz/doc/soyuz-set-of-uploads.txt (+1/-3)
lib/lp/soyuz/doc/soyuz-upload.txt (+1/-2)
lib/lp/soyuz/scripts/gina/packages.py (+1/-2)
lib/lp/soyuz/tests/fakepackager.py (+1/-2)
lib/lp/soyuz/tests/test_doc.py (+1/-2)
lib/lp/soyuz/tests/test_publishing.py (+1/-2)
lib/lp/testing/__init__.py (+1/-2)
lib/lp/testing/gpgkeys/__init__.py (+1/-2)
lib/lp/testing/yuixhr.py (+1/-2)
lib/lp/testopenid/stories/tests.py (+1/-3)
lib/lp/tests/test_opensource.py (+1/-2)
lib/lp/translations/tests/test_doc.py (+1/-3)
requirements/launchpad.txt (+0/-1)
scripts/migrate-librarian-content-md5.py (+1/-3)
setup.py (+0/-1)
Reviewer Review Type Date Requested Status
Cristian Gonzalez (community) Approve
Review via email: mp+407246@code.launchpad.net

Commit message

Use os.scandir and os.walk directly

Description of the change

The separate `scandir` module was a backport of the same code to Python versions earlier than 3.5, and is no longer needed.

To post a comment you must log in.
Revision history for this message
Cristian Gonzalez (cristiangsp) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/configs/development/gunicorn.conf.py b/configs/development/gunicorn.conf.py
index 0576e0d..2c914aa 100644
--- a/configs/development/gunicorn.conf.py
+++ b/configs/development/gunicorn.conf.py
@@ -1,8 +1,6 @@
1from fnmatch import fnmatch1from fnmatch import fnmatch
2import os2import os
33
4import scandir
5
64
7BASE_DIR = os.path.realpath(5BASE_DIR = os.path.realpath(
8 os.path.join(os.path.dirname(__file__), '..', '..'))6 os.path.join(os.path.dirname(__file__), '..', '..'))
@@ -13,7 +11,7 @@ def find_files(directory, pattern):
13 """Find files in `directory` matching `pattern`.11 """Find files in `directory` matching `pattern`.
14 """12 """
15 result = []13 result = []
16 for root, dirs, files in scandir.walk(directory):14 for root, dirs, files in os.walk(directory):
17 for basename in files:15 for basename in files:
18 matches = fnmatch(basename, pattern)16 matches = fnmatch(basename, pattern)
19 if matches:17 if matches:
diff --git a/lib/lp/archivepublisher/customupload.py b/lib/lp/archivepublisher/customupload.py
index 741211a..42dfea3 100644
--- a/lib/lp/archivepublisher/customupload.py
+++ b/lib/lp/archivepublisher/customupload.py
@@ -20,7 +20,6 @@ import shutil
20import tarfile20import tarfile
21import tempfile21import tempfile
2222
23import scandir
24from zope.interface import implementer23from zope.interface import implementer
2524
26from lp.archivepublisher.debversion import (25from lp.archivepublisher.debversion import (
@@ -290,7 +289,7 @@ class CustomUpload:
290 """Install the files from the custom upload to the archive."""289 """Install the files from the custom upload to the archive."""
291 assert self.tmpdir is not None, "Must extract tarfile first"290 assert self.tmpdir is not None, "Must extract tarfile first"
292 extracted = False291 extracted = False
293 for dirpath, dirnames, filenames in scandir.walk(self.tmpdir):292 for dirpath, dirnames, filenames in os.walk(self.tmpdir):
294293
295 # Create symbolic links to directories.294 # Create symbolic links to directories.
296 for dirname in dirnames:295 for dirname in dirnames:
@@ -359,7 +358,7 @@ class CustomUpload:
359 # now present in the target. Deliberately skip 'broken' versions358 # now present in the target. Deliberately skip 'broken' versions
360 # because they can't be sorted anyway.359 # because they can't be sorted anyway.
361 versions = []360 versions = []
362 for entry in scandir.scandir(self.targetdir):361 for entry in os.scandir(self.targetdir):
363 # Skip the symlink.362 # Skip the symlink.
364 if entry.name == 'current':363 if entry.name == 'current':
365 continue364 continue
diff --git a/lib/lp/archivepublisher/model/ftparchive.py b/lib/lp/archivepublisher/model/ftparchive.py
index 624aebf..d56b881 100644
--- a/lib/lp/archivepublisher/model/ftparchive.py
+++ b/lib/lp/archivepublisher/model/ftparchive.py
@@ -6,7 +6,6 @@ import os
6import re6import re
7import time7import time
88
9import scandir
10import six9import six
11from storm.expr import (10from storm.expr import (
12 Desc,11 Desc,
@@ -61,7 +60,7 @@ def make_clean_dir(path, clean_pattern=".*"):
61 If omitted, all files are removed.60 If omitted, all files are removed.
62 """61 """
63 if os.path.isdir(path):62 if os.path.isdir(path):
64 for entry in list(scandir.scandir(path)):63 for entry in list(os.scandir(path)):
65 if (entry.name == "by-hash" or64 if (entry.name == "by-hash" or
66 not re.match(clean_pattern, entry.name)):65 not re.match(clean_pattern, entry.name)):
67 # Ignore existing by-hash directories; they will be cleaned66 # Ignore existing by-hash directories; they will be cleaned
diff --git a/lib/lp/archivepublisher/publishing.py b/lib/lp/archivepublisher/publishing.py
index 0975176..daea42c 100644
--- a/lib/lp/archivepublisher/publishing.py
+++ b/lib/lp/archivepublisher/publishing.py
@@ -36,7 +36,6 @@ from debian.deb822 import (
36 _multivalued,36 _multivalued,
37 Release,37 Release,
38 )38 )
39import scandir
40import six39import six
41from storm.expr import Desc40from storm.expr import Desc
42from zope.component import getUtility41from zope.component import getUtility
@@ -358,7 +357,7 @@ class ByHash:
358 hash_path = os.path.join(self.path, archive_hash.apt_name)357 hash_path = os.path.join(self.path, archive_hash.apt_name)
359 if os.path.exists(hash_path):358 if os.path.exists(hash_path):
360 prune_hash_directory = True359 prune_hash_directory = True
361 for entry in list(scandir.scandir(hash_path)):360 for entry in list(os.scandir(hash_path)):
362 if entry.name not in self.known_digests[361 if entry.name not in self.known_digests[
363 archive_hash.apt_name]:362 archive_hash.apt_name]:
364 self.log.debug(363 self.log.debug(
@@ -1189,7 +1188,7 @@ class Publisher(object):
1189 distroseries, pocket, component, core_files)1188 distroseries, pocket, component, core_files)
1190 dep11_dir = os.path.join(suite_dir, component, "dep11")1189 dep11_dir = os.path.join(suite_dir, component, "dep11")
1191 try:1190 try:
1192 for entry in scandir.scandir(dep11_dir):1191 for entry in os.scandir(dep11_dir):
1193 if (entry.name.startswith("Components-") or1192 if (entry.name.startswith("Components-") or
1194 entry.name.startswith("icons-")):1193 entry.name.startswith("icons-")):
1195 dep11_path = os.path.join(1194 dep11_path = os.path.join(
@@ -1355,7 +1354,7 @@ class Publisher(object):
1355 i18n_dir = os.path.join(self._config.distsroot, suite, i18n_subpath)1354 i18n_dir = os.path.join(self._config.distsroot, suite, i18n_subpath)
1356 i18n_files = set()1355 i18n_files = set()
1357 try:1356 try:
1358 for entry in scandir.scandir(i18n_dir):1357 for entry in os.scandir(i18n_dir):
1359 if not entry.name.startswith('Translation-'):1358 if not entry.name.startswith('Translation-'):
1360 continue1359 continue
1361 i18n_files.add(remove_suffix(entry.name))1360 i18n_files.add(remove_suffix(entry.name))
@@ -1556,7 +1555,7 @@ class DirectoryHash:
15561555
1557 def add_dir(self, path):1556 def add_dir(self, path):
1558 """Recursively add a directory path to be checksummed."""1557 """Recursively add a directory path to be checksummed."""
1559 for dirpath, dirnames, filenames in scandir.walk(path):1558 for dirpath, dirnames, filenames in os.walk(path):
1560 for filename in filenames:1559 for filename in filenames:
1561 self.add(os.path.join(dirpath, filename))1560 self.add(os.path.join(dirpath, filename))
15621561
diff --git a/lib/lp/archivepublisher/scripts/publish_ftpmaster.py b/lib/lp/archivepublisher/scripts/publish_ftpmaster.py
index 5326141..25c7a21 100644
--- a/lib/lp/archivepublisher/scripts/publish_ftpmaster.py
+++ b/lib/lp/archivepublisher/scripts/publish_ftpmaster.py
@@ -14,7 +14,6 @@ import os
14import shutil14import shutil
1515
16from pytz import utc16from pytz import utc
17import scandir
18import six17import six
19from zope.component import getUtility18from zope.component import getUtility
2019
@@ -471,7 +470,7 @@ class PublishFTPMaster(LaunchpadCronScript):
471 backup_top = os.path.join(get_backup_dists(archive_config), suite)470 backup_top = os.path.join(get_backup_dists(archive_config), suite)
472 staging_top = os.path.join(archive_config.stagingroot, suite)471 staging_top = os.path.join(archive_config.stagingroot, suite)
473 updated = False472 updated = False
474 for staging_dir, _, filenames in scandir.walk(staging_top):473 for staging_dir, _, filenames in os.walk(staging_top):
475 rel_dir = os.path.relpath(staging_dir, staging_top)474 rel_dir = os.path.relpath(staging_dir, staging_top)
476 backup_dir = os.path.join(backup_top, rel_dir)475 backup_dir = os.path.join(backup_top, rel_dir)
477 for filename in filenames:476 for filename in filenames:
diff --git a/lib/lp/archivepublisher/signing.py b/lib/lp/archivepublisher/signing.py
index ec61b95..2a2f08d 100644
--- a/lib/lp/archivepublisher/signing.py
+++ b/lib/lp/archivepublisher/signing.py
@@ -27,7 +27,6 @@ import tempfile
27import textwrap27import textwrap
2828
29from pytz import utc29from pytz import utc
30import scandir
31from zope.component import getUtility30from zope.component import getUtility
3231
33from lp.archivepublisher.config import getPubConfig32from lp.archivepublisher.config import getPubConfig
@@ -282,7 +281,7 @@ class SigningUpload(CustomUpload):
282 SigningKeyType.FIT: self.signFit,281 SigningKeyType.FIT: self.signFit,
283 }282 }
284283
285 for dirpath, dirnames, filenames in scandir.walk(self.tmpdir):284 for dirpath, dirnames, filenames in os.walk(self.tmpdir):
286 for filename in filenames:285 for filename in filenames:
287 file_path = os.path.join(dirpath, filename)286 file_path = os.path.join(dirpath, filename)
288 if filename.endswith(".efi"):287 if filename.endswith(".efi"):
diff --git a/lib/lp/archivepublisher/tests/test_publisher.py b/lib/lp/archivepublisher/tests/test_publisher.py
index f2c62cf..9000e9d 100644
--- a/lib/lp/archivepublisher/tests/test_publisher.py
+++ b/lib/lp/archivepublisher/tests/test_publisher.py
@@ -32,7 +32,6 @@ from unittest import mock
32from debian.deb822 import Release32from debian.deb822 import Release
33from fixtures import MonkeyPatch33from fixtures import MonkeyPatch
34import pytz34import pytz
35import scandir
36import six35import six
37from testscenarios import (36from testscenarios import (
38 load_tests_apply_scenarios,37 load_tests_apply_scenarios,
@@ -512,7 +511,7 @@ class ByHashesHaveContents(Matcher):
512511
513 def match(self, root):512 def match(self, root):
514 children = set()513 children = set()
515 for dirpath, dirnames, _ in scandir.walk(root):514 for dirpath, dirnames, _ in os.walk(root):
516 if "by-hash" in dirnames:515 if "by-hash" in dirnames:
517 children.add(os.path.relpath(dirpath, root))516 children.add(os.path.relpath(dirpath, root))
518 mismatch = MatchesSetwise(517 mismatch = MatchesSetwise(
diff --git a/lib/lp/archivepublisher/tests/test_signing.py b/lib/lp/archivepublisher/tests/test_signing.py
index 95e314a..20ba90e 100644
--- a/lib/lp/archivepublisher/tests/test_signing.py
+++ b/lib/lp/archivepublisher/tests/test_signing.py
@@ -18,7 +18,6 @@ from fixtures import (
18 MonkeyPatch,18 MonkeyPatch,
19 )19 )
20from pytz import utc20from pytz import utc
21import scandir
22import six21import six
23from testtools.matchers import (22from testtools.matchers import (
24 Contains,23 Contains,
@@ -79,7 +78,7 @@ class SignedMatches(Matcher):
7978
80 def match(self, base):79 def match(self, base):
81 content = []80 content = []
82 for root, dirs, files in scandir.walk(base):81 for root, dirs, files in os.walk(base):
83 content.extend(82 content.extend(
84 [os.path.relpath(os.path.join(root, f), base) for f in files])83 [os.path.relpath(os.path.join(root, f), base) for f in files])
8584
diff --git a/lib/lp/archiveuploader/charmrecipeupload.py b/lib/lp/archiveuploader/charmrecipeupload.py
index d31e8f1..e4da3e7 100644
--- a/lib/lp/archiveuploader/charmrecipeupload.py
+++ b/lib/lp/archiveuploader/charmrecipeupload.py
@@ -10,7 +10,6 @@ __all__ = [
1010
11import os11import os
1212
13import scandir
14from zope.component import getUtility13from zope.component import getUtility
1514
16from lp.archiveuploader.utils import UploadError15from lp.archiveuploader.utils import UploadError
@@ -39,7 +38,7 @@ class CharmRecipeUpload:
3938
40 found_charm = False39 found_charm = False
41 charm_paths = []40 charm_paths = []
42 for dirpath, _, filenames in scandir.walk(self.upload_path):41 for dirpath, _, filenames in os.walk(self.upload_path):
43 if dirpath == self.upload_path:42 if dirpath == self.upload_path:
44 # All relevant files will be in a subdirectory.43 # All relevant files will be in a subdirectory.
45 continue44 continue
diff --git a/lib/lp/archiveuploader/dscfile.py b/lib/lp/archiveuploader/dscfile.py
index ba47bd3..7efbc85 100644
--- a/lib/lp/archiveuploader/dscfile.py
+++ b/lib/lp/archiveuploader/dscfile.py
@@ -30,7 +30,6 @@ from debian.deb822 import (
30 Deb822Dict,30 Deb822Dict,
31 PkgRelation,31 PkgRelation,
32 )32 )
33import scandir
34import six33import six
35from zope.component import getUtility34from zope.component import getUtility
3635
@@ -617,7 +616,7 @@ class DSCFile(SourceUploadFile, SignableTagFile):
617616
618 # Check if 'dpkg-source' created only one directory.617 # Check if 'dpkg-source' created only one directory.
619 temp_directories = [618 temp_directories = [
620 entry.name for entry in scandir.scandir(unpacked_dir)619 entry.name for entry in os.scandir(unpacked_dir)
621 if entry.is_dir()]620 if entry.is_dir()]
622 if len(temp_directories) > 1:621 if len(temp_directories) > 1:
623 yield UploadError(622 yield UploadError(
diff --git a/lib/lp/archiveuploader/livefsupload.py b/lib/lp/archiveuploader/livefsupload.py
index 4034db4..7eedbe3 100644
--- a/lib/lp/archiveuploader/livefsupload.py
+++ b/lib/lp/archiveuploader/livefsupload.py
@@ -7,7 +7,6 @@ __metaclass__ = type
77
8import os8import os
99
10import scandir
11from zope.component import getUtility10from zope.component import getUtility
1211
13from lp.buildmaster.enums import BuildStatus12from lp.buildmaster.enums import BuildStatus
@@ -37,7 +36,7 @@ class LiveFSUpload:
37 """Process this upload, loading it into the database."""36 """Process this upload, loading it into the database."""
38 self.logger.debug("Beginning processing.")37 self.logger.debug("Beginning processing.")
3938
40 for dirpath, _, filenames in scandir.walk(self.upload_path):39 for dirpath, _, filenames in os.walk(self.upload_path):
41 if dirpath == self.upload_path:40 if dirpath == self.upload_path:
42 # All relevant files will be in a subdirectory.41 # All relevant files will be in a subdirectory.
43 continue42 continue
diff --git a/lib/lp/archiveuploader/ocirecipeupload.py b/lib/lp/archiveuploader/ocirecipeupload.py
index cd99962..516ef90 100644
--- a/lib/lp/archiveuploader/ocirecipeupload.py
+++ b/lib/lp/archiveuploader/ocirecipeupload.py
@@ -10,7 +10,6 @@ __all__ = ['OCIRecipeUpload']
10import json10import json
11import os11import os
1212
13import scandir
14from zope.component import getUtility13from zope.component import getUtility
1514
16from lp.archiveuploader.utils import UploadError15from lp.archiveuploader.utils import UploadError
@@ -39,7 +38,7 @@ class OCIRecipeUpload:
39 self.logger.debug("Beginning processing.")38 self.logger.debug("Beginning processing.")
4039
41 # Find digest file40 # Find digest file
42 for dirpath, _, filenames in scandir.walk(self.upload_path):41 for dirpath, _, filenames in os.walk(self.upload_path):
43 if dirpath == self.upload_path:42 if dirpath == self.upload_path:
44 # All relevant files will be in a subdirectory.43 # All relevant files will be in a subdirectory.
45 continue44 continue
diff --git a/lib/lp/archiveuploader/snapupload.py b/lib/lp/archiveuploader/snapupload.py
index e8b7bff..a2b4059 100644
--- a/lib/lp/archiveuploader/snapupload.py
+++ b/lib/lp/archiveuploader/snapupload.py
@@ -7,7 +7,6 @@ __metaclass__ = type
77
8import os8import os
99
10import scandir
11from zope.component import getUtility10from zope.component import getUtility
1211
13from lp.archiveuploader.utils import UploadError12from lp.archiveuploader.utils import UploadError
@@ -40,7 +39,7 @@ class SnapUpload:
4039
41 found_snap = False40 found_snap = False
42 snap_paths = []41 snap_paths = []
43 for dirpath, _, filenames in scandir.walk(self.upload_path):42 for dirpath, _, filenames in os.walk(self.upload_path):
44 if dirpath == self.upload_path:43 if dirpath == self.upload_path:
45 # All relevant files will be in a subdirectory.44 # All relevant files will be in a subdirectory.
46 continue45 continue
diff --git a/lib/lp/archiveuploader/uploadprocessor.py b/lib/lp/archiveuploader/uploadprocessor.py
index 54510c7..0c8911b 100644
--- a/lib/lp/archiveuploader/uploadprocessor.py
+++ b/lib/lp/archiveuploader/uploadprocessor.py
@@ -51,7 +51,6 @@ import os
51import shutil51import shutil
52import sys52import sys
5353
54import scandir
55from sqlobject import SQLObjectNotFound54from sqlobject import SQLObjectNotFound
56from zope.component import getUtility55from zope.component import getUtility
5756
@@ -215,7 +214,7 @@ class UploadProcessor:
215 alphabetically sorted.214 alphabetically sorted.
216 """215 """
217 return sorted(216 return sorted(
218 entry.name for entry in scandir.scandir(fsroot) if entry.is_dir())217 entry.name for entry in os.scandir(fsroot) if entry.is_dir())
219218
220219
221class UploadHandler:220class UploadHandler:
@@ -262,7 +261,7 @@ class UploadHandler:
262 """261 """
263 changes_files = []262 changes_files = []
264263
265 for dirpath, dirnames, filenames in scandir.walk(self.upload_path):264 for dirpath, dirnames, filenames in os.walk(self.upload_path):
266 relative_path = dirpath[len(self.upload_path) + 1:]265 relative_path = dirpath[len(self.upload_path) + 1:]
267 for filename in filenames:266 for filename in filenames:
268 if filename.endswith(".changes"):267 if filename.endswith(".changes"):
diff --git a/lib/lp/bugs/tests/test_doc.py b/lib/lp/bugs/tests/test_doc.py
index 627025b..78f8cbf 100644
--- a/lib/lp/bugs/tests/test_doc.py
+++ b/lib/lp/bugs/tests/test_doc.py
@@ -9,8 +9,6 @@ import logging
9import os9import os
10import unittest10import unittest
1111
12import scandir
13
14from lp.code.tests.test_doc import branchscannerSetUp12from lp.code.tests.test_doc import branchscannerSetUp
15from lp.services.config import config13from lp.services.config import config
16from lp.services.features.testing import FeatureFixture14from lp.services.features.testing import FeatureFixture
@@ -484,7 +482,7 @@ def test_suite():
484 stories_dir = os.path.join(os.path.pardir, 'stories')482 stories_dir = os.path.join(os.path.pardir, 'stories')
485 suite.addTest(PageTestSuite(stories_dir))483 suite.addTest(PageTestSuite(stories_dir))
486 stories_path = os.path.join(here, stories_dir)484 stories_path = os.path.join(here, stories_dir)
487 for story_entry in scandir.scandir(stories_path):485 for story_entry in os.scandir(stories_path):
488 if not story_entry.is_dir():486 if not story_entry.is_dir():
489 continue487 continue
490 story_path = os.path.join(stories_dir, story_entry.name)488 story_path = os.path.join(stories_dir, story_entry.name)
diff --git a/lib/lp/registry/model/codeofconduct.py b/lib/lp/registry/model/codeofconduct.py
index 7fae872..f4eca01 100644
--- a/lib/lp/registry/model/codeofconduct.py
+++ b/lib/lp/registry/model/codeofconduct.py
@@ -14,7 +14,6 @@ from datetime import datetime
14import os14import os
1515
16import pytz16import pytz
17import scandir
18import six17import six
19from storm.locals import (18from storm.locals import (
20 Bool,19 Bool,
@@ -154,7 +153,7 @@ class CodeOfConductSet:
154 cocs_path = getUtility(ICodeOfConductConf).path153 cocs_path = getUtility(ICodeOfConductConf).path
155154
156 # iter through files and store the CoC Object155 # iter through files and store the CoC Object
157 for entry in scandir.scandir(cocs_path):156 for entry in os.scandir(cocs_path):
158 # Select the correct filenames157 # Select the correct filenames
159 if entry.name.endswith('.txt'):158 if entry.name.endswith('.txt'):
160 # Extract the version from filename159 # Extract the version from filename
diff --git a/lib/lp/registry/scripts/productreleasefinder/walker.py b/lib/lp/registry/scripts/productreleasefinder/walker.py
index 6dff7de..9dfbbf0 100644
--- a/lib/lp/registry/scripts/productreleasefinder/walker.py
+++ b/lib/lp/registry/scripts/productreleasefinder/walker.py
@@ -13,6 +13,7 @@ __all__ = [
13 ]13 ]
1414
15import ftplib15import ftplib
16import os
16import socket17import socket
1718
18from lazr.uri import (19from lazr.uri import (
@@ -20,7 +21,6 @@ from lazr.uri import (
20 URI,21 URI,
21 )22 )
22import requests23import requests
23import scandir
24from six.moves.urllib.parse import (24from six.moves.urllib.parse import (
25 unquote_plus,25 unquote_plus,
26 urljoin,26 urljoin,
@@ -55,7 +55,7 @@ class WalkerBase:
55 """Base class for URL walkers.55 """Base class for URL walkers.
5656
57 This class is a base class for those wishing to implement protocol57 This class is a base class for those wishing to implement protocol
58 specific walkers. Walkers behave much like the scandir.walk() function,58 specific walkers. Walkers behave much like the os.walk() function,
59 but taking a URL and working remotely.59 but taking a URL and working remotely.
6060
61 A typical usage would be:61 A typical usage would be:
@@ -108,7 +108,7 @@ class WalkerBase:
108 """Walk through the URL.108 """Walk through the URL.
109109
110 Yields (dirpath, dirnames, filenames) for each path under the base;110 Yields (dirpath, dirnames, filenames) for each path under the base;
111 dirnames can be modified as with scandir.walk.111 dirnames can be modified as with os.walk.
112 """112 """
113 try:113 try:
114 self.open()114 self.open()
@@ -384,7 +384,7 @@ def walk(url, log_parent=None):
384 elif scheme in ["http", "https"]:384 elif scheme in ["http", "https"]:
385 return HTTPWalker(url, log_parent)385 return HTTPWalker(url, log_parent)
386 elif scheme in ["file"]:386 elif scheme in ["file"]:
387 return scandir.walk(path)387 return os.walk(path)
388 else:388 else:
389 raise WalkerError("Unknown scheme: %s" % scheme)389 raise WalkerError("Unknown scheme: %s" % scheme)
390390
diff --git a/lib/lp/scripts/utilities/js/jsbuild.py b/lib/lp/scripts/utilities/js/jsbuild.py
index 5b7bde8..77ce702 100644
--- a/lib/lp/scripts/utilities/js/jsbuild.py
+++ b/lib/lp/scripts/utilities/js/jsbuild.py
@@ -16,7 +16,6 @@ import sys
1616
17import cssutils17import cssutils
18from cssutils import settings18from cssutils import settings
19import scandir
2019
2120
22HERE = os.path.dirname(__file__)21HERE = os.path.dirname(__file__)
@@ -256,7 +255,7 @@ class Builder:
256 return255 return
257256
258 # Process sub-skins.257 # Process sub-skins.
259 for entry in scandir.scandir(src_skins_dir):258 for entry in os.scandir(src_skins_dir):
260 self.build_skin(component_name, entry.name)259 self.build_skin(component_name, entry.name)
261260
262 def link_directory_content(self, src_dir, target_dir, link_filter=None):261 def link_directory_content(self, src_dir, target_dir, link_filter=None):
@@ -269,7 +268,7 @@ class Builder:
269 If the filter returns False, no symlink will be created. By268 If the filter returns False, no symlink will be created. By
270 default a symlink is created for everything.269 default a symlink is created for everything.
271 """270 """
272 for entry in scandir.scandir(src_dir):271 for entry in os.scandir(src_dir):
273 if entry.name.endswith('~'):272 if entry.name.endswith('~'):
274 continue273 continue
275 if link_filter and not link_filter(entry.path):274 if link_filter and not link_filter(entry.path):
@@ -334,7 +333,7 @@ class Builder:
334 def do_build(self):333 def do_build(self):
335 # We need this to be both repeatable and in the desired order334 # We need this to be both repeatable and in the desired order
336 dir_list = sorted(335 dir_list = sorted(
337 scandir.scandir(self.src_dir),336 os.scandir(self.src_dir),
338 key=lambda x: x.name.lower(),337 key=lambda x: x.name.lower(),
339 reverse=True)338 reverse=True)
340 for entry in dir_list:339 for entry in dir_list:
diff --git a/lib/lp/services/config/fixture.py b/lib/lp/services/config/fixture.py
index 9be9e0b..698ceea 100644
--- a/lib/lp/services/config/fixture.py
+++ b/lib/lp/services/config/fixture.py
@@ -18,7 +18,6 @@ import shutil
18from textwrap import dedent18from textwrap import dedent
1919
20from fixtures import Fixture20from fixtures import Fixture
21import scandir
2221
23from lp.services.config import config22from lp.services.config import config
2423
@@ -125,7 +124,7 @@ class ConfigFixture(Fixture):
125 self.absroot = os.path.abspath(root)124 self.absroot = os.path.abspath(root)
126 self.addCleanup(shutil.rmtree, self.absroot)125 self.addCleanup(shutil.rmtree, self.absroot)
127 source = os.path.join(config.root, 'configs', self.copy_from_instance)126 source = os.path.join(config.root, 'configs', self.copy_from_instance)
128 for entry in scandir.scandir(source):127 for entry in os.scandir(source):
129 if entry.name == 'launchpad-lazr.conf':128 if entry.name == 'launchpad-lazr.conf':
130 self.add_section(self._extend_str % self.copy_from_instance)129 self.add_section(self._extend_str % self.copy_from_instance)
131 continue130 continue
diff --git a/lib/lp/services/config/tests/test_config.py b/lib/lp/services/config/tests/test_config.py
index 519d634..2906e4b 100644
--- a/lib/lp/services/config/tests/test_config.py
+++ b/lib/lp/services/config/tests/test_config.py
@@ -18,7 +18,6 @@ import unittest
18from fixtures import TempDir18from fixtures import TempDir
19from lazr.config import ConfigSchema19from lazr.config import ConfigSchema
20from lazr.config.interfaces import ConfigErrors20from lazr.config.interfaces import ConfigErrors
21import scandir
22import testtools21import testtools
2322
24import lp.services.config23import lp.services.config
@@ -136,7 +135,7 @@ def test_suite():
136 load_testcase = unittest.defaultTestLoader.loadTestsFromTestCase135 load_testcase = unittest.defaultTestLoader.loadTestsFromTestCase
137 # Add a test for every launchpad[.lazr].conf file in our tree.136 # Add a test for every launchpad[.lazr].conf file in our tree.
138 for config_dir in lp.services.config.CONFIG_ROOT_DIRS:137 for config_dir in lp.services.config.CONFIG_ROOT_DIRS:
139 for dirpath, dirnames, filenames in scandir.walk(config_dir):138 for dirpath, dirnames, filenames in os.walk(config_dir):
140 if os.path.basename(dirpath) in EXCLUDED_CONFIGS:139 if os.path.basename(dirpath) in EXCLUDED_CONFIGS:
141 del dirnames[:] # Don't look in subdirectories.140 del dirnames[:] # Don't look in subdirectories.
142 continue141 continue
diff --git a/lib/lp/services/librarianserver/librariangc.py b/lib/lp/services/librarianserver/librariangc.py
index 71c3355..936ef3a 100644
--- a/lib/lp/services/librarianserver/librariangc.py
+++ b/lib/lp/services/librarianserver/librariangc.py
@@ -20,7 +20,6 @@ from time import time
2020
21import iso860121import iso8601
22import pytz22import pytz
23import scandir
24import six23import six
25from swiftclient import client as swiftclient24from swiftclient import client as swiftclient
26from zope.interface import implementer25from zope.interface import implementer
@@ -662,8 +661,8 @@ def delete_unwanted_disk_files(con):
662 hex_content_id_re = re.compile(r'^([0-9a-f]{8})(\.migrated)?$')661 hex_content_id_re = re.compile(r'^([0-9a-f]{8})(\.migrated)?$')
663 ONE_DAY = 24 * 60 * 60662 ONE_DAY = 24 * 60 * 60
664663
665 for dirpath, dirnames, filenames in scandir.walk(664 for dirpath, dirnames, filenames in os.walk(
666 get_storage_root(), followlinks=True):665 get_storage_root(), followlinks=True):
667666
668 # Ignore known and harmless noise in the Librarian storage area.667 # Ignore known and harmless noise in the Librarian storage area.
669 if 'incoming' in dirnames:668 if 'incoming' in dirnames:
diff --git a/lib/lp/services/librarianserver/swift.py b/lib/lp/services/librarianserver/swift.py
index 3f0c6eb..5460448 100644
--- a/lib/lp/services/librarianserver/swift.py
+++ b/lib/lp/services/librarianserver/swift.py
@@ -21,7 +21,6 @@ import os.path
21import re21import re
22import time22import time
2323
24import scandir
25import six24import six
26from six.moves.urllib.parse import quote25from six.moves.urllib.parse import quote
27from swiftclient import client as swiftclient26from swiftclient import client as swiftclient
@@ -90,8 +89,7 @@ def to_swift(log, start_lfc_id=None, end_lfc_id=None,
90 # Walk the Librarian on disk file store, searching for matching89 # Walk the Librarian on disk file store, searching for matching
91 # files that may need to be copied into Swift. We need to follow90 # files that may need to be copied into Swift. We need to follow
92 # symlinks as they are being used span disk partitions.91 # symlinks as they are being used span disk partitions.
93 for dirpath, dirnames, filenames in scandir.walk(92 for dirpath, dirnames, filenames in os.walk(fs_root, followlinks=True):
94 fs_root, followlinks=True):
9593
96 # Don't recurse if we know this directory contains no matching94 # Don't recurse if we know this directory contains no matching
97 # files.95 # files.
diff --git a/lib/lp/services/mail/mailbox.py b/lib/lp/services/mail/mailbox.py
index 5ec49fe..2118176 100644
--- a/lib/lp/services/mail/mailbox.py
+++ b/lib/lp/services/mail/mailbox.py
@@ -16,7 +16,6 @@ import poplib
16import socket16import socket
17import threading17import threading
1818
19import scandir
20from zope.interface import (19from zope.interface import (
21 implementer,20 implementer,
22 Interface,21 Interface,
@@ -170,7 +169,7 @@ class DirectoryMailBox:
170169
171 def items(self):170 def items(self):
172 """See IMailBox."""171 """See IMailBox."""
173 for entry in scandir.scandir(self.mail_dir):172 for entry in os.scandir(self.mail_dir):
174 if entry.is_file():173 if entry.is_file():
175 with open(entry.path, "rb") as mail_file:174 with open(entry.path, "rb") as mail_file:
176 yield (entry.path, mail_file.read())175 yield (entry.path, mail_file.read())
diff --git a/lib/lp/services/scripts/tests/__init__.py b/lib/lp/services/scripts/tests/__init__.py
index 8ca2036..3bd81ba 100644
--- a/lib/lp/services/scripts/tests/__init__.py
+++ b/lib/lp/services/scripts/tests/__init__.py
@@ -10,8 +10,6 @@ __all__ = [
10import os10import os
11import subprocess11import subprocess
1212
13import scandir
14
15import lp13import lp
16from lp.services.config import config14from lp.services.config import config
1715
@@ -34,7 +32,7 @@ def find_lp_scripts():
34 scripts = []32 scripts = []
35 for script_location in SCRIPT_LOCATIONS:33 for script_location in SCRIPT_LOCATIONS:
36 location = os.path.join(LP_TREE, script_location)34 location = os.path.join(LP_TREE, script_location)
37 for path, dirs, filenames in scandir.walk(location):35 for path, dirs, filenames in os.walk(location):
38 for filename in filenames:36 for filename in filenames:
39 script_path = os.path.join(path, filename)37 script_path = os.path.join(path, filename)
40 if (filename.startswith('_') or38 if (filename.startswith('_') or
diff --git a/lib/lp/services/testing/__init__.py b/lib/lp/services/testing/__init__.py
index 0cc4713..41ede34 100644
--- a/lib/lp/services/testing/__init__.py
+++ b/lib/lp/services/testing/__init__.py
@@ -21,8 +21,6 @@ import logging
21import os21import os
22import unittest22import unittest
2323
24import scandir
25
26from lp.testing.systemdocs import (24from lp.testing.systemdocs import (
27 LayeredDocFileSuite,25 LayeredDocFileSuite,
28 setUp,26 setUp,
@@ -100,7 +98,7 @@ def build_test_suite(base_dir, special_tests={},
100 if os.path.exists(stories_path):98 if os.path.exists(stories_path):
101 suite.addTest(PageTestSuite(99 suite.addTest(PageTestSuite(
102 stories_dir, package, setUp=pageTestsSetUp))100 stories_dir, package, setUp=pageTestsSetUp))
103 for story_entry in scandir.scandir(stories_path):101 for story_entry in os.scandir(stories_path):
104 if not story_entry.is_dir():102 if not story_entry.is_dir():
105 continue103 continue
106 story_path = os.path.join(stories_dir, story_entry.name)104 story_path = os.path.join(stories_dir, story_entry.name)
diff --git a/lib/lp/services/webservice/tests/test_wadllib.py b/lib/lp/services/webservice/tests/test_wadllib.py
index bda0f27..382942c 100644
--- a/lib/lp/services/webservice/tests/test_wadllib.py
+++ b/lib/lp/services/webservice/tests/test_wadllib.py
@@ -9,7 +9,6 @@ __all__ = ['test_suite']
9import os9import os
10import unittest10import unittest
1111
12import scandir
13import wadllib12import wadllib
1413
15from lp.testing.systemdocs import LayeredDocFileSuite14from lp.testing.systemdocs import LayeredDocFileSuite
@@ -23,7 +22,7 @@ def test_suite():
2322
24 # Find all the doctests in wadllib.23 # Find all the doctests in wadllib.
25 packages = []24 packages = []
26 for dirpath, dirnames, filenames in scandir.walk(topdir):25 for dirpath, dirnames, filenames in os.walk(topdir):
27 if 'docs' in dirnames:26 if 'docs' in dirnames:
28 docsdir = os.path.join(dirpath, 'docs')[len(topdir) + 1:]27 docsdir = os.path.join(dirpath, 'docs')[len(topdir) + 1:]
29 packages.append(docsdir)28 packages.append(docsdir)
diff --git a/lib/lp/soyuz/doc/soyuz-set-of-uploads.txt b/lib/lp/soyuz/doc/soyuz-set-of-uploads.txt
index 5dcf121..92a08af 100644
--- a/lib/lp/soyuz/doc/soyuz-set-of-uploads.txt
+++ b/lib/lp/soyuz/doc/soyuz-set-of-uploads.txt
@@ -116,12 +116,11 @@ Firstly, we need a way to copy a test upload into the queue (but skip
116lock files, which have names starting with a dot).116lock files, which have names starting with a dot).
117117
118 >>> import shutil118 >>> import shutil
119 >>> import scandir
120 >>> from lp.archiveuploader.tests import datadir119 >>> from lp.archiveuploader.tests import datadir
121 >>> def punt_upload_into_queue(leaf, distro):120 >>> def punt_upload_into_queue(leaf, distro):
122 ... inc_dir = os.path.join(incoming_dir, leaf, distro)121 ... inc_dir = os.path.join(incoming_dir, leaf, distro)
123 ... os.makedirs(inc_dir)122 ... os.makedirs(inc_dir)
124 ... for entry in scandir.scandir(datadir(os.path.join("suite", leaf))):123 ... for entry in os.scandir(datadir(os.path.join("suite", leaf))):
125 ... shutil.copy(entry.path, inc_dir)124 ... shutil.copy(entry.path, inc_dir)
126125
127We need a way to count the items in a queue directory126We need a way to count the items in a queue directory
@@ -614,7 +613,6 @@ release files in the way bug-54039 infected code would.
614613
615First a couple helpers.614First a couple helpers.
616615
617 >>> import os
618 >>> import stat616 >>> import stat
619 >>> from lp.testing.script import run_script617 >>> from lp.testing.script import run_script
620618
diff --git a/lib/lp/soyuz/doc/soyuz-upload.txt b/lib/lp/soyuz/doc/soyuz-upload.txt
index bace025..6f049e9 100644
--- a/lib/lp/soyuz/doc/soyuz-upload.txt
+++ b/lib/lp/soyuz/doc/soyuz-upload.txt
@@ -101,10 +101,9 @@ files match the uploaded ones.
101 ... with open(filename, 'rb') as f:101 ... with open(filename, 'rb') as f:
102 ... return hashlib.md5(f.read()).digest()102 ... return hashlib.md5(f.read()).digest()
103103
104 >>> import scandir
105 >>> def get_upload_dir(num, dir=incoming_dir):104 >>> def get_upload_dir(num, dir=incoming_dir):
106 ... """Return the path to the upload, if found in the dir."""105 ... """Return the path to the upload, if found in the dir."""
107 ... for upload_entry in scandir.scandir(dir):106 ... for upload_entry in os.scandir(dir):
108 ... if upload_entry.name.endswith("%06d" % num):107 ... if upload_entry.name.endswith("%06d" % num):
109 ... return upload_entry.path108 ... return upload_entry.path
110 ... return None109 ... return None
diff --git a/lib/lp/soyuz/scripts/gina/packages.py b/lib/lp/soyuz/scripts/gina/packages.py
index 5feb27c..646b060 100644
--- a/lib/lp/soyuz/scripts/gina/packages.py
+++ b/lib/lp/soyuz/scripts/gina/packages.py
@@ -28,7 +28,6 @@ import re
28import shutil28import shutil
29import tempfile29import tempfile
3030
31import scandir
32import six31import six
3332
34from lp.app.validators.version import valid_debian_version33from lp.app.validators.version import valid_debian_version
@@ -92,7 +91,7 @@ def get_dsc_path(name, version, component, archive_root):
92 return filename, fullpath, component91 return filename, fullpath, component
9392
94 # Do a second pass, scrubbing through all components in the pool.93 # Do a second pass, scrubbing through all components in the pool.
95 for alt_component_entry in scandir.scandir(pool_root):94 for alt_component_entry in os.scandir(pool_root):
96 if not alt_component_entry.is_dir():95 if not alt_component_entry.is_dir():
97 continue96 continue
98 pool_dir = poolify(name, alt_component_entry.name)97 pool_dir = poolify(name, alt_component_entry.name)
diff --git a/lib/lp/soyuz/tests/fakepackager.py b/lib/lp/soyuz/tests/fakepackager.py
index 8106d50..9500ac8 100644
--- a/lib/lp/soyuz/tests/fakepackager.py
+++ b/lib/lp/soyuz/tests/fakepackager.py
@@ -18,7 +18,6 @@ import tarfile
18import tempfile18import tempfile
19import time19import time
2020
21import scandir
22from zope.component import getUtility21from zope.component import getUtility
2322
24from lp.archiveuploader.nascentupload import NascentUpload23from lp.archiveuploader.nascentupload import NascentUpload
@@ -377,7 +376,7 @@ class FakePackager:
377376
378 def listAvailableUploads(self):377 def listAvailableUploads(self):
379 """Return the path for all available changesfiles."""378 """Return the path for all available changesfiles."""
380 changes = [entry.path for entry in scandir.scandir(self.sandbox_path)379 changes = [entry.path for entry in os.scandir(self.sandbox_path)
381 if entry.name.endswith('.changes')]380 if entry.name.endswith('.changes')]
382381
383 return sorted(changes)382 return sorted(changes)
diff --git a/lib/lp/soyuz/tests/test_doc.py b/lib/lp/soyuz/tests/test_doc.py
index 0096084..dc1b5eb 100644
--- a/lib/lp/soyuz/tests/test_doc.py
+++ b/lib/lp/soyuz/tests/test_doc.py
@@ -9,7 +9,6 @@ import logging
9import os9import os
10import unittest10import unittest
1111
12import scandir
13import transaction12import transaction
1413
15from lp.services.config import config14from lp.services.config import config
@@ -167,7 +166,7 @@ def test_suite():
167 stories_dir = os.path.join(os.path.pardir, 'stories')166 stories_dir = os.path.join(os.path.pardir, 'stories')
168 suite.addTest(PageTestSuite(stories_dir))167 suite.addTest(PageTestSuite(stories_dir))
169 stories_path = os.path.join(here, stories_dir)168 stories_path = os.path.join(here, stories_dir)
170 for story_entry in scandir.scandir(stories_path):169 for story_entry in os.scandir(stories_path):
171 if not story_entry.is_dir():170 if not story_entry.is_dir():
172 continue171 continue
173 story_path = os.path.join(stories_dir, story_entry.name)172 story_path = os.path.join(stories_dir, story_entry.name)
diff --git a/lib/lp/soyuz/tests/test_publishing.py b/lib/lp/soyuz/tests/test_publishing.py
index 1d4a1b5..d3d085e 100644
--- a/lib/lp/soyuz/tests/test_publishing.py
+++ b/lib/lp/soyuz/tests/test_publishing.py
@@ -11,7 +11,6 @@ import shutil
11import tempfile11import tempfile
1212
13import pytz13import pytz
14import scandir
15from storm.store import Store14from storm.store import Store
16from testtools.matchers import Equals15from testtools.matchers import Equals
17import transaction16import transaction
@@ -501,7 +500,7 @@ class SoyuzTestPublisher:
501500
502 def _findChangesFile(self, top, name_fragment):501 def _findChangesFile(self, top, name_fragment):
503 """File with given name fragment in directory tree starting at top."""502 """File with given name fragment in directory tree starting at top."""
504 for root, dirs, files in scandir.walk(top, topdown=False):503 for root, dirs, files in os.walk(top, topdown=False):
505 for name in files:504 for name in files:
506 if (name.endswith('.changes') and505 if (name.endswith('.changes') and
507 name.find(name_fragment) > -1):506 name.find(name_fragment) > -1):
diff --git a/lib/lp/testing/__init__.py b/lib/lp/testing/__init__.py
index 8fbd261..b74f3b9 100644
--- a/lib/lp/testing/__init__.py
+++ b/lib/lp/testing/__init__.py
@@ -82,7 +82,6 @@ from lazr.restful.testing.webservice import FakeRequest
82import lp_sitecustomize82import lp_sitecustomize
83import oops_datedir_repo.serializer_rfc82283import oops_datedir_repo.serializer_rfc822
84import pytz84import pytz
85import scandir
86import simplejson85import simplejson
87import six86import six
88from storm.store import Store87from storm.store import Store
@@ -1162,7 +1161,7 @@ def build_yui_unittest_suite(app_testing_path, yui_test_class):
11621161
11631162
1164def _harvest_yui_test_files(file_path):1163def _harvest_yui_test_files(file_path):
1165 for dirpath, dirnames, filenames in scandir.walk(file_path):1164 for dirpath, dirnames, filenames in os.walk(file_path):
1166 for filename in filenames:1165 for filename in filenames:
1167 if fnmatchcase(filename, "test_*.html"):1166 if fnmatchcase(filename, "test_*.html"):
1168 yield os.path.join(dirpath, filename)1167 yield os.path.join(dirpath, filename)
diff --git a/lib/lp/testing/gpgkeys/__init__.py b/lib/lp/testing/gpgkeys/__init__.py
index a1d0378..8387e33 100644
--- a/lib/lp/testing/gpgkeys/__init__.py
+++ b/lib/lp/testing/gpgkeys/__init__.py
@@ -23,7 +23,6 @@ from io import BytesIO
23import os23import os
2424
25import gpgme25import gpgme
26import scandir
27import six26import six
28from zope.component import getUtility27from zope.component import getUtility
2928
@@ -113,7 +112,7 @@ def test_pubkey_from_email(email_addr):
113112
114def test_keyrings():113def test_keyrings():
115 """Iterate over the filenames for test keyrings."""114 """Iterate over the filenames for test keyrings."""
116 for entry in scandir.scandir(gpgkeysdir):115 for entry in os.scandir(gpgkeysdir):
117 if entry.name.endswith('.gpg'):116 if entry.name.endswith('.gpg'):
118 yield entry.path117 yield entry.path
119118
diff --git a/lib/lp/testing/yuixhr.py b/lib/lp/testing/yuixhr.py
index f66295b..beb8c07 100644
--- a/lib/lp/testing/yuixhr.py
+++ b/lib/lp/testing/yuixhr.py
@@ -20,7 +20,6 @@ import unittest
2020
21from lazr.restful import ResourceJSONEncoder21from lazr.restful import ResourceJSONEncoder
22from lazr.restful.utils import get_current_browser_request22from lazr.restful.utils import get_current_browser_request
23import scandir
24import simplejson23import simplejson
25from six.moves import reload_module24from six.moves import reload_module
26from zope.component import getUtility25from zope.component import getUtility
@@ -451,7 +450,7 @@ class YUITestFixtureControllerView(LaunchpadView):
451450
452451
453def find_tests(root):452def find_tests(root):
454 for dirpath, dirnames, filenames in scandir.walk(root):453 for dirpath, dirnames, filenames in os.walk(root):
455 dirpath = os.path.relpath(dirpath, root)454 dirpath = os.path.relpath(dirpath, root)
456 for filename in filenames:455 for filename in filenames:
457 if fnmatchcase(filename, 'test_*.js'):456 if fnmatchcase(filename, 'test_*.js'):
diff --git a/lib/lp/testopenid/stories/tests.py b/lib/lp/testopenid/stories/tests.py
index 0c0d88e..88034e9 100644
--- a/lib/lp/testopenid/stories/tests.py
+++ b/lib/lp/testopenid/stories/tests.py
@@ -4,8 +4,6 @@
4import os4import os
5import unittest5import unittest
66
7import scandir
8
9from lp.testing.pages import PageTestSuite7from lp.testing.pages import PageTestSuite
108
119
@@ -14,7 +12,7 @@ here = os.path.dirname(os.path.realpath(__file__))
1412
15def test_suite():13def test_suite():
16 stories = sorted(14 stories = sorted(
17 entry.name for entry in scandir.scandir(here)15 entry.name for entry in os.scandir(here)
18 if not entry.name.startswith('.') and entry.is_dir())16 if not entry.name.startswith('.') and entry.is_dir())
1917
20 suite = unittest.TestSuite()18 suite = unittest.TestSuite()
diff --git a/lib/lp/tests/test_opensource.py b/lib/lp/tests/test_opensource.py
index 11fefc5..a3d67ef 100644
--- a/lib/lp/tests/test_opensource.py
+++ b/lib/lp/tests/test_opensource.py
@@ -21,7 +21,6 @@ import os
21import unittest21import unittest
2222
23import launchpadlib23import launchpadlib
24import scandir
25import wadllib24import wadllib
2625
27from lp.testing.layers import AppServerLayer26from lp.testing.layers import AppServerLayer
@@ -33,7 +32,7 @@ def add_testable_opensource_package(suite, package):
33 topdir = os.path.dirname(package.__file__)32 topdir = os.path.dirname(package.__file__)
3433
35 packages = []34 packages = []
36 for dirpath, dirnames, filenames in scandir.walk(topdir):35 for dirpath, dirnames, filenames in os.walk(topdir):
37 if 'docs' in dirnames:36 if 'docs' in dirnames:
38 docsdir = os.path.join(dirpath, 'docs')[len(topdir) + 1:]37 docsdir = os.path.join(dirpath, 'docs')[len(topdir) + 1:]
39 packages.append(docsdir)38 packages.append(docsdir)
diff --git a/lib/lp/translations/tests/test_doc.py b/lib/lp/translations/tests/test_doc.py
index 9229590..2ec46ee 100644
--- a/lib/lp/translations/tests/test_doc.py
+++ b/lib/lp/translations/tests/test_doc.py
@@ -9,8 +9,6 @@ import logging
9import os9import os
10import unittest10import unittest
1111
12import scandir
13
14from lp.testing.layers import (12from lp.testing.layers import (
15 LaunchpadFunctionalLayer,13 LaunchpadFunctionalLayer,
16 LaunchpadZopelessLayer,14 LaunchpadZopelessLayer,
@@ -62,7 +60,7 @@ def test_suite():
62 stories_dir = os.path.join(os.path.pardir, 'stories')60 stories_dir = os.path.join(os.path.pardir, 'stories')
63 suite.addTest(PageTestSuite(stories_dir))61 suite.addTest(PageTestSuite(stories_dir))
64 stories_path = os.path.join(here, stories_dir)62 stories_path = os.path.join(here, stories_dir)
65 for story_entry in scandir.scandir(stories_path):63 for story_entry in os.scandir(stories_path):
66 if not story_entry.is_dir():64 if not story_entry.is_dir():
67 continue65 continue
68 story_path = os.path.join(stories_dir, story_entry.name)66 story_path = os.path.join(stories_dir, story_entry.name)
diff --git a/requirements/launchpad.txt b/requirements/launchpad.txt
index e05a33f..12a04b1 100644
--- a/requirements/launchpad.txt
+++ b/requirements/launchpad.txt
@@ -128,7 +128,6 @@ requests-file==1.4.3
128requests-toolbelt==0.9.1128requests-toolbelt==0.9.1
129responses==0.9.0129responses==0.9.0
130s3transfer==0.3.6130s3transfer==0.3.6
131scandir==1.7
132secure-cookie==0.1.0131secure-cookie==0.1.0
133service-identity==18.1.0132service-identity==18.1.0
134setproctitle==1.1.7133setproctitle==1.1.7
diff --git a/scripts/migrate-librarian-content-md5.py b/scripts/migrate-librarian-content-md5.py
index 9caaf62..0031a73 100755
--- a/scripts/migrate-librarian-content-md5.py
+++ b/scripts/migrate-librarian-content-md5.py
@@ -13,8 +13,6 @@ import os
13import subprocess13import subprocess
14import sys14import sys
1515
16import scandir
17
1816
19SQL = "UPDATE LibraryFileContent SET md5 = '%s' WHERE id = %d;"17SQL = "UPDATE LibraryFileContent SET md5 = '%s' WHERE id = %d;"
2018
@@ -23,7 +21,7 @@ def main(path, minimumID=0):
23 if not path.endswith('/'):21 if not path.endswith('/'):
24 path += '/'22 path += '/'
2523
26 for dirpath, dirname, filenames in scandir.walk(path):24 for dirpath, dirname, filenames in os.walk(path):
27 dirname.sort()25 dirname.sort()
28 databaseID = dirpath[len(path):]26 databaseID = dirpath[len(path):]
29 if not len(databaseID) == 8: # "xx/xx/xx"27 if not len(databaseID) == 8: # "xx/xx/xx"
diff --git a/setup.py b/setup.py
index c10e833..6e945a8 100644
--- a/setup.py
+++ b/setup.py
@@ -214,7 +214,6 @@ setup(
214 'requests-file',214 'requests-file',
215 'requests-toolbelt',215 'requests-toolbelt',
216 'responses',216 'responses',
217 'scandir',
218 'secure-cookie',217 'secure-cookie',
219 'setproctitle',218 'setproctitle',
220 'setuptools',219 'setuptools',

Subscribers

People subscribed via source and target branches

to status/vote changes: