diff --git a/cms/pytest.ini b/cms/pytest.ini index 7f6e49c83e5b..c18bf1d66f31 100644 --- a/cms/pytest.ini +++ b/cms/pytest.ini @@ -12,6 +12,16 @@ 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 + # 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 + ignore:'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning:wiki + 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 ffbe9c134ef3..5df48c9325ee 100644 --- a/common/test/pytest.ini +++ b/common/test/pytest.ini @@ -11,4 +11,14 @@ 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 + # 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 + ignore:'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning:wiki + norecursedirs = .cache diff --git a/openedx/core/djangoapps/contentserver/middleware.py b/openedx/core/djangoapps/contentserver/middleware.py index 7bdb429b815e..12c63365a475 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/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 8a35865b0909..f813be5c8fb7 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -126,6 +126,38 @@ 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 + ) + warnings.filterwarnings( + 'ignore', + 'Instead access HTTPResponse.headers directly.*', + 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", + ) + warnings.filterwarnings( + 'ignore', + 'Deprecated call to `pkg_resources.declare_namespace.*', + category=DeprecationWarning, + ) + warnings.filterwarnings( + 'ignore', + '.*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 fe889355a753..8e643ab668da 100644 --- a/setup.cfg +++ b/setup.cfg @@ -12,6 +12,17 @@ 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 + 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 + 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 python_classes = diff --git a/xmodule/modulestore/store_utilities.py b/xmodule/modulestore/store_utilities.py index ced5c9728ec0..e9710fbc92ce 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): diff --git a/xmodule/seq_block.py b/xmodule/seq_block.py index 1faa48780864..2b9aed2dd732 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): """