diff --git a/lms/djangoapps/courseware/access_utils.py b/lms/djangoapps/courseware/access_utils.py index 2e7c2fb330d3..059a11e5b308 100644 --- a/lms/djangoapps/courseware/access_utils.py +++ b/lms/djangoapps/courseware/access_utils.py @@ -87,13 +87,7 @@ def check_start_date(user, days_early_for_beta, start, course_key, display_error if now is None: now = datetime.now(UTC) effective_start = adjust_start_date(user, days_early_for_beta, start, course_key) - - # Todo: This log statement is added for temporary use only - log.info('Python-dateutil logs: Comparing current date with effective start date') - should_grant_access = now > effective_start - # Todo: This log statement is added for temporary use only - log.info('Python-dateutil logs: Successfully compared current date with effective start date') - if should_grant_access: + if now > effective_start: return ACCESS_GRANTED return StartDateError(start, display_error_to_user=display_error_to_user) diff --git a/lms/djangoapps/courseware/courses.py b/lms/djangoapps/courseware/courses.py index 93c58f20aa01..cd755a8d476f 100644 --- a/lms/djangoapps/courseware/courses.py +++ b/lms/djangoapps/courseware/courses.py @@ -557,11 +557,6 @@ def get_course_assignments(course_key, user, include_access=False): # lint-amne """ if not user.id: return [] - - # Todo: This log statement is added for temporary use only - log.info('Python-dateutil logs: Trying to get course assignment for user: {} of course: {}'.format( - user.id, course_key)) - store = modulestore() course_usage_key = store.make_course_usage_key(course_key) block_data = get_course_blocks(user, course_usage_key, allow_start_dates_in_future=True, include_completion=True) @@ -663,9 +658,7 @@ def get_course_assignments(course_key, user, include_access=False): # lint-amne _("Open Response Assessment due dates are set by your instructor and can't be shifted."), first_component_block_id, )) - # Todo: This log statement is added for temporary use only - log.info('Python-dateutil logs: Successfully got course assignments for user: {} of course: {}'.format( - user.id, course_key)) + return assignments diff --git a/lms/djangoapps/instructor/tests/test_api.py b/lms/djangoapps/instructor/tests/test_api.py index d24e65b5c6a7..92d9625f1c93 100644 --- a/lms/djangoapps/instructor/tests/test_api.py +++ b/lms/djangoapps/instructor/tests/test_api.py @@ -3506,8 +3506,8 @@ def test_send_email_with_malformed_schedule_expect_error(self, mock_task_api): schedule = "Blub Glub" self.full_test_message['schedule'] = "Blub Glub" expected_message = ( - f"Error occurred creating a scheduled bulk email task. Schedule provided: '{schedule}'. Error: Unknown " - "string format: Blub Glub" + f"Error occurred creating a scheduled bulk email task. Schedule provided: '{schedule}'. Error: unknown " + "string format" ) url = reverse('send_email', kwargs={'course_id': str(self.course.id)}) diff --git a/openedx/core/djangoapps/content/block_structure/block_structure.py b/openedx/core/djangoapps/content/block_structure/block_structure.py index 17e06546d45f..a8d10c4d81fb 100644 --- a/openedx/core/djangoapps/content/block_structure/block_structure.py +++ b/openedx/core/djangoapps/content/block_structure/block_structure.py @@ -11,12 +11,9 @@ from copy import deepcopy -from datetime import datetime from functools import partial from logging import getLogger -from dateutil.tz import tzlocal - from openedx.core.lib.graph_traversals import traverse_post_order, traverse_topologically from .exceptions import TransformerException @@ -467,8 +464,7 @@ def get_xblock_field(self, usage_key, field_name, default=None): not found. """ block_data = self._block_data_map.get(usage_key) - xblock_field = getattr(block_data, field_name, default) if block_data else default - return self._make_datetime_field_compatible(xblock_field) + return getattr(block_data, field_name, default) if block_data else default def override_xblock_field(self, usage_key, field_name, override_data): """ @@ -558,8 +554,7 @@ def get_transformer_block_field(self, usage_key, transformer, key, default=None) transformer_data = self.get_transformer_block_data(usage_key, transformer) except KeyError: return default - field = getattr(transformer_data, key, default) - return self._make_datetime_field_compatible(field) + return getattr(transformer_data, key, default) def set_transformer_block_field(self, usage_key, transformer, key, value): """ @@ -768,24 +763,6 @@ def _get_or_create_block(self, usage_key): self._block_data_map[usage_key] = block_data return block_data - def _make_datetime_field_compatible(self, field): - """ - Creates a new datetime object to avoid issues occurring due to upgrading - python-datetuil version from 2.4.0 - - More info: https://openedx.atlassian.net/browse/BOM-2245 - """ - if isinstance(field, datetime): - if isinstance(field.tzinfo, tzlocal) and not hasattr(field.tzinfo, '_hasdst'): - # Todo: This log statement is added for temporary use only - logger.info('Python-dateutil logs: Making datetime field compatible to python-dateutil package') - return datetime( - year=field.year, month=field.month, day=field.day, - hour=field.hour, minute=field.minute, second=field.second, - tzinfo=tzlocal() - ) - return field - class BlockStructureModulestoreData(BlockStructureBlockData): """ diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 63a65cfee187..9c063105a99b 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -27,14 +27,23 @@ django-storages<1.9 # for them. edx-enterprise==3.49.7 +# Newer versions need a more recent version of python-dateutil +freezegun==0.3.12 + # oauthlib>3.0.1 causes test failures ( also remove the django-oauth-toolkit constraint when this is fixed ) oauthlib==3.0.1 # django-auth-toolkit==1.3.3 requires oauthlib>=3.1.0 which is pinned because of test failures django-oauth-toolkit<=1.3.2 -# Will be updated once we update python-dateutil package +# Upgrading to 2.5.3 on 2020-01-03 triggered "'tzlocal' object has no attribute '_std_offset'" errors in production +python-dateutil==2.4.0 +# matplotlib>=3.4.0 requires python-dateutil>=2.7 matplotlib<3.4.0 +# pandas>0.22.0 requires python-dateutil>=2.5.0 +pandas==0.22.0 +# networkx>=2.6 requires pandas>=1.1 +networkx<2.6 # tests failing for pymongo==3.11 pymongo<3.11 @@ -56,9 +65,6 @@ edxval<2.1 # version of py2neo will work with Neo4j 3.5. py2neo<2022 -# pylint==2.14.0 is causing test failures -pylint==2.13.9 - # Sphinx requires docutils<0.18. This pin can be removed once https://github.com/sphinx-doc/sphinx/issues/9777 is closed. docutils<0.18 @@ -73,3 +79,4 @@ scipy<1.8.0 # This will be fixed when sphinxcontrib-openapi depends on m2r2 instead of m2r # See issue: https://github.com/sphinx-contrib/openapi/issues/123 mistune<2.0.0 + diff --git a/requirements/edx-sandbox/py38.txt b/requirements/edx-sandbox/py38.txt index fb7f568eb18a..8e164568f4c1 100644 --- a/requirements/edx-sandbox/py38.txt +++ b/requirements/edx-sandbox/py38.txt @@ -18,11 +18,13 @@ cryptography==37.0.2 # via -r requirements/edx-sandbox/py38.in cycler==0.11.0 # via matplotlib +decorator==4.4.2 + # via networkx joblib==1.1.0 # via nltk kiwisolver==1.4.2 # via matplotlib -lxml==4.9.0 +lxml==4.8.0 # via # -r requirements/edx-sandbox/py38.in # openedx-calc @@ -36,8 +38,10 @@ matplotlib==3.3.4 # -r requirements/edx-sandbox/py38.in mpmath==1.2.1 # via sympy -networkx==2.8.2 - # via -r requirements/edx-sandbox/py38.in +networkx==2.5.1 + # via + # -c requirements/edx-sandbox/../constraints.txt + # -r requirements/edx-sandbox/py38.in nltk==3.7 # via # -r requirements/edx-sandbox/py38.in @@ -61,11 +65,13 @@ pyparsing==3.0.9 # chem # matplotlib # openedx-calc -python-dateutil==2.8.2 - # via matplotlib +python-dateutil==2.4.0 + # via + # -c requirements/edx-sandbox/../constraints.txt + # matplotlib random2==1.0.1 # via -r requirements/edx-sandbox/py38.in -regex==2022.6.2 +regex==2022.4.24 # via nltk scipy==1.7.3 # via diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 3da22da3ddf6..6f2cc53d7de7 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -161,7 +161,7 @@ cryptography==37.0.2 # jwcrypto # pyjwt # social-auth-core -cssutils==2.4.1 +cssutils==2.4.0 # via pynliner ddt==1.5.0 # via @@ -639,9 +639,9 @@ libsass==0.10.0 # ora2 loremipsum==1.0.5 # via ora2 -lti-consumer-xblock==4.1.1 +lti-consumer-xblock==4.1.0 # via -r requirements/edx/base.in -lxml==4.9.0 +lxml==4.8.0 # via # -r requirements/edx/base.in # edxval @@ -834,8 +834,9 @@ pysrt==1.1.2 # via # -r requirements/edx/base.in # edxval -python-dateutil==2.8.2 +python-dateutil==2.4.0 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/base.in # analytics-python # botocore @@ -896,9 +897,9 @@ random2==1.0.1 # via -r requirements/edx/base.in recommender-xblock==2.0.1 # via -r requirements/edx/base.in -redis==4.3.3 +redis==4.3.1 # via -r requirements/edx/base.in -regex==2022.6.2 +regex==2022.4.24 # via nltk requests==2.27.1 # via diff --git a/requirements/edx/coverage.txt b/requirements/edx/coverage.txt index 4385055d3f66..4255da5d7db7 100644 --- a/requirements/edx/coverage.txt +++ b/requirements/edx/coverage.txt @@ -6,7 +6,7 @@ # chardet==4.0.0 # via diff-cover -coverage==6.4.1 +coverage==6.4 # via -r requirements/edx/coverage.in diff-cover==6.5.0 # via -r requirements/edx/coverage.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index e80885ff996e..410e6c8e4b88 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -214,7 +214,7 @@ coreschema==0.0.4 # -r requirements/edx/testing.txt # coreapi # drf-yasg -coverage[toml]==6.4.1 +coverage[toml]==6.4 # via # -r requirements/edx/testing.txt # pytest-cov @@ -232,7 +232,7 @@ cssselect==1.1.0 # via # -r requirements/edx/testing.txt # pyquery -cssutils==2.4.1 +cssutils==2.4.0 # via # -r requirements/edx/testing.txt # pynliner @@ -693,13 +693,15 @@ fastavro==1.4.12 # via # -r requirements/edx/testing.txt # openedx-events -filelock==3.7.1 +filelock==3.7.0 # via # -r requirements/edx/testing.txt # tox # virtualenv -freezegun==1.2.1 - # via -r requirements/edx/testing.txt +freezegun==0.3.12 + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/testing.txt frozenlist==1.3.0 # via # -r requirements/edx/testing.txt @@ -811,7 +813,7 @@ jsonfield==3.1.0 # edx-submissions # lti-consumer-xblock # ora2 -jsonschema==4.6.0 +jsonschema==4.5.1 # via sphinxcontrib-openapi jwcrypto==1.3.1 # via @@ -842,9 +844,9 @@ loremipsum==1.0.5 # via # -r requirements/edx/testing.txt # ora2 -lti-consumer-xblock==4.1.1 +lti-consumer-xblock==4.1.0 # via -r requirements/edx/testing.txt -lxml==4.9.0 +lxml==4.8.0 # via # -r requirements/edx/testing.txt # edxval @@ -1091,7 +1093,6 @@ pylatexenc==2.10 # olxcleaner pylint==2.13.9 # via - # -c requirements/edx/../constraints.txt # -r requirements/edx/testing.txt # edx-lint # pylint-celery @@ -1175,8 +1176,9 @@ pytest-randomly==3.12.0 # via -r requirements/edx/testing.txt pytest-xdist[psutil]==2.5.0 # via -r requirements/edx/testing.txt -python-dateutil==2.8.2 +python-dateutil==2.4.0 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/testing.txt # analytics-python # botocore @@ -1246,9 +1248,9 @@ random2==1.0.1 # via -r requirements/edx/testing.txt recommender-xblock==2.0.1 # via -r requirements/edx/testing.txt -redis==4.3.3 +redis==4.3.1 # via -r requirements/edx/testing.txt -regex==2022.6.2 +regex==2022.4.24 # via # -r requirements/edx/testing.txt # nltk @@ -1344,6 +1346,7 @@ six==1.16.0 # edx-rbac # edx-sphinx-theme # event-tracking + # freezegun # fs # fs-s3fs # html5lib @@ -1392,7 +1395,7 @@ soupsieve==2.3.2.post1 # via # -r requirements/edx/testing.txt # beautifulsoup4 -sphinx==5.0.1 +sphinx==5.0.0 # via # edx-sphinx-theme # sphinxcontrib-httpdomain diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 89b8169eb4e5..7e064b98e178 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -62,7 +62,7 @@ smmap==5.0.0 # via gitdb snowballstemmer==2.2.0 # via sphinx -sphinx==5.0.1 +sphinx==5.0.0 # via # -r requirements/edx/doc.in # edx-sphinx-theme diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 60477eb70a51..e59ac534ce91 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -206,7 +206,7 @@ coreschema==0.0.4 # -r requirements/edx/base.txt # coreapi # drf-yasg -coverage[toml]==6.4.1 +coverage[toml]==6.4 # via # -r requirements/edx/coverage.txt # pytest-cov @@ -224,7 +224,7 @@ cssselect==1.1.0 # via # -r requirements/edx/testing.in # pyquery -cssutils==2.4.1 +cssutils==2.4.0 # via # -r requirements/edx/base.txt # pynliner @@ -669,12 +669,14 @@ fastavro==1.4.12 # via # -r requirements/edx/base.txt # openedx-events -filelock==3.7.1 +filelock==3.7.0 # via # tox # virtualenv -freezegun==1.2.1 - # via -r requirements/edx/testing.in +freezegun==0.3.12 + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/testing.in frozenlist==1.3.0 # via # -r requirements/edx/base.txt @@ -804,9 +806,9 @@ loremipsum==1.0.5 # via # -r requirements/edx/base.txt # ora2 -lti-consumer-xblock==4.1.1 +lti-consumer-xblock==4.1.0 # via -r requirements/edx/base.txt -lxml==4.9.0 +lxml==4.8.0 # via # -r requirements/edx/base.txt # edxval @@ -1032,7 +1034,6 @@ pylatexenc==2.10 # olxcleaner pylint==2.13.9 # via - # -c requirements/edx/../constraints.txt # edx-lint # pylint-celery # pylint-django @@ -1106,8 +1107,9 @@ pytest-randomly==3.12.0 # via -r requirements/edx/testing.in pytest-xdist[psutil]==2.5.0 # via -r requirements/edx/testing.in -python-dateutil==2.8.2 +python-dateutil==2.4.0 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt # analytics-python # botocore @@ -1174,9 +1176,9 @@ random2==1.0.1 # via -r requirements/edx/base.txt recommender-xblock==2.0.1 # via -r requirements/edx/base.txt -redis==4.3.3 +redis==4.3.1 # via -r requirements/edx/base.txt -regex==2022.6.2 +regex==2022.4.24 # via # -r requirements/edx/base.txt # nltk @@ -1270,6 +1272,7 @@ six==1.16.0 # edx-milestones # edx-rbac # event-tracking + # freezegun # fs # fs-s3fs # html5lib