Skip to content

Commit 8f43a03

Browse files
committed
Update to pymongo 4.2
1 parent 1e3bded commit 8f43a03

File tree

10 files changed

+43
-57
lines changed

10 files changed

+43
-57
lines changed

common/djangoapps/track/backends/mongodb.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ def __init__(self, **kwargs):
6363
self.connection = MongoClient(
6464
host=host,
6565
port=port,
66+
username=user,
67+
password=password,
68+
authSource=auth_source,
6669
**extra
6770
)
6871

6972
database = self.connection[db_name]
7073

71-
if user or password:
72-
database.authenticate(user, password, source=auth_source)
73-
7474
self.collection = database[collection_name]
7575

7676
self._create_indexes()
@@ -84,13 +84,13 @@ def _create_indexes(self):
8484
# TODO: The creation of indexes can be moved to a Django
8585
# management command or equivalent. There is also an option to
8686
# run the indexing on the background, without locking.
87-
self.collection.ensure_index([('time', pymongo.DESCENDING)], background=True)
88-
self.collection.ensure_index('event_type', background=True)
87+
self.collection.create_index([('time', pymongo.DESCENDING)], background=True)
88+
self.collection.create_index('event_type', background=True)
8989

9090
def send(self, event):
9191
"""Insert the event in to the Mongo collection"""
9292
try:
93-
self.collection.insert(event, manipulate=False)
93+
self.collection.insert_one(event)
9494
except (PyMongoError, BSONError):
9595
# The event will be lost in case of a connection error or any error
9696
# that occurs when trying to insert the event into Mongo.

common/lib/xmodule/xmodule/modulestore/perf_tests/test_asset_import_export.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import ddt
1313
import pytest
14-
from bson.code import Code
1514
from path import Path as path
1615

1716
from xmodule.assetstore import AssetMetadata
@@ -172,29 +171,25 @@ def test_asset_sizes(self, source_ms, num_assets):
172171

173172
asset_collection = source_ms.asset_collection()
174173
# Ensure the asset collection exists.
175-
if asset_collection.name in asset_collection.database.collection_names():
176-
177-
# Map gets the size of each structure.
178-
mapper = Code("""
179-
function() { emit("size", (this == null) ? 0 : Object.bsonsize(this)) }
180-
""")
181-
182-
# Reduce finds the largest structure size and returns only it.
183-
reducer = Code("""
184-
function(key, values) {
185-
var max_size = 0;
186-
for (var i=0; i < values.length; i++) {
187-
if (values[i] > max_size) {
188-
max_size = values[i];
189-
}
174+
if asset_collection.name in asset_collection.database.list_collection_names():
175+
# Get the size of each structure, and finds the largest structure size
176+
pipeline = [
177+
{
178+
"$project": {
179+
"size": {"$bsonSize": "$$ROOT"}
180+
}
181+
},
182+
{
183+
"$group": {
184+
"_id": None,
185+
"max_size": {"$max": "$size"}
190186
}
191-
return max_size;
192187
}
193-
""")
188+
]
194189

195-
results = asset_collection.map_reduce(mapper, reducer, "size_results")
190+
results = list(asset_collection.aggregate(pipeline))
196191
result_str = "{} - Store: {:<15} - Num Assets: {:>6} - Result: {}\n".format(
197-
self.test_run_time, SHORT_NAME_MAP[source_ms], num_assets, [r for r in results.find()]
192+
self.test_run_time, SHORT_NAME_MAP[source_ms], num_assets, results
198193
)
199194
with open("bson_sizes.txt", "a") as f:
200195
f.write(result_str)

common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,8 @@ def delete_course_index(self, course_key):
538538
key_attr: getattr(course_key, key_attr)
539539
for key_attr in ('org', 'course', 'run')
540540
}
541-
return self.course_index.remove(query)
541+
result = self.course_index.delete_many(query)
542+
return result.deleted_count
542543

