From 66c5be8c02c2f73a6be4135beca4cf0e35a3524a Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 09:06:24 -0300 Subject: [PATCH 1/7] chore: ignore default_app_config warning related issue: https://github.com/openedx/edx-platform/issues/33572 --- cms/pytest.ini | 2 ++ common/test/pytest.ini | 2 ++ openedx/core/lib/logsettings.py | 6 ++++++ setup.cfg | 3 +++ 4 files changed, 13 insertions(+) diff --git a/cms/pytest.ini b/cms/pytest.ini index 7f6e49c83e5..50ce783b3a3 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -12,6 +12,8 @@ filterwarnings = default ignore:No request passed to the backend, unable to rate-limit:UserWarning ignore::xblock.exceptions.FieldDataDeprecationWarning + # Remove default_app_config warning after updating Django to 4.2 + ignore:.*You can remove default_app_config.*:PendingDeprecationWarning norecursedirs = envs python_classes = python_files = test.py tests.py test_*.py *_tests.py diff --git a/common/test/pytest.ini b/common/test/pytest.ini index ffbe9c134ef..d700a3c3882 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -11,4 +11,6 @@ filterwarnings = default ignore:No request passed to the backend, unable to rate-limit:UserWarning ignore::xblock.exceptions.FieldDataDeprecationWarning + # Remove default_app_config warning after updating Django to 4.2 + ignore:.*You can remove default_app_config.*:PendingDeprecationWarning norecursedirs = .cache diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 8a35865b090..64609673f22 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -126,6 +126,12 @@ def log_python_warnings(): warnings.filterwarnings('ignore', 'Setting _field_data is deprecated') warnings.filterwarnings('ignore', 'Setting _field_data via the constructor is deprecated') warnings.filterwarnings('ignore', '.*unclosed.*', category=ResourceWarning) + # Remove default_app_config warning after updating Django to 4.2 + warnings.filterwarnings( + 'ignore', + '.*You can remove default_app_config.*', + category=PendingDeprecationWarning + ) # try: # # There are far too many of these deprecation warnings in startup to output for every management command; # # suppress them until we've fixed at least the most common ones as reported by the test suite diff --git a/setup.cfg b/setup.cfg index fe889355a75..bfde00f48bc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -12,6 +12,9 @@ filterwarnings = default ignore:No request passed to the backend, unable to rate-limit:UserWarning ignore::xblock.exceptions.FieldDataDeprecationWarning + # Remove default_app_config warning after updating Django to 4.2 + ignore:.*You can remove default_app_config.*:PendingDeprecationWarning + junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs python_classes = From d2f427a672c219cf0cbba6ef6869a6ebc52f43f6 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 19:53:36 -0300 Subject: [PATCH 2/7] chore: ignore HTTPResponse.getheaders() deprecation warning related issue: https://github.com/openedx/edx-platform/issues/33584 note: this warning is rased from a third party library (elasticsearch) --- cms/pytest.ini | 2 ++ common/test/pytest.ini | 2 ++ openedx/core/lib/logsettings.py | 6 ++++++ setup.cfg | 1 + 4 files changed, 11 insertions(+) diff --git a/cms/pytest.ini b/cms/pytest.ini index 50ce783b3a3..1bfc59dbbea 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -14,6 +14,8 @@ filterwarnings = ignore::xblock.exceptions.FieldDataDeprecationWarning # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning + ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch + norecursedirs = envs python_classes = python_files = test.py tests.py test_*.py *_tests.py diff --git a/common/test/pytest.ini b/common/test/pytest.ini index d700a3c3882..1fc58225057 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -13,4 +13,6 @@ filterwarnings = ignore::xblock.exceptions.FieldDataDeprecationWarning # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning + ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch + norecursedirs = .cache diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 64609673f22..67bfd9c8717 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -132,6 +132,12 @@ def log_python_warnings(): '.*You can remove default_app_config.*', category=PendingDeprecationWarning ) + warnings.filterwarnings( + 'ignore', + 'Instead access HTTPResponse.headers directly.*', + category=DeprecationWarning, + module='elasticsearch' + ) # try: # # There are far too many of these deprecation warnings in startup to output for every management command; # # suppress them until we've fixed at least the most common ones as reported by the test suite diff --git a/setup.cfg b/setup.cfg index bfde00f48bc..6e9a4b44e2c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -14,6 +14,7 @@ filterwarnings = ignore::xblock.exceptions.FieldDataDeprecationWarning # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning + ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs From ef0a9c00af10f0cbdd7f8fb91def359145b65428 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 19:59:59 -0300 Subject: [PATCH 3/7] chore: ignore import ABCs from 'collections' warning related issue: https://github.com/openedx/edx-platform/issues/33584 note: this warning is from a third party library (libsass) --- cms/pytest.ini | 3 ++- common/test/pytest.ini | 4 ++-- openedx/core/lib/logsettings.py | 6 ++++++ setup.cfg | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cms/pytest.ini b/cms/pytest.ini index 1bfc59dbbea..2c7bc22f3a1 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -14,7 +14,8 @@ filterwarnings = ignore::xblock.exceptions.FieldDataDeprecationWarning # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning - ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch + # ABC deprecation Warning comes from libsass + ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass norecursedirs = envs python_classes = diff --git a/common/test/pytest.ini b/common/test/pytest.ini index 1fc58225057..a4fcf204236 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -13,6 +13,6 @@ filterwarnings = ignore::xblock.exceptions.FieldDataDeprecationWarning # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning - ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch - + # ABC deprecation Warning comes from libsass + ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass norecursedirs = .cache diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 67bfd9c8717..0ea195f1f27 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -138,6 +138,12 @@ def log_python_warnings(): category=DeprecationWarning, module='elasticsearch' ) + warnings.filterwarnings( + 'ignore', + 'Using or importing the ABCs from \'collections\' instead of from \'collections.abc\' is deprecated.*', + category=DeprecationWarning, + module="sass", + ) # try: # # There are far too many of these deprecation warnings in startup to output for every management command; # # suppress them until we've fixed at least the most common ones as reported by the test suite diff --git a/setup.cfg b/setup.cfg index 6e9a4b44e2c..cc48260efc7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -15,6 +15,8 @@ filterwarnings = # Remove default_app_config warning after updating Django to 4.2 ignore:.*You can remove default_app_config.*:PendingDeprecationWarning ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch + # ABC deprecation Warning comes from libsass + ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs From 72be4812bfc8023d07b16283c43d5cc05eee1223 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 20:12:16 -0300 Subject: [PATCH 4/7] chore: replace newrelic add_custom_parameter deprecated method related issue: https://github.com/openedx/edx-platform/issues/33584 note: it has been replaced with add_custom_attribute. it is just a rename https://docs.newrelic.com/docs/release-notes/agent-release-notes/python-release-notes/python-agent-80300/ --- .../djangoapps/contentserver/middleware.py | 20 ++++++++--------- xmodule/seq_block.py | 22 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/openedx/core/djangoapps/contentserver/middleware.py b/openedx/core/djangoapps/contentserver/middleware.py index 7bdb429b815..12c63365a47 100644 --- a/openedx/core/djangoapps/contentserver/middleware.py +++ b/openedx/core/djangoapps/contentserver/middleware.py @@ -100,17 +100,17 @@ def process_request(self, request): safe_course_key = safe_course_key.replace(run='only') if newrelic: - newrelic.agent.add_custom_parameter('course_id', safe_course_key) - newrelic.agent.add_custom_parameter('org', loc.org) - newrelic.agent.add_custom_parameter('contentserver.path', loc.path) + newrelic.agent.add_custom_attribute('course_id', safe_course_key) + newrelic.agent.add_custom_attribute('org', loc.org) + newrelic.agent.add_custom_attribute('contentserver.path', loc.path) # Figure out if this is a CDN using us as the origin. is_from_cdn = StaticContentServer.is_cdn_request(request) - newrelic.agent.add_custom_parameter('contentserver.from_cdn', is_from_cdn) + newrelic.agent.add_custom_attribute('contentserver.from_cdn', is_from_cdn) # Check if this content is locked or not. locked = self.is_content_locked(content) - newrelic.agent.add_custom_parameter('contentserver.locked', locked) + newrelic.agent.add_custom_attribute('contentserver.locked', locked) # Check that user has access to the content. if not self.is_user_authorized(request, content, loc): @@ -169,7 +169,7 @@ def process_request(self, request): response.status_code = 206 # Partial Content if newrelic: - newrelic.agent.add_custom_parameter('contentserver.ranged', True) + newrelic.agent.add_custom_attribute('contentserver.ranged', True) else: log.warning( "Cannot satisfy ranges in Range header: %s for content: %s", @@ -183,8 +183,8 @@ def process_request(self, request): response['Content-Length'] = content.length if newrelic: - newrelic.agent.add_custom_parameter('contentserver.content_len', content.length) - newrelic.agent.add_custom_parameter('contentserver.content_type', content.content_type) + newrelic.agent.add_custom_attribute('contentserver.content_len', content.length) + newrelic.agent.add_custom_attribute('contentserver.content_type', content.content_type) # "Accept-Ranges: bytes" tells the user that only "bytes" ranges are allowed response['Accept-Ranges'] = 'bytes' @@ -214,13 +214,13 @@ def set_caching_headers(self, content, response): cache_ttl = CourseAssetCacheTtlConfig.get_cache_ttl() if cache_ttl > 0 and not is_locked: if newrelic: - newrelic.agent.add_custom_parameter('contentserver.cacheable', True) + newrelic.agent.add_custom_attribute('contentserver.cacheable', True) response['Expires'] = StaticContentServer.get_expiration_value(datetime.datetime.utcnow(), cache_ttl) response['Cache-Control'] = "public, max-age={ttl}, s-maxage={ttl}".format(ttl=cache_ttl) elif is_locked: if newrelic: - newrelic.agent.add_custom_parameter('contentserver.cacheable', False) + newrelic.agent.add_custom_attribute('contentserver.cacheable', False) response['Cache-Control'] = "private, no-cache, no-store" diff --git a/xmodule/seq_block.py b/xmodule/seq_block.py index 1faa4878086..2b9aed2dd73 100644 --- a/xmodule/seq_block.py +++ b/xmodule/seq_block.py @@ -832,10 +832,10 @@ def _capture_basic_metrics(self): """ if not newrelic: return - newrelic.agent.add_custom_parameter('seq.block_id', str(self.location)) - newrelic.agent.add_custom_parameter('seq.display_name', self.display_name or '') - newrelic.agent.add_custom_parameter('seq.position', self.position) - newrelic.agent.add_custom_parameter('seq.is_time_limited', self.is_time_limited) + newrelic.agent.add_custom_attribute('seq.block_id', str(self.location)) + newrelic.agent.add_custom_attribute('seq.display_name', self.display_name or '') + newrelic.agent.add_custom_attribute('seq.position', self.position) + newrelic.agent.add_custom_attribute('seq.is_time_limited', self.is_time_limited) def _capture_full_seq_item_metrics(self, children): """ @@ -847,17 +847,17 @@ def _capture_full_seq_item_metrics(self, children): return # Basic count of the number of Units (a.k.a. VerticalBlocks) we have in # this learning sequence - newrelic.agent.add_custom_parameter('seq.num_units', len(children)) + newrelic.agent.add_custom_attribute('seq.num_units', len(children)) # Count of all modules (leaf nodes) in this sequence (e.g. videos, # problems, etc.) The units (verticals) themselves are not counted. all_item_keys = self._locations_in_subtree(self) - newrelic.agent.add_custom_parameter('seq.num_items', len(all_item_keys)) + newrelic.agent.add_custom_attribute('seq.num_items', len(all_item_keys)) # Count of all modules by block_type (e.g. "video": 2, "discussion": 4) block_counts = collections.Counter(usage_key.block_type for usage_key in all_item_keys) for block_type, count in block_counts.items(): - newrelic.agent.add_custom_parameter(f'seq.block_counts.{block_type}', count) + newrelic.agent.add_custom_attribute(f'seq.block_counts.{block_type}', count) def _capture_current_unit_metrics(self, children): """ @@ -871,15 +871,15 @@ def _capture_current_unit_metrics(self, children): if 1 <= self.position <= len(children): # Basic info about the Unit... current = children[self.position - 1] - newrelic.agent.add_custom_parameter('seq.current.block_id', str(current.location)) - newrelic.agent.add_custom_parameter('seq.current.display_name', current.display_name or '') + newrelic.agent.add_custom_attribute('seq.current.block_id', str(current.location)) + newrelic.agent.add_custom_attribute('seq.current.display_name', current.display_name or '') # Examining all blocks inside the Unit (or split_test, conditional, etc.) child_locs = self._locations_in_subtree(current) - newrelic.agent.add_custom_parameter('seq.current.num_items', len(child_locs)) + newrelic.agent.add_custom_attribute('seq.current.num_items', len(child_locs)) curr_block_counts = collections.Counter(usage_key.block_type for usage_key in child_locs) for block_type, count in curr_block_counts.items(): - newrelic.agent.add_custom_parameter(f'seq.current.block_counts.{block_type}', count) + newrelic.agent.add_custom_attribute(f'seq.current.block_counts.{block_type}', count) def _time_limited_student_view(self): """ From 115c65aa182c5de21fa13f7056bc7727ba64f892 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 20:16:44 -0300 Subject: [PATCH 5/7] fix: flags not at the start of the expression related issue: https://github.com/openedx/edx-platform/issues/33585 --- xmodule/modulestore/store_utilities.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmodule/modulestore/store_utilities.py b/xmodule/modulestore/store_utilities.py index ced5c9728ec..e9710fbc92c 100644 --- a/xmodule/modulestore/store_utilities.py +++ b/xmodule/modulestore/store_utilities.py @@ -17,11 +17,11 @@ def _prefix_only_url_replace_regex(pattern): Match urls in quotes pulling out the fields from pattern """ return re.compile(""" - (?x) # flags=re.VERBOSE (?P\\\\?['"]) # the opening quotes {} (?P=quote) # the first matching closing quote - """.format(pattern)) + """.format(pattern), + flags=re.VERBOSE) def rewrite_nonportable_content_links(source_course_id, dest_course_id, text): From 9752da2b033e87945095833b3ec8cc67fa0aee23 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 25 Oct 2023 20:32:00 -0300 Subject: [PATCH 6/7] chore: ignore warning from pkg_resources.declare_namespace Related issue: https://github.com/openedx/edx-platform/issues/33592 --- cms/pytest.ini | 4 ++++ common/test/pytest.ini | 5 +++++ openedx/core/lib/logsettings.py | 10 ++++++++++ setup.cfg | 4 ++++ 4 files changed, 23 insertions(+) diff --git a/cms/pytest.ini b/cms/pytest.ini index 2c7bc22f3a1..65e35095890 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -16,6 +16,10 @@ filterwarnings = ignore:.*You can remove default_app_config.*:PendingDeprecationWarning # ABC deprecation Warning comes from libsass ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass + # declare_namespace Warning comes from XBlock https://github.com/openedx/XBlock/issues/641 + # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 + ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning + ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning norecursedirs = envs python_classes = diff --git a/common/test/pytest.ini b/common/test/pytest.ini index a4fcf204236..05d334a6e1b 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -15,4 +15,9 @@ filterwarnings = ignore:.*You can remove default_app_config.*:PendingDeprecationWarning # ABC deprecation Warning comes from libsass ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass + # declare_namespace Warning comes from XBlock https://github.com/openedx/XBlock/issues/641 + # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 + ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning + ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning + norecursedirs = .cache diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 0ea195f1f27..eea23df14ef 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -144,6 +144,16 @@ def log_python_warnings(): category=DeprecationWarning, module="sass", ) + warnings.filterwarnings( + 'ignore', + 'Deprecated call to `pkg_resources.declare_namespace.*', + category=DeprecationWarning, + ) + warnings.filterwarnings( + 'ignore', + '.*pkg_resources is deprecated as an API.*', + category=DeprecationWarning, + ) # try: # # There are far too many of these deprecation warnings in startup to output for every management command; # # suppress them until we've fixed at least the most common ones as reported by the test suite diff --git a/setup.cfg b/setup.cfg index cc48260efc7..27ecdc7cea7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,6 +17,10 @@ filterwarnings = ignore:Instead access HTTPResponse.headers directly.*:DeprecationWarning:elasticsearch # ABC deprecation Warning comes from libsass ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated.*:DeprecationWarning:sass + # declare_namespace Warning comes from XBlock https://github.com/openedx/XBlock/issues/641 + # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 + ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning + ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs From 398c84e1bc319bafe09a905beba7410abc538692 Mon Sep 17 00:00:00 2001 From: Daniel Valenzuela Date: Wed, 1 Nov 2023 00:13:33 -0300 Subject: [PATCH 7/7] chore: ignore 'etree' is deprecated Related issue: https://github.com/openedx/edx-platform/issues/32888 --- cms/pytest.ini | 1 + common/test/pytest.ini | 1 + openedx/core/lib/logsettings.py | 4 ++++ setup.cfg | 1 + 4 files changed, 7 insertions(+) diff --git a/cms/pytest.ini b/cms/pytest.ini index 65e35095890..c18bf1d66f3 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -20,6 +20,7 @@ filterwarnings = # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning + ignore:'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning:wiki norecursedirs = envs python_classes = diff --git a/common/test/pytest.ini b/common/test/pytest.ini index 05d334a6e1b..5df48c9325e 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -19,5 +19,6 @@ filterwarnings = # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning + ignore:'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning:wiki norecursedirs = .cache diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index eea23df14ef..f813be5c8fb 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -154,6 +154,10 @@ def log_python_warnings(): '.*pkg_resources is deprecated as an API.*', category=DeprecationWarning, ) + warnings.filterwarnings( + 'ignore', "'etree' is deprecated. Use 'xml.etree.ElementTree' instead.", + category=DeprecationWarning, module='wiki' + ) # try: # # There are far too many of these deprecation warnings in startup to output for every management command; # # suppress them until we've fixed at least the most common ones as reported by the test suite diff --git a/setup.cfg b/setup.cfg index 27ecdc7cea7..8e643ab668d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,6 +21,7 @@ filterwarnings = # and also due to dependency: https://github.com/PyFilesystem/pyfilesystem2 ignore:Deprecated call to `pkg_resources.declare_namespace.*:DeprecationWarning ignore:.*pkg_resources is deprecated as an API.*:DeprecationWarning + ignore:'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning:wiki junit_family = xunit2 norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs