{"action":"opened","number":240,"pull_request":{"url":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240","id":123577875,"html_url":"https://github.com/raccoongang/xblock-video/pull/240","diff_url":"https://github.com/raccoongang/xblock-video/pull/240.diff","patch_url":"https://github.com/raccoongang/xblock-video/pull/240.patch","issue_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/240","number":240,"state":"open","locked":false,"title":"Pin django to latest version 1.11.2","user":{"login":"pyup-bot","id":16239342,"avatar_url":"https://avatars3.githubusercontent.com/u/16239342?v=3","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"body":"\nDjango is not pinned to a specific version.\n\nI'm pinning it to the latest version **1.11.2** for now.\n\n\nThese links might come in handy:  <a href=\"https://pypi.python.org/pypi/django\">PyPI</a> | <a href=\"https://pyup.io/changelogs/django/\">Changelog</a> | <a href=\"https://www.djangoproject.com/\">Homepage</a> \n\n\n\n### Changelog\n> \n>### 1.11.2\n\n>===========================\n\n>*June 1, 2017*\n\n>Django 1.11.2 adds a minor feature and fixes several bugs in 1.11.1. Also, the\n>latest string translations from Transifex are incorporated.\n\n>Minor feature\n>=============\n\n>The new ``LiveServerTestCase.port`` attribute reallows the use case of binding\n>to a specific port following the :ref:`bind to port zero\n>&lt;liveservertestcase-port-zero-change&gt;` change in Django 1.11.\n\n>Bugfixes\n>========\n\n>* Added detection for GDAL 2.1 and 2.0, and removed detection for unsupported\n>  versions 1.7 and 1.8 (:ticket:`28181`).\n\n>* Changed ``contrib.gis`` to raise ``ImproperlyConfigured`` rather than\n>  ``GDALException`` if ``gdal`` isn&#39;t installed, to allow third-party apps to\n>  catch that exception (:ticket:`28178`).\n\n>* Fixed ``django.utils.http.is_safe_url()`` crash on invalid IPv6 URLs\n>  (:ticket:`28142`).\n\n>* Fixed regression causing pickling of model fields to crash (:ticket:`28188`).\n\n>* Fixed ``django.contrib.auth.authenticate()`` when multiple authentication\n>  backends don&#39;t accept a positional ``request`` argument (:ticket:`28207`).\n\n>* Fixed introspection of index field ordering on PostgreSQL (:ticket:`28197`).\n\n>* Fixed a regression where ``Model._state.adding`` wasn&#39;t set correctly on\n>  multi-table inheritance parent models after saving a child model\n>  (:ticket:`28210`).\n\n>* Allowed ``DjangoJSONEncoder`` to serialize\n>  ``django.utils.deprecation.CallableBool`` (:ticket:`28230`).\n\n>* Relaxed the validation added in Django 1.11 of the fields in the ``defaults``\n>  argument of ``QuerySet.get_or_create()`` and ``update_or_create()`` to\n>  reallow settable model properties (:ticket:`28222`).\n\n>* Fixed ``MultipleObjectMixin.paginate_queryset()`` crash on Python 2 if the\n>  ``InvalidPage`` message contains non-ASCII (:ticket:`28204`).\n\n>* Prevented ``Subquery`` from adding an unnecessary ``CAST`` which resulted in\n>  invalid SQL (:ticket:`28199`).\n\n>* Corrected detection of GDAL 2.1 on Windows (:ticket:`28181`).\n\n>* Made date-based generic views return a 404 rather than crash when given an\n>  out of range date (:ticket:`28209`).\n\n>* Fixed a regression where ``file_move_safe()`` crashed when moving files to a\n>  CIFS mount (:ticket:`28170`).\n\n>* Moved the ``ImageField`` file extension validation added in Django 1.11 from\n>  the model field to the form field to reallow the use case of storing images\n>  without an extension (:ticket:`28242`).\n\n\n>===========================\n\n\n>### 1.11.1\n\n>===========================\n\n>*May 6, 2017*\n\n>Django 1.11.1 adds a minor feature and fixes several bugs in 1.11.\n\n>Allowed disabling server-side cursors on PostgreSQL\n>===================================================\n\n>The change in Django 1.11 to make :meth:`.QuerySet.iterator()` use server-side\n>cursors on PostgreSQL prevents running Django with `pgBouncer` in transaction\n>pooling mode. To reallow that, use the :setting:`DISABLE_SERVER_SIDE_CURSORS\n>&lt;DATABASE-DISABLE_SERVER_SIDE_CURSORS&gt;` setting in :setting:`DATABASES`.\n\n>See :ref:`transaction-pooling-server-side-cursors` for more discussion.\n\n>Bugfixes\n>========\n\n>* Made migrations respect ``Index``’s ``name`` argument. If you created a\n>  named index with Django 1.11, ``makemigrations`` will create a migration to\n>  recreate the index with the correct name (:ticket:`28051`).\n\n>* Fixed a crash when using a ``__icontains`` lookup on a ``ArrayField``\n>  (:ticket:`28038`).\n\n>* Fixed a crash when using a two-tuple in ``EmailMessage``’s ``attachments``\n>  argument (:ticket:`28042`).\n\n>* Fixed ``QuerySet.filter()`` crash when it references the name of a\n>  ``OneToOneField`` primary key (:ticket:`28047`).\n\n>* Fixed empty POST data table appearing instead of &quot;No POST data&quot; in HTML debug\n>  page (:ticket:`28079`).\n\n>* Restored ``BoundField``\\s without any ``choices`` evaluating to ``True``\n>  (:ticket:`28058`).\n\n>* Prevented ``SessionBase.cycle_key()`` from losing session data if\n>  ``_session_cache`` isn&#39;t populated (:ticket:`28066`).\n\n>* Fixed layout of ``ReadOnlyPasswordHashWidget`` (used in the admin&#39;s user\n>  change page) (:ticket:`28097`).\n\n>* Allowed prefetch calls on managers with custom ``ModelIterable`` subclasses\n>  (:ticket:`28096`).\n\n>* Fixed change password link in the ``contrib.auth`` admin for ``el``,\n>  ``es_MX``, and ``pt`` translations (:ticket:`28100`).\n\n>* Restored the output of the ``class`` attribute in the ``&lt;ul&gt;`` of widgets\n>  that use the ``multiple_input.html`` template. This fixes\n>  ``ModelAdmin.radio_fields`` with ``admin.HORIZONTAL`` (:ticket:`28059`).\n\n>* Fixed crash in ``BaseGeometryWidget.subwidgets()`` (:ticket:`28039`).\n\n>* Fixed exception reraising in ORM query execution when ``cursor.execute()``\n>  fails and the subsequent ``cursor.close()`` also fails (:ticket:`28091`).\n\n>* Fixed a regression where ``CheckboxSelectMultiple``, ``NullBooleanSelect``,\n>  ``RadioSelect``, ``SelectMultiple``, and ``Select`` localized option values\n>  (:ticket:`28075`).\n\n>* Corrected the stack level of unordered queryset pagination warnings\n>  (:ticket:`28109`).\n\n>* Fixed a regression causing incorrect queries for ``__in`` subquery lookups\n>  when models use ``ForeignKey.to_field`` (:ticket:`28101`).\n\n>* Fixed crash when overriding the template of\n>  ``django.views.static.directory_index()`` (:ticket:`28122`).\n\n>* Fixed a regression in formset ``min_num`` validation with unchanged forms\n>  that have initial data (:ticket:`28130`).\n\n>* Prepared for ``cx_Oracle`` 6.0 support (:ticket:`28138`).\n\n>* Updated the ``contrib.postgres`` ``SplitArrayWidget`` to use template-based\n>  widget rendering (:ticket:`28040`).\n\n>* Fixed crash in ``BaseGeometryWidget.get_context()`` when overriding existing\n>  ``attrs`` (:ticket:`28105`).\n\n>* Prevented ``AddIndex`` and ``RemoveIndex`` from mutating model state\n>  (:ticket:`28043`).\n\n>* Prevented migrations from dropping database indexes from ``Meta.indexes``\n>  when changing ``Field.db_index`` to ``False`` (:ticket:`28052`).\n\n>* Fixed a regression in choice ordering in form fields with grouped and\n>  non-grouped options (:ticket:`28157`).\n\n>* Fixed crash in  ``BaseInlineFormSet._construct_form()`` when using\n>  ``save_as_new`` (:ticket:`28159`).\n\n>* Fixed a regression where ``Model._state.db`` wasn&#39;t set correctly on\n>  multi-table inheritance parent models after saving a child model\n>  (:ticket:`28166`).\n\n>* Corrected the return type of ``ArrayField(CITextField())`` values retrieved\n>  from the database (:ticket:`28161`).\n\n>* Fixed ``QuerySet.prefetch_related()`` crash when fetching relations in nested\n>  ``Prefetch`` objects (:ticket:`27554`).\n\n>* Prevented hiding GDAL errors if it&#39;s not installed when using ``contrib.gis``\n>  (:ticket:`28160`). (It&#39;s a required dependency as of Django 1.11.)\n\n>* Fixed a regression causing ``__in`` lookups on a foreign key to fail when\n>  using the foreign key&#39;s parent model as the lookup value (:ticket:`28175`).\n\n\n>=========================\n\n\n>### 1.11\n\n>=========================\n\n>*April 4, 2017*\n\n>Welcome to Django 1.11!\n\n>These release notes cover the :ref:`new features &lt;whats-new-1.11&gt;`, as well as\n>some :ref:`backwards incompatible changes &lt;backwards-incompatible-1.11&gt;` you&#39;ll\n>want to be aware of when upgrading from Django 1.10 or older versions. We&#39;ve\n>:ref:`begun the deprecation process for some features\n>&lt;deprecated-features-1.11&gt;`.\n\n>See the :doc:`/howto/upgrade-version` guide if you&#39;re updating an existing\n>project.\n\n>Django 1.11 is designated as a :term:`long-term support release`. It will\n>receive security updates for at least three years after its release. Support\n>for the previous LTS, Django 1.8, will end in April 2018.\n\n>Python compatibility\n>====================\n\n>Django 1.11 requires Python 2.7, 3.4, 3.5, or 3.6. Django 1.11 is the first\n>release to support Python 3.6. We **highly recommend** and only officially\n>support the latest release of each series.\n\n>The Django 1.11.x series is the last to support Python 2. The next major\n>release, Django 2.0, will only support Python 3.5+.\n\n>Deprecating warnings are no longer loud by default\n>==================================================\n\n>Unlike older versions of Django, Django&#39;s own deprecation warnings are no\n>longer displayed by default. This is consistent with Python&#39;s default behavior.\n\n>This change allows third-party apps to support both Django 1.11 LTS and Django\n>1.8 LTS without having to add code to avoid deprecation warnings.\n\n>Following the release of Django 2.0, we suggest that third-party app authors\n>drop support for all versions of Django prior to 1.11. At that time, you should\n>be able run your package&#39;s tests using ``python -Wd`` so that deprecation\n>warnings do appear. After making the deprecation warning fixes, your app should\n>be compatible with Django 2.0.\n\n>.. _whats-new-1.11:\n\n>What&#39;s new in Django 1.11\n>=========================\n\n>Class-based model indexes\n>-------------------------\n\n>The new :mod:`django.db.models.indexes` module contains classes which ease\n>creating database indexes. Indexes are added to models using the\n>:attr:`Meta.indexes &lt;django.db.models.Options.indexes&gt;` option.\n\n>The :class:`~django.db.models.Index` class creates a b-tree index, as if you\n>used :attr:`~django.db.models.Field.db_index` on the model field or\n>:attr:`~django.db.models.Options.index_together` on the model ``Meta`` class.\n>It can be subclassed to support different index types, such as\n>:class:`~django.contrib.postgres.indexes.GinIndex`. It also allows defining the\n>order (ASC/DESC) for the columns of the index.\n\n>Template-based widget rendering\n>-------------------------------\n\n>To ease customizing widgets, form widget rendering is now done using the\n>template system rather than in Python. See :doc:`/ref/forms/renderers`.\n\n>You may need to adjust any custom widgets that you&#39;ve written for a few\n>:ref:`backwards incompatible changes &lt;template-widget-incompatibilities-1-11&gt;`.\n\n>``Subquery`` expressions\n>------------------------\n\n>The new :class:`~django.db.models.Subquery` and\n>:class:`~django.db.models.Exists` database expressions allow creating\n>explicit subqueries. Subqueries may refer to fields from the outer queryset\n>using the :class:`~django.db.models.OuterRef` class.\n\n>Minor features\n>--------------\n\n>:mod:`django.contrib.admin`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* :attr:`.ModelAdmin.date_hierarchy` can now reference fields across relations.\n\n>* The new :meth:`ModelAdmin.get_exclude()\n>  &lt;django.contrib.admin.ModelAdmin.get_exclude&gt;` hook allows specifying the\n>  exclude fields based on the request or model instance.\n\n>* The ``popup_response.html`` template can now be overridden per app, per\n>  model, or by setting the :attr:`.ModelAdmin.popup_response_template`\n>  attribute.\n\n>:mod:`django.contrib.auth`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* The default iteration count for the PBKDF2 password hasher is increased by\n>  20%.\n\n>* The :class:`~django.contrib.auth.views.LoginView` and\n>  :class:`~django.contrib.auth.views.LogoutView` class-based views supersede the\n>  deprecated ``login()`` and ``logout()`` function-based views.\n\n>* The :class:`~django.contrib.auth.views.PasswordChangeView`,\n>  :class:`~django.contrib.auth.views.PasswordChangeDoneView`,\n>  :class:`~django.contrib.auth.views.PasswordResetView`,\n>  :class:`~django.contrib.auth.views.PasswordResetDoneView`,\n>  :class:`~django.contrib.auth.views.PasswordResetConfirmView`, and\n>  :class:`~django.contrib.auth.views.PasswordResetCompleteView` class-based\n>  views supersede the deprecated ``password_change()``,\n>  ``password_change_done()``, ``password_reset()``, ``password_reset_done()``,\n>  ``password_reset_confirm()``, and ``password_reset_complete()`` function-based\n>  views.\n\n>* The new ``post_reset_login`` attribute for\n>  :class:`~django.contrib.auth.views.PasswordResetConfirmView` allows\n>  automatically logging in a user after a successful password reset.\n>  If you have multiple ``AUTHENTICATION_BACKENDS`` configured, use the\n>  ``post_reset_login_backend`` attribute to choose which one to use.\n\n>* To avoid the possibility of leaking a password reset token via the HTTP\n>  Referer header (for example, if the reset page includes a reference to CSS or\n>  JavaScript hosted on another domain), the\n>  :class:`~django.contrib.auth.views.PasswordResetConfirmView` (but not the\n>  deprecated ``password_reset_confirm()`` function-based view) stores the token\n>  in a session and redirects to itself to present the password change form to\n>  the user without the token in the URL.\n\n>* :func:`~django.contrib.auth.update_session_auth_hash` now rotates the session\n>  key to allow a password change to invalidate stolen session cookies.\n\n>* The new ``success_url_allowed_hosts`` attribute for\n>  :class:`~django.contrib.auth.views.LoginView` and\n>  :class:`~django.contrib.auth.views.LogoutView` allows specifying a set of\n>  hosts that are safe for redirecting after login and logout.\n\n>* Added password validators ``help_text`` to\n>  :class:`~django.contrib.auth.forms.UserCreationForm`.\n\n>* The ``HttpRequest`` is now passed to :func:`~django.contrib.auth.authenticate`\n>  which in turn passes it to the authentication backend if it accepts a\n>  ``request`` argument.\n\n>* The :func:`~django.contrib.auth.signals.user_login_failed` signal now\n>  receives a ``request`` argument.\n\n>* :class:`~django.contrib.auth.forms.PasswordResetForm` supports custom user\n>  models that use an email field named something other than ``&#39;email&#39;``.\n>  Set :attr:`CustomUser.EMAIL_FIELD\n>  &lt;django.contrib.auth.models.CustomUser.EMAIL_FIELD&gt;` to the name of the field.\n\n>* :func:`~django.contrib.auth.get_user_model` can now be called at import time,\n>  even in modules that define models.\n\n>:mod:`django.contrib.contenttypes`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* When stale content types are detected in the\n>  :djadmin:`remove_stale_contenttypes` command, there&#39;s now a list of related\n>  objects such as ``auth.Permission``\\s that will also be deleted. Previously,\n>  only the content types were listed (and this prompt was after ``migrate``\n>  rather than in a separate command).\n\n>:mod:`django.contrib.gis`\n>~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* The new :meth:`.GEOSGeometry.from_gml` and :meth:`.OGRGeometry.from_gml`\n>  methods allow creating geometries from GML.\n\n>* Added support for the :lookup:`dwithin` lookup on SpatiaLite.\n\n>* The :class:`~django.contrib.gis.db.models.functions.Area` function,\n>  :class:`~django.contrib.gis.db.models.functions.Distance` function, and\n>  distance lookups now work with geodetic coordinates on SpatiaLite.\n\n>* The OpenLayers-based form widgets now use ``OpenLayers.js`` from\n>  ``https://cdnjs.cloudflare.com`` which is more suitable for production use\n>  than the the old ``http://openlayers.org`` source. They are also updated to\n>  use OpenLayers 3.\n\n>* PostGIS migrations can now change field dimensions.\n\n>* Added the ability to pass the `size`, `shape`, and `offset` parameter when\n>  creating :class:`~django.contrib.gis.gdal.GDALRaster` objects.\n\n>* Added SpatiaLite support for the\n>  :class:`~django.contrib.gis.db.models.functions.IsValid` function,\n>  :class:`~django.contrib.gis.db.models.functions.MakeValid` function, and\n>  :lookup:`isvalid` lookup.\n\n>* Added Oracle support for the\n>  :class:`~django.contrib.gis.db.models.functions.AsGML` function,\n>  :class:`~django.contrib.gis.db.models.functions.BoundingCircle` function,\n>  :class:`~django.contrib.gis.db.models.functions.IsValid` function, and\n>  :lookup:`isvalid` lookup.\n\n>:mod:`django.contrib.postgres`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* The new ``distinct`` argument for\n>  :class:`~django.contrib.postgres.aggregates.StringAgg` determines if\n>  concatenated values will be distinct.\n\n>* The new :class:`~django.contrib.postgres.indexes.GinIndex` and\n>  :class:`~django.contrib.postgres.indexes.BrinIndex` classes allow\n>  creating ``GIN`` and ``BRIN`` indexes in the database.\n\n>* :class:`~django.contrib.postgres.fields.JSONField` accepts a new ``encoder``\n>  parameter to specify a custom class to encode data types not supported by the\n>  standard encoder.\n\n>* The new :class:`~django.contrib.postgres.fields.CIText` mixin and\n>  :class:`~django.contrib.postgres.operations.CITextExtension` migration\n>  operation allow using PostgreSQL&#39;s ``citext`` extension for case-insensitive\n>  lookups. Three fields are provided: :class:`.CICharField`,\n>  :class:`.CIEmailField`, and :class:`.CITextField`.\n\n>* The new :class:`~django.contrib.postgres.aggregates.JSONBAgg` allows\n>  aggregating values as a JSON array.\n\n>* The :class:`~django.contrib.postgres.fields.HStoreField` (model field) and\n>  :class:`~django.contrib.postgres.forms.HStoreField` (form field) allow\n>  storing null values.\n\n>Cache\n>~~~~~\n\n>* Memcached backends now pass the contents of :setting:`OPTIONS &lt;CACHES-OPTIONS&gt;`\n>  as keyword arguments to the client constructors, allowing for more advanced\n>  control of client behavior. See the :ref:`cache arguments &lt;cache_arguments&gt;`\n>  documentation for examples.\n\n>* Memcached backends now allow defining multiple servers as a comma-delimited\n>  string in :setting:`LOCATION &lt;CACHES-LOCATION&gt;`, for convenience with\n>  third-party services that use such strings in environment variables.\n\n>CSRF\n>~~~~\n\n>* Added the :setting:`CSRF_USE_SESSIONS` setting to allow storing the CSRF\n>  token in the user&#39;s session rather than in a cookie.\n\n>Database backends\n>~~~~~~~~~~~~~~~~~\n\n>* Added the ``skip_locked`` argument to :meth:`.QuerySet.select_for_update()`\n>  on PostgreSQL 9.5+ and Oracle to execute queries with\n>  ``FOR UPDATE SKIP LOCKED``.\n\n>* Added the :setting:`TEST[&#39;TEMPLATE&#39;] &lt;TEST_TEMPLATE&gt;` setting to let\n>  PostgreSQL users specify a template for creating the test database.\n\n>* :meth:`.QuerySet.iterator()` now uses :ref:`server-side cursors\n>  &lt;psycopg2:server-side-cursors&gt;` on PostgreSQL. This feature transfers some of\n>  the worker memory load (used to hold query results) to the database and might\n>  increase database memory usage.\n\n>* Added MySQL support for the ``&#39;isolation_level&#39;`` option in\n>  :setting:`OPTIONS` to allow specifying the :ref:`transaction isolation level\n>  &lt;mysql-isolation-level&gt;`. To avoid possible data loss, it&#39;s recommended to\n>  switch from MySQL&#39;s default level, repeatable read, to read committed.\n\n>* Added support for ``cx_Oracle`` 5.3.\n\n>Email\n>~~~~~\n\n>* Added the :setting:`EMAIL_USE_LOCALTIME` setting to allow sending SMTP date\n>  headers in the local time zone rather than in UTC.\n\n>* ``EmailMessage.attach()`` and ``attach_file()`` now fall back to MIME type\n>  ``application/octet-stream`` when binary content that can&#39;t be decoded as\n>  UTF-8 is specified for a ``text/*`` attachment.\n\n>File Storage\n>~~~~~~~~~~~~\n\n>* To make it wrappable by :class:`io.TextIOWrapper`,\n>  :class:`~django.core.files.File` now has the ``readable()``, ``writable()``,\n>  and ``seekable()`` methods.\n\n>Forms\n>~~~~~\n\n>* The new :attr:`CharField.empty_value &lt;django.forms.CharField.empty_value&gt;`\n>  attribute allows specifying the Python value to use to represent &quot;empty&quot;.\n\n>* The new :meth:`Form.get_initial_for_field()\n>  &lt;django.forms.Form.get_initial_for_field&gt;` method returns initial data for a\n>  form field.\n\n>Internationalization\n>~~~~~~~~~~~~~~~~~~~~\n\n>* Number formatting and the :setting:`NUMBER_GROUPING` setting support\n>  non-uniform digit grouping.\n\n>Management Commands\n>~~~~~~~~~~~~~~~~~~~\n\n>* The new :option:`loaddata --exclude` option allows excluding models and apps\n>  while loading data from fixtures.\n\n>* The new :option:`diffsettings --default` option allows specifying a settings\n>  module other than Django&#39;s default settings to compare against.\n\n>* ``app_label``\\s arguments now limit the :option:`showmigrations --plan`\n>  output.\n\n>Migrations\n>~~~~~~~~~~\n\n>* Added support for serialization of ``uuid.UUID`` objects.\n\n>Models\n>~~~~~~\n\n>* Added support for callable values in the ``defaults`` argument of\n>  :meth:`QuerySet.update_or_create()\n>  &lt;django.db.models.query.QuerySet.update_or_create&gt;` and\n>  :meth:`~django.db.models.query.QuerySet.get_or_create`.\n\n>* :class:`~django.db.models.ImageField` now has a default\n>  :data:`~django.core.validators.validate_image_file_extension` validator.\n>  (This validator moved to the form field in :doc:`Django 1.11.2 &lt;1.11.2&gt;`.)\n\n>* Added support for time truncation to\n>  :class:`~django.db.models.functions.datetime.Trunc` functions.\n\n>* Added the :class:`~django.db.models.functions.datetime.ExtractWeek` function\n>  to extract the week from :class:`~django.db.models.DateField` and\n>  :class:`~django.db.models.DateTimeField` and exposed it through the\n>  :lookup:`week` lookup.\n\n>* Added the :class:`~django.db.models.functions.datetime.TruncTime` function\n>  to truncate :class:`~django.db.models.DateTimeField` to its time component\n>  and exposed it through the :lookup:`time` lookup.\n\n>* Added support for expressions in :meth:`.QuerySet.values` and\n>  :meth:`~.QuerySet.values_list`.\n\n>* Added support for query expressions on lookups that take multiple arguments,\n>  such as ``range``.\n\n>* You can now use the ``unique=True`` option with\n>  :class:`~django.db.models.FileField`.\n\n>* Added the ``nulls_first`` and ``nulls_last`` parameters to\n>  :class:`Expression.asc() &lt;django.db.models.Expression.asc&gt;` and\n>  :meth:`~django.db.models.Expression.desc` to control\n>  the ordering of null values.\n\n>* The new ``F`` expression ``bitleftshift()`` and ``bitrightshift()`` methods\n>  allow :ref:`bitwise shift operations &lt;using-f-expressions-in-filters&gt;`.\n\n>* Added :meth:`.QuerySet.union`, :meth:`~.QuerySet.intersection`, and\n>  :meth:`~.QuerySet.difference`.\n\n>Requests and Responses\n>~~~~~~~~~~~~~~~~~~~~~~\n\n>* Added :meth:`QueryDict.fromkeys() &lt;django.http.QueryDict.fromkeys&gt;`.\n\n>* :class:`~django.middleware.common.CommonMiddleware` now sets the\n>  ``Content-Length`` response header for non-streaming responses.\n\n>* Added the :setting:`SECURE_HSTS_PRELOAD` setting to allow appending the\n>  ``preload`` directive to the ``Strict-Transport-Security`` header.\n\n>* :class:`~django.middleware.http.ConditionalGetMiddleware` now adds the\n>  ``ETag`` header to responses.\n\n>Serialization\n>~~~~~~~~~~~~~\n\n>* The new ``django.core.serializers.base.Serializer.stream_class`` attribute\n>  allows subclasses to customize the default stream.\n\n>* The encoder used by the :ref:`JSON serializer &lt;serialization-formats-json&gt;`\n>  can now be customized by passing a ``cls`` keyword argument to the\n>  ``serializers.serialize()`` function.\n\n>* :class:`~django.core.serializers.json.DjangoJSONEncoder` now serializes\n>  :class:`~datetime.timedelta` objects (used by\n>  :class:`~django.db.models.DurationField`).\n\n>Templates\n>~~~~~~~~~\n\n>* :meth:`~django.utils.safestring.mark_safe` can now be used as a decorator.\n\n>* The :class:`~django.template.backends.jinja2.Jinja2` template backend now\n>  supports context processors by setting the ``&#39;context_processors&#39;`` option in\n>  :setting:`OPTIONS &lt;TEMPLATES-OPTIONS&gt;`.\n\n>* The :ttag:`regroup` tag now returns ``namedtuple``\\s instead of dictionaries\n>  so you can unpack the group object directly in a loop, e.g.\n>  ``{% for grouper, list in regrouped %}``.\n\n>* Added a :ttag:`resetcycle` template tag to allow resetting the sequence of\n>  the :ttag:`cycle` template tag.\n\n>* You can now specify specific directories for a particular\n>  :class:`filesystem.Loader &lt;django.template.loaders.filesystem.Loader&gt;`.\n\n>Tests\n>~~~~~\n\n>* Added :meth:`.DiscoverRunner.get_test_runner_kwargs` to allow customizing the\n>  keyword arguments passed to the test runner.\n\n>* Added the :option:`test --debug-mode` option to help troubleshoot test\n>  failures by setting the :setting:`DEBUG` setting to ``True``.\n\n>* The new :func:`django.test.utils.setup_databases` (moved from\n>  ``django.test.runner``) and :func:`~django.test.utils.teardown_databases`\n>  functions make it easier to build custom test runners.\n\n>* Added support for :meth:`python:unittest.TestCase.subTest`’s when using the\n>  :option:`test --parallel` option.\n\n>* ``DiscoverRunner`` now runs the system checks at the start of a test run.\n>  Override the :meth:`.DiscoverRunner.run_checks` method if you want to disable\n>  that.\n\n>Validators\n>~~~~~~~~~~\n\n>* Added :class:`~django.core.validators.FileExtensionValidator` to validate\n>  file extensions and\n>  :data:`~django.core.validators.validate_image_file_extension` to validate\n>  image files.\n\n>.. _backwards-incompatible-1.11:\n\n>Backwards incompatible changes in 1.11\n>======================================\n\n>:mod:`django.contrib.gis`\n>-------------------------\n\n>* To simplify the codebase and because it&#39;s easier to install than when\n>  ``contrib.gis`` was first released, :ref:`gdalbuild` is now a required\n>  dependency for GeoDjango. In older versions, it&#39;s only required for SQLite.\n\n>* ``contrib.gis.maps`` is removed as it interfaces with a retired version of\n>  the Google Maps API and seems to be unmaintained. If you&#39;re using it, `let\n>  us know &lt;https://code.djangoproject.com/ticket/14284&gt;`_.\n\n>* The ``GEOSGeometry`` equality operator now also compares SRID.\n\n>* The OpenLayers-based form widgets now use OpenLayers 3, and the\n>  ``gis/openlayers.html`` and ``gis/openlayers-osm.html`` templates have been\n>  updated. Check your project if you subclass these widgets or extend the\n>  templates. Also, the new widgets work a bit differently than the old ones.\n>  Instead of using a toolbar in the widget, you click to draw, click and drag\n>  to move the map, and click and drag a point/vertex/corner to move it.\n\n>* Support for SpatiaLite &lt; 4.0 is dropped.\n\n>* Support for GDAL 1.7 and 1.8 is dropped.\n\n>* The widgets in ``contrib.gis.forms.widgets`` and the admin&#39;s\n>  ``OpenLayersWidget`` use the :doc:`form rendering API &lt;/ref/forms/renderers&gt;`\n>  rather than ``loader.render_to_string()``. If you&#39;re using a custom widget\n>  template, you&#39;ll need to be sure your form renderer can locate it. For\n>  example, you could use the :class:`~django.forms.renderers.TemplatesSetting`\n>  renderer.\n\n>:mod:`django.contrib.staticfiles`\n>---------------------------------\n\n>* ``collectstatic`` may now fail during post-processing when using a hashed\n>  static files storage if a reference loop exists (e.g. ``&#39;foo.css&#39;``\n>  references ``&#39;bar.css&#39;`` which itself references ``&#39;foo.css&#39;``) or if the\n>  chain of files referencing other files is too deep to resolve in several\n>  passes. In the latter case, increase the number of passes using\n>  :attr:`.ManifestStaticFilesStorage.max_post_process_passes`.\n\n>* When using ``ManifestStaticFilesStorage``, static files not found in the\n>  manifest at runtime now raise a ``ValueError`` instead of returning an\n>  unchanged path. You can revert to the old behavior by setting\n>  :attr:`.ManifestStaticFilesStorage.manifest_strict` to ``False``.\n\n>Database backend API\n>--------------------\n\n>* The ``DatabaseOperations.time_trunc_sql()`` method is added to support\n>  ``TimeField`` truncation. It accepts a ``lookup_type`` and ``field_name``\n>  arguments and returns the appropriate SQL to truncate the given time field\n>  ``field_name`` to a time object with only the given specificity. The\n>  ``lookup_type`` argument can be either ``&#39;hour&#39;``, ``&#39;minute&#39;``, or\n>  ``&#39;second&#39;``.\n\n>* The ``DatabaseOperations.datetime_cast_time_sql()`` method is added to\n>  support the :lookup:`time` lookup. It accepts a ``field_name`` and ``tzname``\n>  arguments and returns the SQL necessary to cast a datetime value to time value.\n\n>* To enable ``FOR UPDATE SKIP LOCKED`` support, set\n>  ``DatabaseFeatures.has_select_for_update_skip_locked = True``.\n\n>* The new ``DatabaseFeatures.supports_index_column_ordering`` attribute\n>  specifies if a database allows defining ordering for columns in indexes. The\n>  default value is ``True`` and the ``DatabaseIntrospection.get_constraints()``\n>  method should include an ``&#39;orders&#39;`` key in each of the returned\n>  dictionaries with a list of ``&#39;ASC&#39;`` and/or ``&#39;DESC&#39;`` values corresponding\n>  to the the ordering of each column in the index.\n\n>* :djadmin:`inspectdb` no longer calls ``DatabaseIntrospection.get_indexes()``\n>  which is deprecated. Custom database backends should ensure all types of\n>  indexes are returned by ``DatabaseIntrospection.get_constraints()``.\n\n>* Renamed the ``ignores_quoted_identifier_case`` feature to\n>  ``ignores_table_name_case`` to more accurately reflect how it is used.\n\n>* The ``name`` keyword argument is added to the\n>  ``DatabaseWrapper.create_cursor(self, name=None)`` method to allow usage of\n>  server-side cursors on backends that support it.\n\n>Dropped support for PostgreSQL 9.2 and PostGIS 2.0\n>--------------------------------------------------\n\n>Upstream support for PostgreSQL 9.2 ends in September 2017. As a consequence,\n>Django 1.11 sets PostgreSQL 9.3 as the minimum version it officially supports.\n\n>Support for PostGIS 2.0 is also removed as PostgreSQL 9.2 is the last version\n>to support it.\n\n>Also, the minimum supported version of psycopg2 is increased from 2.4.5 to\n>2.5.4.\n\n>.. _liveservertestcase-port-zero-change:\n\n>``LiveServerTestCase`` binds to port zero\n>-----------------------------------------\n\n>Rather than taking a port range and iterating to find a free port,\n>``LiveServerTestCase`` binds to port zero and relies on the operating system\n>to assign a free port. The ``DJANGO_LIVE_TEST_SERVER_ADDRESS`` environment\n>variable is no longer used, and as it&#39;s also no longer used, the\n>``manage.py test --liveserver`` option is removed.\n\n>If you need to bind ``LiveServerTestCase`` to a specific port, use the ``port``\n>attribute added in Django 1.11.2.\n\n>Protection against insecure redirects in :mod:`django.contrib.auth` and ``i18n`` views\n>--------------------------------------------------------------------------------------\n\n>``LoginView``, ``LogoutView`` (and the deprecated function-based equivalents),\n>and :func:`~django.views.i18n.set_language` protect users from being redirected\n>to non-HTTPS ``next`` URLs when the app is running over HTTPS.\n\n>``QuerySet.get_or_create()`` and ``update_or_create()`` validate arguments\n>--------------------------------------------------------------------------\n\n>To prevent typos from passing silently,\n>:meth:`~django.db.models.query.QuerySet.get_or_create` and\n>:meth:`~django.db.models.query.QuerySet.update_or_create` check that their\n>arguments are model fields. This should be backwards-incompatible only in the\n>fact that it might expose a bug in your project.\n\n>``pytz`` is a required dependency and support for ``settings.TIME_ZONE = None`` is removed\n>------------------------------------------------------------------------------------------\n\n>To simplify Django&#39;s timezone handling, ``pytz`` is now a required dependency.\n>It&#39;s automatically installed along with Django.\n\n>Support for ``settings.TIME_ZONE = None`` is removed as the behavior isn&#39;t\n>commonly used and is questionably useful. If you want to automatically detect\n>the timezone based on the system timezone, you can use `tzlocal\n>&lt;https://pypi.python.org/pypi/tzlocal&gt;`_::\n\n>    from tzlocal import get_localzone\n\n>    TIME_ZONE = get_localzone().zone\n\n>This works similar to ``settings.TIME_ZONE = None`` except that it also sets\n>``os.environ[&#39;TZ&#39;]``. `Let us know\n>&lt;https://groups.google.com/d/topic/django-developers/OAV3FChfuPM/discussion&gt;`__\n>if there&#39;s a use case where you find you can&#39;t adapt your code to set a\n>``TIME_ZONE``.\n\n>HTML changes in admin templates\n>-------------------------------\n\n>``&lt;p class=&quot;help&quot;&gt;`` is replaced with a ``&lt;div&gt;`` tag to allow including lists\n>inside help text.\n\n>Read-only fields are wrapped in ``&lt;div class=&quot;readonly&quot;&gt;...&lt;/div&gt;`` instead of\n>``&lt;p&gt;...&lt;/p&gt;`` to allow any kind of HTML as the field&#39;s content.\n\n>.. _template-widget-incompatibilities-1-11:\n\n>Changes due to the introduction of template-based widget rendering\n>------------------------------------------------------------------\n\n>Some undocumented classes in ``django.forms.widgets`` are removed:\n\n>* ``SubWidget``\n>* ``RendererMixin``, ``ChoiceFieldRenderer``, ``RadioFieldRenderer``,\n>  ``CheckboxFieldRenderer``\n>* ``ChoiceInput``, ``RadioChoiceInput``, ``CheckboxChoiceInput``\n\n>The ``Widget.format_output()`` method is removed. Use a custom widget template\n>instead.\n\n>Some widget values, such as ``&lt;select&gt;`` options, are now localized if\n>``settings.USE_L10N=True``. You could revert to the old behavior with custom\n>widget templates that uses the :ttag:`localize` template tag to turn off\n>localization.\n\n>``django.template.backends.django.Template.render()`` prohibits non-dict context\n>--------------------------------------------------------------------------------\n\n>For compatibility with multiple template engines,\n>``django.template.backends.django.Template.render()`` (returned from high-level\n>template loader APIs such as ``loader.get_template()``) must receive a\n>dictionary of context rather than ``Context`` or ``RequestContext``. If you\n>were passing either of the two classes, pass a dictionary instead -- doing so\n>is backwards-compatible with older versions of Django.\n\n>Model state changes in migration operations\n>-------------------------------------------\n\n>To improve the speed of applying migrations, rendering of related models is\n>delayed until an operation that needs them (e.g. ``RunPython``). If you have a\n>custom operation that works with model classes or model instances from the\n>``from_state`` argument in ``database_forwards()`` or ``database_backwards()``,\n>you must render model states using the ``clear_delayed_apps_cache()`` method as\n>described in :ref:`writing your own migration operation\n>&lt;writing-your-own-migration-operation&gt;`.\n\n>Miscellaneous\n>-------------\n\n>* If no items in the feed have a ``pubdate`` or ``updateddate`` attribute,\n>  :meth:`SyndicationFeed.latest_post_date()\n>  &lt;django.utils.feedgenerator.SyndicationFeed.latest_post_date&gt;` now returns\n>  the current UTC date/time, instead of a datetime without any timezone\n>  information.\n\n>* CSRF failures are logged to the ``django.security.csrf`` logger instead of\n>  ``django.request``.\n\n>* :setting:`ALLOWED_HOSTS` validation is no longer disabled when running tests.\n>  If your application includes tests with custom host names, you must include\n>  those host names in :setting:`ALLOWED_HOSTS`. See\n>  :ref:`topics-testing-advanced-multiple-hosts`.\n\n>* Using a foreign key&#39;s id (e.g. ``&#39;field_id&#39;``) in ``ModelAdmin.list_display``\n>  displays the related object&#39;s ID. Remove the ``_id`` suffix if you want the\n>  old behavior of the string representation of the object.\n\n>* In model forms, :class:`~django.db.models.CharField` with ``null=True`` now\n>  saves ``NULL`` for blank values instead of empty strings.\n\n>* On Oracle, :meth:`Model.validate_unique()\n>  &lt;django.db.models.Model.validate_unique&gt;` no longer checks empty strings for\n>  uniqueness as the database interprets the value as ``NULL``.\n\n>* If you subclass :class:`.AbstractUser` and override ``clean()``, be sure it\n>  calls ``super()``. :meth:`.BaseUserManager.normalize_email` is called in a\n>  new :meth:`.AbstractUser.clean` method so that normalization is applied in\n>  cases like model form validation.\n\n>* ``EmailField`` and ``URLField`` no longer accept the ``strip`` keyword\n>  argument. Remove it because it doesn&#39;t have an effect in older versions of\n>  Django as these fields always strip whitespace.\n\n>* The ``checked`` and ``selected`` attribute rendered by form widgets now uses\n>  HTML5 boolean syntax rather than XHTML&#39;s ``checked=&#39;checked&#39;`` and\n>  ``selected=&#39;selected&#39;``.\n\n>* :meth:`RelatedManager.add()\n>  &lt;django.db.models.fields.related.RelatedManager.add&gt;`,\n>  :meth:`~django.db.models.fields.related.RelatedManager.remove`,\n>  :meth:`~django.db.models.fields.related.RelatedManager.clear`, and\n>  :meth:`~django.db.models.fields.related.RelatedManager.set` now\n>  clear the ``prefetch_related()`` cache.\n\n>* To prevent possible loss of saved settings,\n>  :func:`~django.test.utils.setup_test_environment` now raises an exception if\n>  called a second time before calling\n>  :func:`~django.test.utils.teardown_test_environment`.\n\n>* The undocumented ``DateTimeAwareJSONEncoder`` alias for\n>  :class:`~django.core.serializers.json.DjangoJSONEncoder` (renamed in Django\n>  1.0) is removed.\n\n>* The :class:`cached template loader &lt;django.template.loaders.cached.Loader&gt;`\n>  is now enabled if :setting:`DEBUG` is ``False`` and\n>  :setting:`OPTIONS[&#39;loaders&#39;] &lt;TEMPLATES-OPTIONS&gt;` isn&#39;t specified. This could\n>  be backwards-incompatible if you have some :ref:`template tags that aren&#39;t\n>  thread safe &lt;template_tag_thread_safety&gt;`.\n\n>* The prompt for stale content type deletion no longer occurs after running the\n>  ``migrate`` command. Use the new :djadmin:`remove_stale_contenttypes` command\n>  instead.\n\n>* The admin&#39;s widget for ``IntegerField`` uses ``type=&quot;number&quot;`` rather than\n>  ``type=&quot;text&quot;``.\n\n>* Conditional HTTP headers are now parsed and compared according to the\n>  :rfc:`7232` Conditional Requests specification rather than the older\n>  :rfc:`2616`.\n\n>* :func:`~django.utils.cache.patch_response_headers` no longer adds a\n>  ``Last-Modified`` header. According to the :rfc:`7234section-4.2.2`, this\n>  header is useless alongside other caching headers that provide an explicit\n>  expiration time, e.g. ``Expires`` or ``Cache-Control``.\n>  :class:`~django.middleware.cache.UpdateCacheMiddleware` and\n>  :func:`~django.utils.cache.add_never_cache_headers` call\n>  ``patch_response_headers()`` and therefore are also affected by this change.\n\n>* In the admin templates, ``&lt;p class=&quot;help&quot;&gt;`` is replaced with a ``&lt;div&gt;`` tag\n>  to allow including lists inside help text.\n\n>* :class:`~django.middleware.http.ConditionalGetMiddleware` no longer sets the\n>  ``Date`` header as Web servers set that header. It also no longer sets the\n>  ``Content-Length`` header as this is now done by\n>  :class:`~django.middleware.common.CommonMiddleware`.\n\n>* :meth:`~django.apps.AppConfig.get_model` and\n>  :meth:`~django.apps.AppConfig.get_models` now raise\n>  :exc:`~django.core.exceptions.AppRegistryNotReady` if they&#39;re called before\n>  models of all applications have been loaded. Previously they only required\n>  the target application&#39;s models to be loaded and thus could return models\n>  without all their relations set up. If you need the old behavior of\n>  ``get_model()``, set the ``require_ready`` argument to ``False``.\n\n>* The unused ``BaseCommand.can_import_settings`` attribute is removed.\n\n>* The undocumented ``django.utils.functional.lazy_property`` is removed.\n\n>* For consistency with non-multipart requests, ``MultiPartParser.parse()`` now\n>  leaves ``request.POST`` immutable. If you&#39;re modifying that ``QueryDict``,\n>  you must now first copy it, e.g. ``request.POST.copy()``.\n\n>* Support for ``cx_Oracle`` &lt; 5.2 is removed.\n\n>* Support for IPython &lt; 1.0 is removed from the ``shell`` command.\n\n>* The signature of private API ``Widget.build_attrs()`` changed from\n>  ``extra_attrs=None, **kwargs`` to ``base_attrs, extra_attrs=None``.\n\n>* File-like objects (e.g., :class:`~io.StringIO` and :class:`~io.BytesIO`)\n>  uploaded to an :class:`~django.db.models.ImageField` using the test client\n>  now require a ``name`` attribute with a value that passes the\n>  :data:`~django.core.validators.validate_image_file_extension` validator.\n>  See the note in :meth:`.Client.post`.\n\n>.. _deprecated-features-1.11:\n\n>Features deprecated in 1.11\n>===========================\n\n>``models.permalink()`` decorator\n>--------------------------------\n\n>Use :func:`django.urls.reverse` instead. For example::\n\n>    from django.db import models\n\n>    class MyModel(models.Model):\n>        ...\n\n>        models.permalink\n>        def url(self):\n>            return (&#39;guitarist_detail&#39;, [self.slug])\n\n>becomes::\n\n>    from django.db import models\n>    from django.urls import reverse\n\n>    class MyModel(models.Model):\n>        ...\n\n>        def url(self):\n>            return reverse(&#39;guitarist_detail&#39;, args=[self.slug])\n\n>Miscellaneous\n>-------------\n\n>* ``contrib.auth``’s ``login()`` and ``logout()`` function-based views are\n>  deprecated in favor of new class-based views\n>  :class:`~django.contrib.auth.views.LoginView` and\n>  :class:`~django.contrib.auth.views.LogoutView`.\n\n>* The unused ``extra_context`` parameter of\n>  ``contrib.auth.views.logout_then_login()``  is deprecated.\n\n>* ``contrib.auth``’s ``password_change()``, ``password_change_done()``,\n>  ``password_reset()``, ``password_reset_done()``, ``password_reset_confirm()``,\n>  and ``password_reset_complete()`` function-based views are deprecated in favor\n>  of new class-based views\n>  :class:`~django.contrib.auth.views.PasswordChangeView`,\n>  :class:`~django.contrib.auth.views.PasswordChangeDoneView`,\n>  :class:`~django.contrib.auth.views.PasswordResetView`,\n>  :class:`~django.contrib.auth.views.PasswordResetDoneView`,\n>  :class:`~django.contrib.auth.views.PasswordResetConfirmView`, and\n>  :class:`~django.contrib.auth.views.PasswordResetCompleteView`.\n\n>* ``django.test.runner.setup_databases()`` is moved to\n>  :func:`django.test.utils.setup_databases`. The old location is deprecated.\n\n>* ``django.utils.translation.string_concat()`` is deprecated in\n>  favor of :func:`django.utils.text.format_lazy`. ``string_concat(*strings)``\n>  can be replaced by ``format_lazy(&#39;{}&#39; * len(strings), *strings)``.\n\n>* For the ``PyLibMCCache`` cache backend, passing ``pylibmc`` behavior settings\n>  as top-level attributes of ``OPTIONS`` is deprecated. Set them under a\n>  ``behaviors`` key within ``OPTIONS`` instead.\n\n>* The ``host`` parameter of ``django.utils.http.is_safe_url()`` is deprecated\n>  in favor of the new ``allowed_hosts`` parameter.\n\n>* Silencing exceptions raised while rendering the\n>  :ttag:`{% include %} &lt;include&gt;` template tag is deprecated as the behavior is\n>  often more confusing than helpful. In Django 2.1, the exception will be\n>  raised.\n\n>* ``DatabaseIntrospection.get_indexes()`` is deprecated in favor of\n>  ``DatabaseIntrospection.get_constraints()``.\n\n>* :func:`~django.contrib.auth.authenticate` now passes a ``request`` argument\n>  to the ``authenticate()`` method of authentication backends. Support for\n>  methods that don&#39;t accept ``request`` as the first positional argument will\n>  be removed in Django 2.1.\n\n>* The ``USE_ETAGS`` setting is deprecated in favor of\n>  :class:`~django.middleware.http.ConditionalGetMiddleware` which now adds the\n>  ``ETag`` header to responses regardless of the setting. ``CommonMiddleware``\n>  and ``django.utils.cache.patch_response_headers()`` will no longer set ETags\n>  when the deprecation ends.\n\n>* ``Model._meta.has_auto_field`` is deprecated in favor of checking if\n>  ``Model._meta.auto_field is not None``.\n\n>* Using regular expression groups with ``iLmsu`` in ``url()`` is deprecated.\n>  The only group that&#39;s useful is ``(?i)`` for case-insensitive URLs, however,\n>  case-insensitive URLs aren&#39;t a good practice because they create multiple\n>  entries for search engines, for example. An alternative solution could be to\n>  create a :data:`~django.conf.urls.handler404` that looks for uppercase\n>  characters in the URL and redirects to a lowercase equivalent.\n\n>* The ``renderer`` argument is added to the :meth:`Widget.render()\n>  &lt;django.forms.Widget.render&gt;` method. Methods that don&#39;t accept that argument\n>  will work through a deprecation period.\n\n\n>===========================\n\n\n>### 1.10.7\n\n>===========================\n\n>*April 4, 2017*\n\n>Django 1.10.7 fixes two security issues and a bug in 1.10.6.\n\n>CVE-2017-7233: Open redirect and possible XSS attack via user-supplied numeric redirect URLs\n>============================================================================================\n\n>Django relies on user input in some cases  (e.g.\n>:func:`django.contrib.auth.views.login` and :doc:`i18n &lt;/topics/i18n/index&gt;`)\n>to redirect the user to an &quot;on success&quot; URL. The security check for these\n>redirects (namely ``django.utils.http.is_safe_url()``) considered some numeric\n>URLs (e.g. ``http:999999999``) &quot;safe&quot; when they shouldn&#39;t be.\n\n>Also, if a developer relies on ``is_safe_url()`` to provide safe redirect\n>targets and puts such a URL into a link, they could suffer from an XSS attack.\n\n>CVE-2017-7234: Open redirect vulnerability in ``django.views.static.serve()``\n>=============================================================================\n\n>A maliciously crafted URL to a Django site using the\n>:func:`~django.views.static.serve` view could redirect to any other domain. The\n>view no longer does any redirects as they don&#39;t provide any known, useful\n>functionality.\n\n>Note, however, that this view has always carried a warning that it is not\n>hardened for production use and should be used only as a development aid.\n\n>Bugfixes\n>========\n\n>* Made admin&#39;s ``RelatedFieldWidgetWrapper`` use the wrapped widget&#39;s\n>  ``value_omitted_from_data()`` method (:ticket:`27905`).\n\n>* Fixed model form ``default`` fallback for ``SelectMultiple``\n>  (:ticket:`27993`).\n\n\n>===========================\n\n\n>### 1.10.6\n\n>===========================\n\n>*March 1, 2017*\n\n>Django 1.10.6 fixes several bugs in 1.10.5.\n\n>Bugfixes\n>========\n\n>* Fixed ``ClearableFileInput``’s &quot;Clear&quot; checkbox on model form fields where\n>  the model field has a ``default`` (:ticket:`27805`).\n\n>* Fixed ``RequestDataTooBig`` and ``TooManyFieldsSent`` exceptions crashing\n>  rather than generating a bad request response (:ticket:`27820`).\n\n>* Fixed a crash on Oracle and PostgreSQL when subtracting ``DurationField``\n>  or ``IntegerField`` from ``DateField`` (:ticket:`27828`).\n\n>* Fixed query expression date subtraction accuracy on PostgreSQL for\n>  differences larger than a month (:ticket:`27856`).\n\n>* Fixed a ``GDALException`` raised by ``GDALClose`` on GDAL ≥ 2.0\n>  (:ticket:`27479`).\n\n\n>===========================\n\n\n>### 1.10.5\n\n>===========================\n\n>*January 4, 2017*\n\n>Django 1.10.5 fixes several bugs in 1.10.4.\n\n>Bugfixes\n>========\n\n>* Fixed a crash in the debug view if ``request.user`` can&#39;t be retrieved, such\n>  as if the database is unavailable (:ticket:`27567`).\n\n>* Fixed occasional missing plural forms in ``JavaScriptCatalog``\n>  (:ticket:`27418`).\n\n>* Fixed a regression in the ``timesince`` and ``timeuntil`` filters that caused\n>  incorrect results for dates in a leap year (:ticket:`27637`).\n\n>* Fixed a regression where ``collectstatic`` overwrote newer files in remote\n>  storages (:ticket:`27658`).\n\n\n>===========================\n\n\n>### 1.10.4\n\n>===========================\n\n>*December 1, 2016*\n\n>Django 1.10.4 fixes several bugs in 1.10.3.\n\n>Bugfixes\n>========\n\n>* Quoted the Oracle test user&#39;s password in queries to fix the &quot;ORA-00922:\n>  missing or invalid option&quot; error when the password starts with a number or\n>  special character (:ticket:`27420`).\n\n>* Fixed incorrect ``app_label`` / ``model_name`` arguments for\n>  ``allow_migrate()`` in ``makemigrations`` migration consistency checks\n>  (:ticket:`27461`).\n\n>* Made ``Model.delete(keep_parents=True)`` preserve parent reverse\n>  relationships in multi-table inheritance (:ticket:`27407`).\n\n>* Fixed a ``QuerySet.update()`` crash on SQLite when updating a\n>  ``DateTimeField`` with an ``F()`` expression and a ``timedelta``\n>  (:ticket:`27544`).\n\n>* Prevented ``LocaleMiddleware`` from redirecting on URLs that should return\n>  404 when using ``prefix_default_language=False`` (:ticket:`27402`).\n\n>* Prevented an unnecessary index from being created on an InnoDB ``ForeignKey``\n>  when the field was added after the model was created (:ticket:`27558`).\n\n\n>===========================\n\n\n>### 1.10.3\n\n>===========================\n\n>*November 1, 2016*\n\n>Django 1.10.3 fixes two security issues and several bugs in 1.10.2.\n\n>User with hardcoded password created when running tests on Oracle\n>=================================================================\n\n>When running tests with an Oracle database, Django creates a temporary database\n>user. In older versions, if a password isn&#39;t manually specified in the database\n>settings ``TEST`` dictionary, a hardcoded password is used. This could allow\n>an attacker with network access to the database server to connect.\n\n>This user is usually dropped after the test suite completes, but not when using\n>the ``manage.py test --keepdb`` option or if the user has an active session\n>(such as an attacker&#39;s connection).\n\n>A randomly generated password is now used for each test run.\n\n>DNS rebinding vulnerability when ``DEBUG=True``\n>===============================================\n\n>Older versions of Django don&#39;t validate the ``Host`` header against\n>``settings.ALLOWED_HOSTS`` when ``settings.DEBUG=True``. This makes them\n>vulnerable to a `DNS rebinding attack\n>&lt;http://benmmurphy.github.io/blog/2016/07/11/rails-webconsole-dns-rebinding/&gt;`_.\n\n>While Django doesn&#39;t ship a module that allows remote code execution, this is\n>at least a cross-site scripting vector, which could be quite serious if\n>developers load a copy of the production database in development or connect to\n>some production services for which there&#39;s no development instance, for\n>example. If a project uses a package like the ``django-debug-toolbar``, then\n>the attacker could execute arbitrary SQL, which could be especially bad if the\n>developers connect to the database with a superuser account.\n\n>``settings.ALLOWED_HOSTS`` is now validated regardless of ``DEBUG``. For\n>convenience, if ``ALLOWED_HOSTS`` is empty and ``DEBUG=True``, the following\n>variations of localhost are allowed ``[&#39;localhost&#39;, &#39;127.0.0.1&#39;, &#39;::1&#39;]``. If\n>your local settings file has your production ``ALLOWED_HOSTS`` value, you must\n>now omit it to get those fallback values.\n\n>Bugfixes\n>========\n\n>* Allowed ``User.is_authenticated`` and ``User.is_anonymous`` properties to be\n>  tested for ``set`` membership (:ticket:`27309`).\n\n>* Fixed a performance regression when running ``migrate`` in projects\n>  with ``RenameModel`` operations (:ticket:`27279`).\n\n>* Added ``model_name`` to the ``allow_migrate()`` calls in ``makemigrations``\n>  (:ticket:`27200`).\n\n>* Made the ``JavaScriptCatalog`` view respect the ``packages`` argument;\n>  previously it was ignored (:ticket:`27374`).\n\n>* Fixed ``QuerySet.bulk_create()`` on PostgreSQL when the number of objects is\n>  a multiple plus one of ``batch_size`` (:ticket:`27385`).\n\n>* Prevented ``i18n_patterns()`` from using too much of the URL as the language\n>  to fix a use case for ``prefix_default_language=False`` (:ticket:`27063`).\n\n>* Replaced a possibly incorrect redirect from ``SessionMiddleware`` when a\n>  session is destroyed in a concurrent request with a ``SuspiciousOperation``\n>  to indicate that the request can&#39;t be completed (:ticket:`27363`).\n\n\n>===========================\n\n\n>### 1.10.2\n\n>===========================\n\n>*October 1, 2016*\n\n>Django 1.10.2 fixes several bugs in 1.10.1.\n\n>Bugfixes\n>========\n\n>* Fixed a crash in MySQL database validation where ``SELECT sql_mode``\n>  doesn&#39;t return a result (:ticket:`27180`).\n\n>* Allowed combining ``contrib.postgres.search.SearchQuery`` with more than one\n>  ``&amp;`` or ``|`` operators (:ticket:`27143`).\n\n>* Disabled system check for URL patterns beginning with a &#39;/&#39; when\n>  ``APPEND_SLASH=False`` (:ticket:`27238`).\n\n>* Fixed model form ``default`` fallback for ``CheckboxSelectMultiple``,\n>  ``MultiWidget``, ``FileInput``, ``SplitDateTimeWidget``, ``SelectDateWidget``,\n>  and ``SplitArrayWidget`` (:ticket:`27186`). Custom widgets affected by this\n>  issue should implement :meth:`~django.forms.Widget.value_omitted_from_data`.\n\n>* Fixed a crash in ``runserver`` logging during a &quot;Broken pipe&quot; error\n>  (:ticket:`27271`).\n\n>* Fixed a regression where unchanged localized date/time fields were listed as\n>  changed in the admin&#39;s model history messages (:ticket:`27302`).\n\n\n>===========================\n\n\n>### 1.10.1\n\n>===========================\n\n>*September 1, 2016*\n\n>Django 1.10.1 fixes several bugs in 1.10.\n\n>Bugfixes\n>========\n\n>* Fixed a crash in MySQL connections where ``SELECT SQL_AUTO_IS_NULL``\n>  doesn&#39;t return a result (:ticket:`26991`).\n\n>* Allowed ``User.is_authenticated`` and ``User.is_anonymous`` properties to be\n>  compared using ``==``, ``!=``, and ``|`` (:ticket:`26988`, :ticket:`27154`).\n\n>* Removed the broken ``BaseCommand.usage()`` method which was for\n>  ``optparse`` support (:ticket:`27000`).\n\n>* Fixed a checks framework crash with an empty ``Meta.default_permissions``\n>  (:ticket:`26997`).\n\n>* Fixed a regression in the number of queries when using ``RadioSelect`` with a\n>  ``ModelChoiceField`` form field (:ticket:`27001`).\n\n>* Fixed a crash if ``request.META[&#39;CONTENT_LENGTH&#39;]`` is an empty string\n>  (:ticket:`27005`).\n\n>* Fixed the ``isnull`` lookup on a ``ForeignKey`` with its ``to_field``\n>  pointing to a ``CharField`` or pointing to a ``CharField`` defined with\n>  ``primary_key=True`` (:ticket:`26983`).\n\n>* Prevented the ``migrate`` command from raising\n>  ``InconsistentMigrationHistory`` in the presence of unapplied squashed\n>  migrations (:ticket:`27004`).\n\n>* Fixed a regression in ``Client.force_login()`` which required specifying a\n>  ``backend`` rather than automatically using the first one if multiple\n>  backends are configured (:ticket:`27027`).\n\n>* Made ``QuerySet.bulk_create()`` properly initialize model instances on\n>  backends, such as PostgreSQL, that support returning the IDs of the created\n>  records so that many-to-many relationships can be used on the new objects\n>  (:ticket:`27026`).\n\n>* Fixed crash of ``django.views.static.serve()`` with ``show_indexes`` enabled\n>  (:ticket:`26973`).\n\n>* Fixed ``ClearableFileInput`` to avoid the ``required`` HTML attribute when\n>  initial data exists (:ticket:`27037`).\n\n>* Fixed annotations with database functions when combined with lookups on\n>  PostGIS (:ticket:`27014`).\n\n>* Reallowed the ``{% for %}`` tag to unpack any iterable (:ticket:`27058`).\n\n>* Made ``makemigrations`` skip inconsistent history checks on non-default\n>  databases if database routers aren&#39;t in use or if no apps can be migrated\n>  to the database (:ticket:`27054`, :ticket:`27110`, :ticket:`27142`).\n\n>* Removed duplicated managers in ``Model._meta.managers`` (:ticket:`27073`).\n\n>* Fixed ``contrib.admindocs`` crash when a view is in a class, such as some of\n>  the admin views (:ticket:`27018`).\n\n>* Reverted a few admin checks that checked ``field.many_to_many`` back to\n>  ``isinstance(field, models.ManyToManyField)`` since it turned out the checks\n>  weren&#39;t suitable to be generalized like that (:ticket:`26998`).\n\n>* Added the database alias to the ``InconsistentMigrationHistory`` message\n>  raised by ``makemigrations`` and ``migrate`` (:ticket:`27089`).\n\n>* Fixed the creation of ``ContentType`` and ``Permission`` objects for models\n>  of applications without migrations when calling the ``migrate`` command with\n>  no migrations to apply (:ticket:`27044`).\n\n>* Included the already applied migration state changes in the ``Apps`` instance\n>  provided to the ``pre_migrate`` signal receivers to allow ``ContentType``\n>  renaming to be performed on model rename (:ticket:`27100`).\n\n>* Reallowed subclassing ``UserCreationForm`` without ``USERNAME_FIELD`` in\n>  ``Meta.fields`` (:ticket:`27111`).\n\n>* Fixed a regression in model forms where model fields with a ``default`` that\n>  didn&#39;t appear in POST data no longer used the ``default`` (:ticket:`27039`).\n\n\n>=========================\n\n\n>### 1.10\n\n>=========================\n\n>*August 1, 2016*\n\n>Welcome to Django 1.10!\n\n>These release notes cover the :ref:`new features &lt;whats-new-1.10&gt;`, as well as\n>some :ref:`backwards incompatible changes &lt;backwards-incompatible-1.10&gt;` you&#39;ll\n>want to be aware of when upgrading from Django 1.9 or older versions. We&#39;ve\n>:ref:`dropped some features &lt;removed-features-1.10&gt;` that have reached the end\n>of their deprecation cycle, and we&#39;ve :ref:`begun the deprecation process for\n>some features &lt;deprecated-features-1.10&gt;`.\n\n>See the :doc:`/howto/upgrade-version` guide if you&#39;re updating an existing\n>project.\n\n>Python compatibility\n>====================\n\n>Like Django 1.9, Django 1.10 requires Python 2.7, 3.4, or 3.5. We **highly\n>recommend** and only officially support the latest release of each series.\n\n>.. _whats-new-1.10:\n\n>What&#39;s new in Django 1.10\n>=========================\n\n>Full text search for PostgreSQL\n>-------------------------------\n\n>``django.contrib.postgres`` now includes a :doc:`collection of database\n>functions &lt;/ref/contrib/postgres/search&gt;` to allow the use of the full text\n>search engine. You can search across multiple fields in your relational\n>database, combine the searches with other lookups, use different language\n>configurations and weightings, and rank the results by relevance.\n\n>It also now includes trigram support, using the :lookup:`trigram_similar`\n>lookup, and the :class:`~django.contrib.postgres.search.TrigramSimilarity` and\n>:class:`~django.contrib.postgres.search.TrigramDistance` expressions.\n\n>New-style middleware\n>--------------------\n\n>:doc:`A new style of middleware is introduced &lt;/topics/http/middleware&gt;` to\n>solve the lack of strict request/response layering of the old-style of\n>middleware described in `DEP 0005\n>&lt;https://github.com/django/deps/blob/master/final/0005-improved-middleware.rst&gt;`_.\n>You&#39;ll need to :ref:`adapt old, custom middleware &lt;upgrading-middleware&gt;` and\n>switch from the ``MIDDLEWARE_CLASSES`` setting to the new :setting:`MIDDLEWARE`\n>setting to take advantage of the improvements.\n\n>Official support for Unicode usernames\n>--------------------------------------\n\n>The :class:`~django.contrib.auth.models.User` model in ``django.contrib.auth``\n>originally only accepted ASCII letters in usernames. Although it wasn&#39;t a\n>deliberate choice, Unicode characters have always been accepted when using\n>Python 3.\n\n>The username validator now explicitly accepts Unicode letters by\n>default on Python 3 only. This default behavior can be overridden by changing\n>the :attr:`~django.contrib.auth.models.User.username_validator` attribute of\n>the ``User`` model, or to any proxy of that model, using either\n>:class:`~django.contrib.auth.validators.ASCIIUsernameValidator` or\n>:class:`~django.contrib.auth.validators.UnicodeUsernameValidator`. Custom user\n>models may also use those validators.\n\n>Minor features\n>--------------\n\n>:mod:`django.contrib.admin`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* For sites running on a subpath, the default :attr:`URL for the &quot;View site&quot;\n>  link &lt;django.contrib.admin.AdminSite.site_url&gt;` at the top of each admin page\n>  will now point to ``request.META[&#39;SCRIPT_NAME&#39;]`` if set, instead of ``/``.\n\n>* The success message that appears after adding or editing an object now\n>  contains a link to the object&#39;s change form.\n\n>* All inline JavaScript is removed so you can enable the\n>  ``Content-Security-Policy`` HTTP header if you wish.\n\n>* The new :attr:`InlineModelAdmin.classes\n>  &lt;django.contrib.admin.InlineModelAdmin.classes&gt;` attribute allows specifying\n>  classes on inline fieldsets. Inlines with a ``collapse`` class will be\n>  initially collapsed and their header will have a small &quot;show&quot; link.\n\n>* If a user doesn&#39;t have the add permission, the ``object-tools`` block on a\n>  model&#39;s changelist will now be rendered (without the add button, of course).\n>  This makes it easier to add custom tools in this case.\n\n>* The :class:`~django.contrib.admin.models.LogEntry` model now stores change\n>  messages in a JSON structure so that the message can be dynamically translated\n>  using the current active language. A new ``LogEntry.get_change_message()``\n>  method is now the preferred way of retrieving the change message.\n\n>* Selected objects for fields in ``ModelAdmin.raw_id_fields`` now have a link\n>  to object&#39;s change form.\n\n>* Added &quot;No date&quot; and &quot;Has date&quot; choices for ``DateFieldListFilter`` if the\n>  field is nullable.\n\n>* The jQuery library embedded in the admin is upgraded from version 2.1.4 to\n>  2.2.3.\n\n>:mod:`django.contrib.auth`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* Added support for the :ref:`Argon2 password hash &lt;argon2_usage&gt;`. It&#39;s\n>  recommended over PBKDF2, however, it&#39;s not the default as it requires a\n>  third-party library.\n\n>* The default iteration count for the PBKDF2 password hasher has been increased\n>  by 25%. This backwards compatible change will not affect users who have\n>  subclassed ``django.contrib.auth.hashers.PBKDF2PasswordHasher`` to change the\n>  default value.\n\n>* The :func:`~django.contrib.auth.views.logout` view sends &quot;no-cache&quot; headers\n>  to prevent an issue where Safari caches redirects and prevents a user from\n>  being able to log out.\n\n>* Added the optional ``backend`` argument to :func:`~django.contrib.auth.login`\n>  to allow using it without credentials.\n\n>* The new :setting:`LOGOUT_REDIRECT_URL` setting controls the redirect of the\n>  :func:`~django.contrib.auth.views.logout` view, if the view doesn&#39;t get a\n>  ``next_page`` argument.\n\n>* The new ``redirect_authenticated_user`` parameter for the\n>  :func:`~django.contrib.auth.views.login` view allows redirecting\n>  authenticated users visiting the login page.\n\n>* The new :class:`~django.contrib.auth.backends.AllowAllUsersModelBackend` and\n>  :class:`~django.contrib.auth.backends.AllowAllUsersRemoteUserBackend` ignore\n>  the value of ``User.is_active``, while\n>  :class:`~django.contrib.auth.backends.ModelBackend` and\n>  :class:`~django.contrib.auth.backends.RemoteUserBackend` now reject inactive\n>  users.\n\n>:mod:`django.contrib.gis`\n>~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* :ref:`Distance lookups &lt;distance-lookups&gt;` now accept expressions as the\n>  distance value parameter.\n\n>* The new :attr:`GEOSGeometry.unary_union\n>  &lt;django.contrib.gis.geos.GEOSGeometry.unary_union&gt;` property computes the\n>  union of all the elements of this geometry.\n\n>* Added the :meth:`GEOSGeometry.covers()\n>  &lt;django.contrib.gis.geos.GEOSGeometry.covers&gt;` binary predicate.\n\n>* Added the :meth:`GDALBand.statistics()\n>  &lt;django.contrib.gis.gdal.GDALBand.statistics&gt;` method and\n>  :attr:`~django.contrib.gis.gdal.GDALBand.mean`\n>  and :attr:`~django.contrib.gis.gdal.GDALBand.std` attributes.\n\n>* Added support for the :class:`~django.contrib.gis.db.models.MakeLine`\n>  aggregate and :class:`~django.contrib.gis.db.models.functions.GeoHash`\n>  function on SpatiaLite.\n\n>* Added support for the\n>  :class:`~django.contrib.gis.db.models.functions.Difference`,\n>  :class:`~django.contrib.gis.db.models.functions.Intersection`, and\n>  :class:`~django.contrib.gis.db.models.functions.SymDifference`\n>  functions on MySQL.\n\n>* Added support for instantiating empty GEOS geometries.\n\n>* The new :attr:`~django.contrib.gis.geos.WKTWriter.trim` and\n>  :attr:`~django.contrib.gis.geos.WKTWriter.precision` properties\n>  of :class:`~django.contrib.gis.geos.WKTWriter` allow controlling\n>  output of the fractional part of the coordinates in WKT.\n\n>* Added the :attr:`LineString.closed\n>  &lt;django.contrib.gis.geos.LineString.closed&gt;` and\n>  :attr:`MultiLineString.closed\n>  &lt;django.contrib.gis.geos.MultiLineString.closed&gt;` properties.\n\n>* The :doc:`GeoJSON serializer &lt;/ref/contrib/gis/serializers&gt;` now outputs the\n>  primary key of objects in the ``properties`` dictionary if specific fields\n>  aren&#39;t specified.\n\n>* The ability to replicate input data on the :meth:`GDALBand.data()\n>  &lt;django.contrib.gis.gdal.GDALBand.data&gt;` method was added. Band data can\n>  now be updated with repeated values efficiently.\n\n>* Added database functions\n>  :class:`~django.contrib.gis.db.models.functions.IsValid` and\n>  :class:`~django.contrib.gis.db.models.functions.MakeValid`, as well as the\n>  :lookup:`isvalid` lookup, all for PostGIS. This allows filtering and\n>  repairing invalid geometries on the database side.\n\n>* Added raster support for all :doc:`spatial lookups\n>  &lt;/ref/contrib/gis/geoquerysets&gt;`.\n\n>:mod:`django.contrib.postgres`\n>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n>* For convenience, :class:`~django.contrib.postgres.fields.HStoreField` now\n>  casts its keys and values to strings.\n\n>:mod:`django.contrib.sessions`\n>~~~~","created_at":"2017-06-01T19:41:05Z","updated_at":"2017-06-01T19:41:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240/commits","review_comments_url":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240/comments","review_comment_url":"https://api.github.com/repos/raccoongang/xblock-video/pulls/comments{/number}","comments_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/240/comments","statuses_url":"https://api.github.com/repos/raccoongang/xblock-video/statuses/10763e791a4eab16a215f1469f447eb07b0a7151","head":{"label":"raccoongang:pyup-pin-django-1.11.2","ref":"pyup-pin-django-1.11.2","sha":"10763e791a4eab16a215f1469f447eb07b0a7151","user":{"login":"raccoongang","id":11388447,"avatar_url":"https://avatars3.githubusercontent.com/u/11388447?v=3","gravatar_id":"","url":"https://api.github.com/users/raccoongang","html_url":"https://github.com/raccoongang","followers_url":"https://api.github.com/users/raccoongang/followers","following_url":"https://api.github.com/users/raccoongang/following{/other_user}","gists_url":"https://api.github.com/users/raccoongang/gists{/gist_id}","starred_url":"https://api.github.com/users/raccoongang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raccoongang/subscriptions","organizations_url":"https://api.github.com/users/raccoongang/orgs","repos_url":"https://api.github.com/users/raccoongang/repos","events_url":"https://api.github.com/users/raccoongang/events{/privacy}","received_events_url":"https://api.github.com/users/raccoongang/received_events","type":"Organization","site_admin":false},"repo":{"id":72450225,"name":"xblock-video","full_name":"raccoongang/xblock-video","owner":{"login":"raccoongang","id":11388447,"avatar_url":"https://avatars3.githubusercontent.com/u/11388447?v=3","gravatar_id":"","url":"https://api.github.com/users/raccoongang","html_url":"https://github.com/raccoongang","followers_url":"https://api.github.com/users/raccoongang/followers","following_url":"https://api.github.com/users/raccoongang/following{/other_user}","gists_url":"https://api.github.com/users/raccoongang/gists{/gist_id}","starred_url":"https://api.github.com/users/raccoongang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raccoongang/subscriptions","organizations_url":"https://api.github.com/users/raccoongang/orgs","repos_url":"https://api.github.com/users/raccoongang/repos","events_url":"https://api.github.com/users/raccoongang/events{/privacy}","received_events_url":"https://api.github.com/users/raccoongang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/raccoongang/xblock-video","description":"Universal Video XBlock with pluggable backend for many video hosting providers","fork":true,"url":"https://api.github.com/repos/raccoongang/xblock-video","forks_url":"https://api.github.com/repos/raccoongang/xblock-video/forks","keys_url":"https://api.github.com/repos/raccoongang/xblock-video/keys{/key_id}","collaborators_url":"https://api.github.com/repos/raccoongang/xblock-video/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/raccoongang/xblock-video/teams","hooks_url":"https://api.github.com/repos/raccoongang/xblock-video/hooks","issue_events_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/events{/number}","events_url":"https://api.github.com/repos/raccoongang/xblock-video/events","assignees_url":"https://api.github.com/repos/raccoongang/xblock-video/assignees{/user}","branches_url":"https://api.github.com/repos/raccoongang/xblock-video/branches{/branch}","tags_url":"https://api.github.com/repos/raccoongang/xblock-video/tags","blobs_url":"https://api.github.com/repos/raccoongang/xblock-video/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/raccoongang/xblock-video/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/raccoongang/xblock-video/git/refs{/sha}","trees_url":"https://api.github.com/repos/raccoongang/xblock-video/git/trees{/sha}","statuses_url":"https://api.github.com/repos/raccoongang/xblock-video/statuses/{sha}","languages_url":"https://api.github.com/repos/raccoongang/xblock-video/languages","stargazers_url":"https://api.github.com/repos/raccoongang/xblock-video/stargazers","contributors_url":"https://api.github.com/repos/raccoongang/xblock-video/contributors","subscribers_url":"https://api.github.com/repos/raccoongang/xblock-video/subscribers","subscription_url":"https://api.github.com/repos/raccoongang/xblock-video/subscription","commits_url":"https://api.github.com/repos/raccoongang/xblock-video/commits{/sha}","git_commits_url":"https://api.github.com/repos/raccoongang/xblock-video/git/commits{/sha}","comments_url":"https://api.github.com/repos/raccoongang/xblock-video/comments{/number}","issue_comment_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/comments{/number}","contents_url":"https://api.github.com/repos/raccoongang/xblock-video/contents/{+path}","compare_url":"https://api.github.com/repos/raccoongang/xblock-video/compare/{base}...{head}","merges_url":"https://api.github.com/repos/raccoongang/xblock-video/merges","archive_url":"https://api.github.com/repos/raccoongang/xblock-video/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/raccoongang/xblock-video/downloads","issues_url":"https://api.github.com/repos/raccoongang/xblock-video/issues{/number}","pulls_url":"https://api.github.com/repos/raccoongang/xblock-video/pulls{/number}","milestones_url":"https://api.github.com/repos/raccoongang/xblock-video/milestones{/number}","notifications_url":"https://api.github.com/repos/raccoongang/xblock-video/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/raccoongang/xblock-video/labels{/name}","releases_url":"https://api.github.com/repos/raccoongang/xblock-video/releases{/id}","deployments_url":"https://api.github.com/repos/raccoongang/xblock-video/deployments","created_at":"2016-10-31T15:30:25Z","updated_at":"2017-03-22T12:59:17Z","pushed_at":"2017-06-01T19:41:04Z","git_url":"git://github.com/raccoongang/xblock-video.git","ssh_url":"git@github.com:raccoongang/xblock-video.git","clone_url":"https://github.com/raccoongang/xblock-video.git","svn_url":"https://github.com/raccoongang/xblock-video","homepage":null,"size":1800,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":8,"forks":3,"open_issues":8,"watchers":1,"default_branch":"dev"}},"base":{"label":"raccoongang:dev","ref":"dev","sha":"ffe470af06ff775f22a6f7d3e0b90ea58b7d6399","user":{"login":"raccoongang","id":11388447,"avatar_url":"https://avatars3.githubusercontent.com/u/11388447?v=3","gravatar_id":"","url":"https://api.github.com/users/raccoongang","html_url":"https://github.com/raccoongang","followers_url":"https://api.github.com/users/raccoongang/followers","following_url":"https://api.github.com/users/raccoongang/following{/other_user}","gists_url":"https://api.github.com/users/raccoongang/gists{/gist_id}","starred_url":"https://api.github.com/users/raccoongang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raccoongang/subscriptions","organizations_url":"https://api.github.com/users/raccoongang/orgs","repos_url":"https://api.github.com/users/raccoongang/repos","events_url":"https://api.github.com/users/raccoongang/events{/privacy}","received_events_url":"https://api.github.com/users/raccoongang/received_events","type":"Organization","site_admin":false},"repo":{"id":72450225,"name":"xblock-video","full_name":"raccoongang/xblock-video","owner":{"login":"raccoongang","id":11388447,"avatar_url":"https://avatars3.githubusercontent.com/u/11388447?v=3","gravatar_id":"","url":"https://api.github.com/users/raccoongang","html_url":"https://github.com/raccoongang","followers_url":"https://api.github.com/users/raccoongang/followers","following_url":"https://api.github.com/users/raccoongang/following{/other_user}","gists_url":"https://api.github.com/users/raccoongang/gists{/gist_id}","starred_url":"https://api.github.com/users/raccoongang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raccoongang/subscriptions","organizations_url":"https://api.github.com/users/raccoongang/orgs","repos_url":"https://api.github.com/users/raccoongang/repos","events_url":"https://api.github.com/users/raccoongang/events{/privacy}","received_events_url":"https://api.github.com/users/raccoongang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/raccoongang/xblock-video","description":"Universal Video XBlock with pluggable backend for many video hosting providers","fork":true,"url":"https://api.github.com/repos/raccoongang/xblock-video","forks_url":"https://api.github.com/repos/raccoongang/xblock-video/forks","keys_url":"https://api.github.com/repos/raccoongang/xblock-video/keys{/key_id}","collaborators_url":"https://api.github.com/repos/raccoongang/xblock-video/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/raccoongang/xblock-video/teams","hooks_url":"https://api.github.com/repos/raccoongang/xblock-video/hooks","issue_events_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/events{/number}","events_url":"https://api.github.com/repos/raccoongang/xblock-video/events","assignees_url":"https://api.github.com/repos/raccoongang/xblock-video/assignees{/user}","branches_url":"https://api.github.com/repos/raccoongang/xblock-video/branches{/branch}","tags_url":"https://api.github.com/repos/raccoongang/xblock-video/tags","blobs_url":"https://api.github.com/repos/raccoongang/xblock-video/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/raccoongang/xblock-video/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/raccoongang/xblock-video/git/refs{/sha}","trees_url":"https://api.github.com/repos/raccoongang/xblock-video/git/trees{/sha}","statuses_url":"https://api.github.com/repos/raccoongang/xblock-video/statuses/{sha}","languages_url":"https://api.github.com/repos/raccoongang/xblock-video/languages","stargazers_url":"https://api.github.com/repos/raccoongang/xblock-video/stargazers","contributors_url":"https://api.github.com/repos/raccoongang/xblock-video/contributors","subscribers_url":"https://api.github.com/repos/raccoongang/xblock-video/subscribers","subscription_url":"https://api.github.com/repos/raccoongang/xblock-video/subscription","commits_url":"https://api.github.com/repos/raccoongang/xblock-video/commits{/sha}","git_commits_url":"https://api.github.com/repos/raccoongang/xblock-video/git/commits{/sha}","comments_url":"https://api.github.com/repos/raccoongang/xblock-video/comments{/number}","issue_comment_url":"https://api.github.com/repos/raccoongang/xblock-video/issues/comments{/number}","contents_url":"https://api.github.com/repos/raccoongang/xblock-video/contents/{+path}","compare_url":"https://api.github.com/repos/raccoongang/xblock-video/compare/{base}...{head}","merges_url":"https://api.github.com/repos/raccoongang/xblock-video/merges","archive_url":"https://api.github.com/repos/raccoongang/xblock-video/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/raccoongang/xblock-video/downloads","issues_url":"https://api.github.com/repos/raccoongang/xblock-video/issues{/number}","pulls_url":"https://api.github.com/repos/raccoongang/xblock-video/pulls{/number}","milestones_url":"https://api.github.com/repos/raccoongang/xblock-video/milestones{/number}","notifications_url":"https://api.github.com/repos/raccoongang/xblock-video/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/raccoongang/xblock-video/labels{/name}","releases_url":"https://api.github.com/repos/raccoongang/xblock-video/releases{/id}","deployments_url":"https://api.github.com/repos/raccoongang/xblock-video/deployments","created_at":"2016-10-31T15:30:25Z","updated_at":"2017-03-22T12:59:17Z","pushed_at":"2017-06-01T19:41:04Z","git_url":"git://github.com/raccoongang/xblock-video.git","ssh_url":"git@github.com:raccoongang/xblock-video.git","clone_url":"https://github.com/raccoongang/xblock-video.git","svn_url":"https://github.com/raccoongang/xblock-video","homepage":null,"size":1800,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":8,"forks":3,"open_issues":8,"watchers":1,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240"},"html":{"href":"https://github.com/raccoongang/xblock-video/pull/240"},"issue":{"href":"https://api.github.com/repos/raccoongang/xblock-video/issues/240"},"comments":{"href":"https://api.github.com/repos/raccoongang/xblock-video/issues/240/comments"},"review_comments":{"href":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240/comments"},"review_comment":{"href":"https://api.github.com/repos/raccoongang/xblock-video/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/raccoongang/xblock-video/pulls/240/commits"},"statuses":{"href":"https://api.github.com/repos/raccoongang/xblock-video/statuses/10763e791a4eab16a215f1469f447eb07b0a7151"}},"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":1,"deletions":1,"changed_files":1}}
{"actor":{"display_login":"pyup-bot"}}