543544
def get_definition(self, key, course_context=None):
544545
"""
@@ -614,9 +615,9 @@ def _drop_database(self, database=True, collections=True, connections=True):
614615
self.structures.drop()
615616
self.definitions.drop()
616617
else:
617-
self.course_index.remove({})
618-
self.structures.remove({})
619-
self.definitions.remove({})
618+
self.course_index.delete_many({})
619+
self.structures.delete_many({})
620+
self.definitions.delete_many({})
620621

621622
if connections:
622623
connection.close()

common/lib/xmodule/xmodule/mongo_utils.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,6 @@ def connect_to_mongodb(
3232
handles AutoReconnect errors by retrying read operations, since these exceptions
3333
typically indicate a temporary step-down condition for MongoDB.
3434
"""
35-
# The MongoReplicaSetClient class is deprecated in Mongo 3.x, in favor of using
36-
# the MongoClient class for all connections. Update/simplify this code when using
37-
# PyMongo 3.x.
38-
if kwargs.get('replicaSet'):
39-
# Enable reading from secondary nodes in the MongoDB replicaset by using the
40-
# MongoReplicaSetClient class.
41-
# The 'replicaSet' parameter in kwargs is required for secondary reads.
42-
# The read_preference should be set to a proper value, like SECONDARY_PREFERRED.
43-
mongo_client_class = pymongo.MongoReplicaSetClient
44-
else:
45-
# No 'replicaSet' in kwargs - so no secondary reads.
46-
mongo_client_class = pymongo.MongoClient
4735

