{"id":23654,"library":"edx-milestones","title":"edx-milestones","description":"Provides models and utilities for tracking significant events (milestones) in Open edX courses, such as completion or certification eligibility. Current version 2.0.0, maintained under the Open edX organization. Release cadence is sporadic, with major version bumps tied to Python/Django support drops.","status":"active","version":"2.0.0","language":"python","source_language":"en","source_url":"https://github.com/openedx/edx-milestones","tags":["open-edx","milestones","django","education"],"install":[{"cmd":"pip install edx-milestones","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Core dependency for model definitions and migrations.","package":"django","optional":false},{"reason":"Used for caching and request utilities in milestone queries.","package":"edx-django-utils","optional":false}],"imports":[{"wrong":"from milestones.models import Milestone","symbol":"Milestone","correct":"from milestones import Milestone"}],"quickstart":{"code":"import django\nfrom django.conf import settings\nsettings.configure(\n    DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},\n    INSTALLED_APPS=['milestones'],\n    USE_TZ=True,\n)\ndjango.setup()\n\nfrom milestones.models import Milestone\nm = Milestone.objects.create(\n    namespace='test',\n    name='middle_section',\n    display_name='Middle Section',\n    description='Complete the middle section of the course'\n)\nprint(f'Created milestone: {m.id}')","lang":"python","description":"Minimal Django setup to create a milestone record."},"warnings":[{"fix":"Pin edx-milestones==1.1.0 in your requirements, or upgrade Python to 3.12+.","message":"Dropped Python 3.11 support in v2.0.0. If your environment uses Python 3.11, do not upgrade beyond v1.1.0.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Use Milestone.objects.filter(active=True) instead of .filter(active=1) or .filter(active__exact=True).","message":"The milestone 'active' field is deprecated in favor of using queries based on literal values (True/False) instead of boolean field lookups to avoid table scans on Django 3.2+.","severity":"deprecated","affected_versions":">=0.3.3"},{"fix":"Use Milestone.objects.get(namespace='my_ns', name='milestone_name') instead of just name.","message":"Milestone names are not unique by namespace: you can have multiple milestones with the same name in different namespaces. Always filter by both namespace and name to avoid unexpected duplicates.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"search_vec":"'2.0.0':25 'bump':39 'cadenc':33 'certif':21 'complet':19 'cours':16 'current':23 'django':49 'drop':44 'educ':50 'edx':2,15,30,47 'edx-mileston':1 'elig':22 'event':11 'maintain':26 'major':37 'mileston':3,12,48 'model':5 'open':14,29,46 'open-edx':45 'organ':31 'provid':4 'python/django':42 'releas':32 'signific':10 'sporad':35 'support':43 'tie':40 'track':9 'util':7 'version':24,38","created_at":"2026-05-01T08:08:54.980909+00:00","updated_at":"2026-05-01T08:08:54.980909+00:00","problems":{"verify_error":"Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\nImportError: cannot import name 'Milestone' from 'milestones' (/tmp/tmpy1obn5va/venv/lib/python3.12/site-packages/milestones/__init__.py)"},"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"2.0.0","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/openedx/edx-milestones","docs":null,"changelog":null,"pypi":"https://pypi.org/project/edx-milestones/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"import_fail","verified_at":"2026-07-03","last_verified":"2026-07-03","next_check":"2026-07-10","install_tag":null}}