4836
# If the MongoDB server uses a separate authentication database that should be specified here
4937
auth_source = kwargs.get('authsource', '') or None
@@ -67,11 +55,14 @@ def connect_to_mongodb(
6755
kwargs['read_preference'] = read_preference
6856

6957
mongo_conn = pymongo.database.Database(
70-
mongo_client_class(
58+
pymongo.MongoClient(
7159
host=host,
7260
port=port,
7361
tz_aware=tz_aware,
7462
document_class=dict,
63+
username=user,
64+
password=password,
65+
authSource=auth_source,
7566
**kwargs
7667
),
7768
db
@@ -82,9 +73,6 @@ def connect_to_mongodb(
8273
mongo_conn,
8374
wait_time=retry_wait_time
8475
)
85-
# If credentials were provided, authenticate the user.
86-
if user is not None and password is not None:
87-
mongo_conn.authenticate(user, password, source=auth_source)
8876

8977
return mongo_conn
9078

requirements/edx/base.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ django-user-tasks
6565
django-waffle==0.18.0
6666
django-webpack-loader # Used to wire webpack bundles into the django asset pipeline
6767
djangorestframework==3.9.4
68+
dnspython
6869
edx-ace
6970
edx-analytics-data-api-client
7071
edx-api-doc-tools
@@ -88,7 +89,6 @@ edx-submissions
8889
edx-user-state-client
8990
edx-when
9091
edxval
91-
event-tracking
9292
fs==2.0.18
9393
fs-s3fs==0.1.8
9494
geoip2 # Python API for the GeoIP web services and databases

requirements/edx/base.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ djangorestframework-xml==2.0.0 # via edx-enterprise
9090
djangorestframework==3.9.4 # via -r requirements/edx/base.in, django-config-models, django-user-tasks, drf-jwt, drf-yasg, edx-api-doc-tools, edx-completion, edx-drf-extensions, edx-enterprise, edx-organizations, edx-proctoring, edx-submissions, ora2, rest-condition, super-csv
9191
docopt==0.6.2 # via xmodule
9292
docutils==0.16 # via botocore
93+
dnspython==1.16.0 # via -r requirements/edx/base.in
9394
drf-jwt==1.14.0 # via -c requirements/edx/../constraints.txt, edx-drf-extensions
9495
drf-yasg==1.17.0 # via -c requirements/edx/../constraints.txt, edx-api-doc-tools
9596
edx-ace==0.1.15 # via -r requirements/edx/base.in
@@ -121,7 +122,7 @@ edx-when==1.2.3 # via -r requirements/edx/base.in, edx-proctoring
121122
edxval==1.3.4 # via -r requirements/edx/base.in
122123
elasticsearch==1.9.0 # via edx-search
123124
enum34==1.1.10 # via edxval
124-
event-tracking==0.3.2 # via -r requirements/edx/base.in, edx-proctoring, edx-search
125+
git+https://github.com/appsembler/event-tracking.git@7d173191931c512ce6139c0abfc127bdf5279198#egg=event-tracking==0.3.2 # via -r requirements/edx/github.in
125126
fs-s3fs==0.1.8 # via -r requirements/edx/base.in, django-pyfs
126127
fs==2.0.18 # via -r requirements/edx/base.in, django-pyfs, fs-s3fs, xblock
127128
future==0.18.2 # via django-ses, edx-celeryutils, edx-enterprise, pycontracts, pyjwkest
@@ -157,7 +158,7 @@ markey==0.8 # via django-babel-underscore
157158
markupsafe==1.1.1 # via -r requirements/edx/paver.txt, chem, jinja2, mako, xblock
158159
maxminddb==1.5.4 # via geoip2
159160
mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.txt, xblock-drag-and-drop-v2, xblock-poll
160-
git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/github.in
161+
git+https://github.com/appsembler/MongoDBProxy.git@02665ac118a79edae186c5bb1ad8c4f6d98778f4#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/github.in
161162
mongoengine==0.10.0 # via -r requirements/edx/base.in
162163
more-itertools==8.3.0 # via -r requirements/edx/paver.txt, zipp
163164
mpmath==1.1.0 # via sympy
@@ -190,7 +191,7 @@ pycryptodomex==3.9.7 # via -r requirements/edx/base.in, edx-proctoring, pyj
190191
pygments==2.6.1 # via -r requirements/edx/base.in
191192
pyjwkest==1.4.2 # via -r requirements/edx/base.in, edx-drf-extensions
192193
pyjwt==1.5.2 # via -r requirements/edx/base.in, drf-jwt, edx-rest-api-client, social-auth-core
193-
pymongo==3.9.0 # via -r requirements/edx/base.in, -r requirements/edx/paver.txt, edx-opaque-keys, event-tracking, mongodbproxy, mongoengine
194+
pymongo==4.2.0 # via -r requirements/edx/base.in, -r requirements/edx/paver.txt, edx-opaque-keys, event-tracking, mongodbproxy, mongoengine
194195
pynliner==0.8.0 # via -r requirements/edx/base.in
195196
pyparsing==2.4.7 # via chem, openedx-calc, packaging, pycontracts
196197
pysrt==1.1.2 # via -r requirements/edx/base.in, edxval

requirements/edx/development.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ edx-when==1.2.3 # via -r requirements/edx/testing.txt, edx-proctoring
135135
edxval==1.3.4 # via -r requirements/edx/testing.txt
136136
elasticsearch==1.9.0 # via -r requirements/edx/testing.txt, edx-search
137137
enum34==1.1.10 # via -r requirements/edx/testing.txt, edxval
138-
event-tracking==0.3.2 # via -r requirements/edx/testing.txt, edx-proctoring, edx-search
138+
git+https://github.com/appsembler/event-tracking.git@7d173191931c512ce6139c0abfc127bdf5279198#egg=event-tracking==0.3.2 # via -r requirements/edx/testing.txt, edx-proctoring, edx-search
139139
execnet==1.7.1 # via -r requirements/edx/testing.txt, pytest-xdist
140140
factory-boy==2.8.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt
141141
faker==4.1.0 # via -r requirements/edx/testing.txt, factory-boy
@@ -190,7 +190,7 @@ maxminddb==1.5.4 # via -r requirements/edx/testing.txt, geoip2
190190
mccabe==0.6.1 # via -r requirements/edx/testing.txt, flake8, pylint
191191
mistune==0.8.4 # via m2r
192192
mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, xblock-drag-and-drop-v2, xblock-poll
193-
git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/testing.txt
193+
git+https://github.com/appsembler/MongoDBProxy.git@02665ac118a79edae186c5bb1ad8c4f6d98778f4#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/testing.txt
194194
mongoengine==0.10.0 # via -r requirements/edx/testing.txt
195195
more-itertools==8.3.0 # via -r requirements/edx/testing.txt, pytest, zipp
196196
mpmath==1.1.0 # via -r requirements/edx/testing.txt, sympy

requirements/edx/github.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ git+https://github.com/edx/openedx-chem.git@ff4e3a03d3c7610e47a9af08eb648d8aabe2
5656

5757
# Third-party:
5858
-e git+https://github.com/edx/django-wiki.git@0.0.27#egg=django-wiki
59-
git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2
59+
git+https://github.com/appsembler/MongoDBProxy.git@02665ac118a79edae186c5bb1ad8c4f6d98778f4#egg=MongoDBProxy==0.1.0+edx.2
60+
git+https://github.com/appsembler/event-tracking.git@7d173191931c512ce6139c0abfc127bdf5279198#egg=event-tracking==0.3.2
6061
-e git+https://github.com/dementrock/pystache_custom.git@776973740bdaad83a3b029f96e415a7d1e8bec2f#egg=pystache_custom-dev
6162
-e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme
6263

requirements/edx/paver.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ mock # Stub out code with mock objects and make a
1818
path # Easier manipulation of filesystem paths
1919
paver # Build, distribution and deployment scripting tool
2020
psutil==1.2.1 # Library for retrieving information on running processes and system utilization
21-
pymongo==3.9.0 # via edx-opaque-keys
21+
pymongo==4.2.0 # via edx-opaque-keys
2222
python-memcached # Python interface to the memcached memory cache daemon
2323
requests # Simple interface for making HTTP requests
2424
stevedore # Support for runtime plugins, used for XBlocks and edx-platform Django app plugins

requirements/edx/testing.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ edx-when==1.2.3 # via -r requirements/edx/base.txt, edx-proctoring
131131
edxval==1.3.4 # via -r requirements/edx/base.txt
132132
elasticsearch==1.9.0 # via -r requirements/edx/base.txt, edx-search
133133
enum34==1.1.10 # via -r requirements/edx/base.txt, edxval
134-
event-tracking==0.3.2 # via -r requirements/edx/base.txt, edx-proctoring, edx-search
134+
git+https://github.com/appsembler/event-tracking.git@7d173191931c512ce6139c0abfc127bdf5279198#egg=event-tracking==0.3.2 # via -r requirements/edx/base.txt, edx-proctoring, edx-search
135135
execnet==1.7.1 # via pytest-xdist
136136
factory-boy==2.8.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.in
137137
faker==4.1.0 # via factory-boy
@@ -182,7 +182,7 @@ markupsafe==1.1.1 # via -r requirements/edx/base.txt, -r requirements/ed
182182
maxminddb==1.5.4 # via -r requirements/edx/base.txt, geoip2
183183
mccabe==0.6.1 # via flake8, pylint
184184
mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, xblock-drag-and-drop-v2, xblock-poll
185-
git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/base.txt
185+
git+https://github.com/appsembler/MongoDBProxy.git@02665ac118a79edae186c5bb1ad8c4f6d98778f4#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/base.txt
186186
mongoengine==0.10.0 # via -r requirements/edx/base.txt
187187
more-itertools==8.3.0 # via -r requirements/edx/base.txt, -r requirements/edx/coverage.txt, pytest, zipp
188188
mpmath==1.1.0 # via -r requirements/edx/base.txt, sympy
@@ -227,7 +227,7 @@ pylint-celery==0.3 # via edx-lint
227227
pylint-django==2.0.11 # via edx-lint
228228
pylint-plugin-utils==0.6 # via pylint-celery, pylint-django
229229
pylint==2.4.2 # via edx-lint, pylint-celery, pylint-django, pylint-plugin-utils
230-
pymongo==3.9.0 # via -r requirements/edx/base.txt, edx-opaque-keys, event-tracking, mongodbproxy, mongoengine
230+
pymongo==4.2.0 # via -r requirements/edx/base.txt, edx-opaque-keys, event-tracking, mongodbproxy, mongoengine
231231
pynliner==0.8.0 # via -r requirements/edx/base.txt
232232
pyparsing==2.4.7 # via -r requirements/edx/base.txt, chem, openedx-calc, packaging, pycontracts
233233
pyquery==1.4.1 # via -r requirements/edx/testing.in

0 commit comments

Comments
 (0)