{"action":"opened","number":508,"pull_request":{"url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508","id":212420769,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyNDIwNzY5","html_url":"https://github.com/OpenDroneMap/WebODM/pull/508","diff_url":"https://github.com/OpenDroneMap/WebODM/pull/508.diff","patch_url":"https://github.com/OpenDroneMap/WebODM/pull/508.patch","issue_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/508","number":508,"state":"open","locked":false,"title":"Update django to 2.1.1","user":{"login":"pyup-bot","id":16239342,"node_id":"MDQ6VXNlcjE2MjM5MzQy","avatar_url":"https://avatars0.githubusercontent.com/u/16239342?v=4","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":"\nThis PR updates [Django](https://pypi.org/project/Django) from **2.0.3** to **2.1.1**.\n\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 2.1.1\n   ```\n   ==========================\n\n*August 31, 2018*\n\nDjango 2.1.1 fixes several bugs in 2.1.\n\nBugfixes\n========\n\n* Fixed a race condition in ``QuerySet.update_or_create()`` that could result\n  in data loss (:ticket:`29499`).\n\n* Fixed a regression where ``QueryDict.urlencode()`` crashed if the dictionary\n  contains a non-string value (:ticket:`29627`).\n\n* Fixed a regression in Django 2.0 where using ``manage.py test --keepdb``\n  fails on PostgreSQL if the database exists and the user doesn&#39;t have\n  permission to create databases (:ticket:`29613`).\n\n* Fixed a regression in Django 2.0 where combining ``Q`` objects with ``__in``\n  lookups and lists crashed (:ticket:`29643`).\n\n* Fixed translation failure of ``DurationField``&#39;s &quot;overflow&quot; error message\n  (:ticket:`29623`).\n\n* Fixed a regression where the admin change form crashed if the user doesn&#39;t\n  have the &#39;add&#39; permission to a model that uses ``TabularInline``\n  (:ticket:`29637`).\n\n* Fixed a regression where a ``related_query_name`` reverse accessor wasn&#39;t set\n  up when a ``GenericRelation`` is declared on an abstract base model\n  (:ticket:`29653`).\n\n* Fixed the test client&#39;s JSON serialization of a request data dictionary for\n  structured content type suffixes (:ticket:`29662`).\n\n* Made the admin change view redirect to the changelist view after a POST if\n  the user has the &#39;view&#39; permission (:ticket:`29663`).\n\n* Fixed admin change view crash for view-only users if the form has an extra\n  form field (:ticket:`29682`).\n\n* Fixed a regression in Django 2.0.5 where ``QuerySet.values()`` or\n  ``values_list()`` after combining querysets with ``extra()`` with\n  ``union()``, ``difference()``, or ``intersection()`` crashed due to\n  mismatching columns (:ticket:`29694`).\n\n* Fixed crash if ``InlineModelAdmin.has_add_permission()`` doesn&#39;t accept the\n  ``obj`` argument (:ticket:`29723`).\n\n\n========================\n   ```\n   \n  \n  \n   ### 2.1\n   ```\n   ========================\n\n*August 1, 2018*\n\nWelcome to Django 2.1!\n\nThese release notes cover the :ref:`new features &lt;whats-new-2.1&gt;`, as well as\nsome :ref:`backwards incompatible changes &lt;backwards-incompatible-2.1&gt;` you&#39;ll\nwant to be aware of when upgrading from Django 2.0 or earlier. We&#39;ve\n:ref:`dropped some features&lt;removed-features-2.1&gt;` that have reached the end of\ntheir deprecation cycle, and we&#39;ve :ref:`begun the deprecation process for some\nfeatures &lt;deprecated-features-2.1&gt;`.\n\nSee the :doc:`/howto/upgrade-version` guide if you&#39;re updating an existing\nproject.\n\nPython compatibility\n====================\n\nDjango 2.1 supports Python 3.5, 3.6, and 3.7. Django 2.0 is the last version to\nsupport Python 3.4.  We **highly recommend** and only officially support the\nlatest release of each series.\n\n.. _whats-new-2.1:\n\nWhat&#39;s new in Django 2.1\n========================\n\nModel &quot;view&quot; permission\n-----------------------\n\nA &quot;view&quot; permission is added to the model :attr:`Meta.default_permissions\n&lt;django.db.models.Options.default_permissions&gt;`. The new permissions will be\ncreated automatically when running :djadmin:`migrate`.\n\nThis allows giving users read-only access to models in the admin.\n:meth:`.ModelAdmin.has_view_permission` is new. The implementation is backwards\ncompatible in that there isn&#39;t a need to assign the &quot;view&quot; permission to allow\nusers who have the &quot;change&quot; permission to edit objects.\n\nThere are a couple of :ref:`backwards incompatible considerations\n&lt;view_permission_backwards_incompatible&gt;`.\n\nMinor features\n--------------\n\n:mod:`django.contrib.admin`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* :attr:`.ModelAdmin.search_fields` now accepts any lookup such as\n  ``field__exact``.\n\n* jQuery is upgraded from version 2.2.3 to 3.3.1.\n\n* The new :meth:`.ModelAdmin.delete_queryset` method allows customizing the\n  deletion process of the &quot;delete selected objects&quot; action.\n\n* You can now :ref:`override the default admin site\n  &lt;overriding-default-admin-site&gt;`.\n\n* The new :attr:`.ModelAdmin.sortable_by` attribute and\n  :meth:`.ModelAdmin.get_sortable_by` method allow limiting the columns that\n  can be sorted in the change list page.\n\n* The ``admin_order_field`` attribute for elements in\n  :attr:`.ModelAdmin.list_display` may now be a query expression.\n\n* The new :meth:`.ModelAdmin.get_deleted_objects()` method allows customizing\n  the deletion process of the delete view and the &quot;delete selected&quot; action.\n\n* The ``actions.html``, ``change_list_results.html``, ``date_hierarchy.html``,\n  ``pagination.html``, ``prepopulated_fields_js.html``, ``search_form.html``,\n  and ``submit_line.html`` templates can now be :ref:`overridden per app or\n  per model &lt;admin-templates-overridden-per-app-or-model&gt;` (besides overridden\n  globally).\n\n* The admin change list and change form object tools can now be :ref:`overridden\n  per app, per model, or globally &lt;admin-templates-overridden-per-app-or-model&gt;`\n  with ``change_list_object_tools.html`` and\n  ``change_form_object_tools.html`` templates.\n\n* :meth:`.InlineModelAdmin.has_add_permission` is now passed the parent object\n  as the second positional argument, ``obj``.\n\n* Admin actions may now :ref:`specify permissions &lt;admin-action-permissions&gt;`\n  to limit their availability to certain users.\n\n:mod:`django.contrib.auth`\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* :djadmin:`createsuperuser` now gives a prompt to allow bypassing the\n  :setting:`AUTH_PASSWORD_VALIDATORS` checks.\n\n:mod:`django.contrib.gis`\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* The new :meth:`.GEOSGeometry.buffer_with_style` method is a version of\n  :meth:`~.GEOSGeometry.buffer` that allows customizing the style of the\n  buffer.\n\n* :class:`~django.contrib.gis.forms.widgets.OpenLayersWidget` is now based on\n  OpenLayers 4.6.5 (previously 3.20.1).\n\n:mod:`django.contrib.sessions`\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* Added the :setting:`SESSION_COOKIE_SAMESITE` setting to set the ``SameSite``\n  cookie flag on session cookies.\n\nCache\n~~~~~\n\n* The :ref:`local-memory cache backend &lt;local-memory-caching&gt;` now uses a\n  least-recently-used (LRU) culling strategy rather than a pseudo-random one.\n\n* The new ``touch()`` method of the :ref:`low-level cache API\n  &lt;low-level-cache-api&gt;` updates the timeout of cache keys.\n\nCSRF\n~~~~\n\n* Added the :setting:`CSRF_COOKIE_SAMESITE` setting to set the ``SameSite``\n  cookie flag on CSRF cookies.\n\nForms\n~~~~~\n\n* The widget for ``ImageField`` now renders with the HTML attribute\n  ``accept=&quot;image/*&quot;``.\n\nInternationalization\n~~~~~~~~~~~~~~~~~~~~\n\n* Added the :meth:`~django.utils.translation.get_supported_language_variant`\n  function.\n\n* Untranslated strings for territorial language variants now use the\n  translations of the generic language. For example, untranslated ``pt_BR``\n  strings use ``pt`` translations.\n\nManagement Commands\n~~~~~~~~~~~~~~~~~~~\n\n* The new :option:`inspectdb --include-views` option allows creating models\n  for database views.\n\n* The :class:`~django.core.management.BaseCommand` class now uses a custom help\n  formatter so that the standard options like ``--verbosity`` or ``--settings``\n  appear last in the help output, giving a more prominent position to subclassed\n  command&#39;s options.\n\nMigrations\n~~~~~~~~~~\n\n* Added support for serialization of ``functools.partialmethod`` objects.\n\n* To support frozen environments, migrations may be loaded from ``.pyc`` files.\n\nModels\n~~~~~~\n\n* Models can now use ``__init_subclass__()`` from :pep:`487`.\n\n* A ``BinaryField`` may now be set to ``editable=True`` if you wish to include\n  it in model forms.\n\n* A number of new text database functions are added:\n  :class:`~django.db.models.functions.Chr`,\n  :class:`~django.db.models.functions.Left`,\n  :class:`~django.db.models.functions.LPad`,\n  :class:`~django.db.models.functions.LTrim`,\n  :class:`~django.db.models.functions.Ord`,\n  :class:`~django.db.models.functions.Repeat`,\n  :class:`~django.db.models.functions.Replace`,\n  :class:`~django.db.models.functions.Right`,\n  :class:`~django.db.models.functions.RPad`,\n  :class:`~django.db.models.functions.RTrim`, and\n  :class:`~django.db.models.functions.Trim`.\n\n* The new :class:`~django.db.models.functions.TruncWeek` function truncates\n  :class:`~django.db.models.DateField` and\n  :class:`~django.db.models.DateTimeField` to the Monday of a week.\n\n* Query expressions can now be negated using a minus sign.\n\n* :meth:`.QuerySet.order_by` and :meth:`distinct(*fields) &lt;.QuerySet.distinct&gt;`\n  now support using field transforms.\n\n* :class:`~django.db.models.BooleanField` can now be ``null=True``. This is\n  encouraged instead of :class:`~django.db.models.NullBooleanField`, which will\n  likely be deprecated in the future.\n\n* The new :meth:`.QuerySet.explain` method displays the database&#39;s execution\n  plan of a queryset&#39;s query.\n\n*  :meth:`.QuerySet.raw` now supports :meth:`~.QuerySet.prefetch_related`.\n\nRequests and Responses\n~~~~~~~~~~~~~~~~~~~~~~\n\n* Added :meth:`.HttpRequest.get_full_path_info`.\n\n* Added the ``samesite`` argument to :meth:`.HttpResponse.set_cookie` to allow\n  setting the ``SameSite`` cookie flag.\n\n* The new ``as_attachment`` argument for :class:`~django.http.FileResponse`\n  sets the ``Content-Disposition`` header to make the browser ask if the user\n  wants to download the file. ``FileResponse`` also tries to set the\n  ``Content-Type`` and ``Content-Length`` headers where appropriate.\n\nTemplates\n~~~~~~~~~\n\n* The new :tfilter:`json_script` filter safely outputs a Python object as JSON,\n  wrapped in a ``&lt;script&gt;`` tag, ready for use with JavaScript.\n\nTests\n~~~~~\n\n* Added test :class:`~django.test.Client` support for 307 and 308 redirects.\n\n* The test :class:`~django.test.Client` now serializes a request data\n  dictionary as JSON if ``content_type=&#39;application/json&#39;``. You can customize\n  the JSON encoder with test client&#39;s ``json_encoder`` parameter.\n\n* The new :meth:`.SimpleTestCase.assertWarnsMessage` method is a simpler\n  version of :meth:`~unittest.TestCase.assertWarnsRegex`.\n\n.. _backwards-incompatible-2.1:\n\nBackwards incompatible changes in 2.1\n=====================================\n\nDatabase backend API\n--------------------\n\n* To adhere to :pep:`249`, exceptions where a database doesn&#39;t support a\n  feature are changed from :exc:`NotImplementedError` to\n  :exc:`django.db.NotSupportedError`.\n\n* Renamed the ``allow_sliced_subqueries`` database feature flag to\n  ``allow_sliced_subqueries_with_in``.\n\n* ``DatabaseOperations.distinct_sql()`` now requires an additional ``params``\n  argument and returns a tuple of SQL and parameters instead of a SQL string.\n\n* ``DatabaseFeatures.introspected_boolean_field_type`` is changed from a method\n  to a property.\n\n:mod:`django.contrib.gis`\n-------------------------\n\n* Support for SpatiaLite 4.0 is removed.\n\nDropped support for MySQL 5.5\n-----------------------------\n\nThe end of upstream support for MySQL 5.5 is December 2018. Django 2.1 supports\nMySQL 5.6 and higher.\n\nDropped support for PostgreSQL 9.3\n----------------------------------\n\nThe end of upstream support for PostgreSQL 9.3 is September 2018. Django 2.1\nsupports PostgreSQL 9.4 and higher.\n\nRemoved ``BCryptPasswordHasher`` from the default ``PASSWORD_HASHERS`` setting\n------------------------------------------------------------------------------\n\nIf you used bcrypt with Django 1.4 or 1.5 (before ``BCryptSHA256PasswordHasher``\nwas added in Django 1.6), you might have some passwords that use the\n``BCryptPasswordHasher`` hasher.\n\nYou can check if that&#39;s the case like this::\n\n    from django.contrib.auth import get_user_model\n    User = get_user_model()\n    User.objects.filter(password__startswith=&#39;bcrypt$$&#39;)\n\nIf you want to continue to allow those passwords to be used, you&#39;ll\nhave to define the :setting:`PASSWORD_HASHERS` setting (if you don&#39;t already)\nand include ``&#39;django.contrib.auth.hashers.BCryptPasswordHasher&#39;``.\n\nMoved ``wrap_label`` widget template context variable\n-----------------------------------------------------\n\nTo fix the lack of ``&lt;label&gt;`` when using ``RadioSelect`` and\n``CheckboxSelectMultiple`` with ``MultiWidget``, the ``wrap_label`` context\nvariable now appears as an attribute of each option. For example, in a custom\n``input_option.html`` template, change ``{% if wrap_label %}`` to\n``{% if widget.wrap_label %}``.\n\n``SameSite`` cookies\n--------------------\n\nThe cookies used for ``django.contrib.sessions``, ``django.contrib.messages``,\nand Django&#39;s CSRF protection now set the ``SameSite`` flag to ``Lax`` by\ndefault. Browsers that respect this flag won&#39;t send these cookies on\ncross-origin requests. If you rely on the old behavior, set the\n:setting:`SESSION_COOKIE_SAMESITE` and/or :setting:`CSRF_COOKIE_SAMESITE`\nsetting to ``None``.\n\n.. _view_permission_backwards_incompatible:\n\nConsiderations for the new model &quot;view&quot; permission\n--------------------------------------------------\n\nCustom admin forms need to take the view-only case into account\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWith the new &quot;view&quot; permission, existing custom admin forms may raise errors\nwhen a user doesn&#39;t have the change permission because the form might access\nnonexistent fields. Fix this by overriding :meth:`.ModelAdmin.get_form` and\nchecking if the user has the &quot;change&quot; permissions and returning the default\nform if not::\n\n    class MyAdmin(admin.ModelAdmin):\n        def get_form(self, request, obj=None, **kwargs):\n            if not self.has_change_permission(request, obj):\n                return super().get_form(request, obj, **kwargs)\n            return CustomForm\n\nNew default view permission could allow unwanted access to admin views\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you have a custom permission with a codename of the form\n``can_view_&lt;modelname&gt;``, the new view permission handling in the admin will\nallow view access to the changelist and detail pages for those models. If this\nis unwanted, you must change your custom permission codename.\n\nMiscellaneous\n-------------\n\n* The minimum supported version of ``mysqlclient`` is increased from 1.3.3 to\n  1.3.7.\n\n* Support for SQLite &lt; 3.7.15 is removed.\n\n* The date format of ``Set-Cookie``&#39;s ``Expires`` directive is changed to\n  follow :rfc:`7231section-7.1.1.1` instead of Netscape&#39;s cookie standard.\n  Hyphens present in dates like ``Tue, 25-Dec-2018 22:26:13 GMT`` are removed.\n  This change should be merely cosmetic except perhaps for antiquated browsers\n  that don&#39;t parse the new format.\n\n* ``allowed_hosts`` is now a required argument of private API\n  ``django.utils.http.is_safe_url()``.\n\n* The ``multiple`` attribute rendered by the\n  :class:`~django.forms.SelectMultiple` widget now uses HTML5 boolean syntax\n  rather than XHTML&#39;s ``multiple=&quot;multiple&quot;``.\n\n* HTML rendered by form widgets no longer includes a closing slash on void\n  elements, e.g. ``&lt;br&gt;``. This is incompatible within XHTML, although some\n  widgets already used aspects of HTML5 such as boolean attributes.\n\n* The value of :class:`~django.forms.SelectDateWidget`&#39;s empty options is\n  changed from 0 to an empty string, which mainly may require some adjustments\n  in tests that compare HTML.\n\n* :meth:`.User.has_usable_password` and the\n  :func:`~django.contrib.auth.hashers.is_password_usable` function no longer\n  return ``False`` if the password is ``None`` or an empty string, or if the\n  password uses a hasher that&#39;s not in the :setting:`PASSWORD_HASHERS` setting.\n  This undocumented behavior was a regression in Django 1.6 and prevented users\n  with such passwords from requesting a password reset. Audit your code to\n  confirm that your usage of these APIs don&#39;t rely on the old behavior.\n\n* Since migrations are now loaded from ``.pyc`` files, you might need to delete\n  them if you&#39;re working in a mixed Python 2 and Python 3 environment.\n\n* Using ``None`` as a :class:`~django.contrib.postgres.fields.JSONField` lookup\n  value now matches objects that have the specified key and a null value rather\n  than objects that don&#39;t have the key.\n\n* The admin CSS class ``field-box`` is renamed to ``fieldBox`` to prevent\n  conflicts with the class given to model fields named &quot;box&quot;.\n\n* Since the admin&#39;s ``actions.html``, ``change_list_results.html``,\n  ``date_hierarchy.html``, ``pagination.html``, ``prepopulated_fields_js.html``,\n  ``search_form.html``, and ``submit_line.html`` templates can now be\n  overridden per app or per model, you may need to rename existing templates\n  with those names that were written for a different purpose.\n\n* ``QuerySet.raw()`` now caches its results like regular querysets. Use\n  ``iterator()`` if you don&#39;t want caching.\n\n* The database router :meth:`allow_relation` method is called in more cases.\n  Improperly written routers may need to be updated accordingly.\n\n* Translations are no longer deactivated before running management commands.\n  If your custom command requires translations to be deactivated (for example,\n  to insert untranslated content into the database), use the new\n  :ref:`no_translations decorator &lt;management-commands-and-locales&gt;`.\n\n* Management commands no longer allow the abbreviated forms of the\n  ``--settings`` and ``--pythonpath`` arguments.\n\n* The private ``django.db.models.sql.constants.QUERY_TERMS`` constant is\n  removed. The :meth:`~.RegisterLookupMixin.get_lookup`\n  and :meth:`~.RegisterLookupMixin.get_lookups` methods\n  of the :ref:`Lookup Registration API &lt;lookup-registration-api&gt;` may be\n  suitable alternatives. Compared to the ``QUERY_TERMS`` constant, they allow\n  your code to also account for any custom lookups that have been registered.\n\n* Compatibility with ``py-bcrypt`` is removed as it&#39;s unmaintained. Use `bcrypt\n  &lt;https://pypi.org/project/bcrypt/&gt;`_ instead.\n\n.. _deprecated-features-2.1:\n\nFeatures deprecated in 2.1\n==========================\n\nMiscellaneous\n-------------\n\n* The ``ForceRHR`` GIS function is deprecated in favor of the new\n  :class:`~django.contrib.gis.db.models.functions.ForcePolygonCW` function.\n\n* ``django.utils.http.cookie_date()`` is deprecated in favor of\n  :func:`~django.utils.http.http_date`, which follows the format of the latest\n  RFC.\n\n* ``{% load staticfiles %}`` and ``{% load admin_static %}`` are deprecated\n  in favor of ``{% load static %}``, which works the same.\n\n* ``django.contrib.staticfiles.templatetags.static()`` is deprecated in favor\n  of ``django.templatetags.static.static()``.\n\n* Support for :meth:`.InlineModelAdmin.has_add_permission` methods that don&#39;t\n  accept ``obj`` as the second positional argument will be removed in Django\n  3.0.\n\n.. _removed-features-2.1:\n\nFeatures removed in 2.1\n=======================\n\nThese features have reached the end of their deprecation cycle and are removed\nin Django 2.1. See :ref:`deprecated-features-1.11` for details, including how\nto remove usage of these features.\n\n* ``contrib.auth.views.login()``, ``logout()``, ``password_change()``,\n  ``password_change_done()``, ``password_reset()``, ``password_reset_done()``,\n  ``password_reset_confirm()``, and ``password_reset_complete()`` are removed.\n\n* The ``extra_context`` parameter of ``contrib.auth.views.logout_then_login()``\n  is removed.\n\n* ``django.test.runner.setup_databases()`` is removed.\n\n* ``django.utils.translation.string_concat()`` is removed.\n\n* ``django.core.cache.backends.memcached.PyLibMCCache`` no longer supports\n  passing ``pylibmc`` behavior settings as top-level attributes of ``OPTIONS``.\n\n* The ``host`` parameter of ``django.utils.http.is_safe_url()`` is removed.\n\n* Silencing of exceptions raised while rendering the ``{% include %}`` template\n  tag is removed.\n\n* ``DatabaseIntrospection.get_indexes()`` is removed.\n\n* The ``authenticate()`` method of authentication backends requires ``request``\n  as the first positional argument.\n\n* The ``django.db.models.permalink()`` decorator is removed.\n\n* The ``USE_ETAGS`` setting is removed. ``CommonMiddleware`` and\n  ``django.utils.cache.patch_response_headers()`` no longer set ETags.\n\n* The ``Model._meta.has_auto_field`` attribute is removed.\n\n* ``url()``&#39;s support for inline flags in regular expression groups (``(?i)``,\n  ``(?L)``, ``(?m)``, ``(?s)``, and ``(?u)``) is removed.\n\n* Support for ``Widget.render()`` methods without the ``renderer`` argument\n  is removed.\n\n\n==========================\n   ```\n   \n  \n  \n   ### 2.0.8\n   ```\n   ==========================\n\n*August 1, 2018*\n\nDjango 2.0.8 fixes a security issue and several bugs in 2.0.7.\n\nCVE-2018-14574: Open redirect possibility in ``CommonMiddleware``\n=================================================================\n\nIf the :class:`~django.middleware.common.CommonMiddleware` and the\n:setting:`APPEND_SLASH` setting are both enabled, and if the project has a\nURL pattern that accepts any path ending in a slash (many content management\nsystems have such a pattern), then a request to a maliciously crafted URL of\nthat site could lead to a redirect to another site, enabling phishing and other\nattacks.\n\n``CommonMiddleware`` now escapes leading slashes to prevent redirects to other\ndomains.\n\nBugfixes\n========\n\n* Fixed a regression in Django 2.0.7 that broke the ``regex`` lookup on MariaDB\n  (even though MariaDB isn&#39;t officially supported) (:ticket:`29544`).\n\n* Fixed a regression where ``django.template.Template`` crashed if the\n  ``template_string`` argument is lazy (:ticket:`29617`).\n\n\n==========================\n   ```\n   \n  \n  \n   ### 2.0.7\n   ```\n   ==========================\n\n*July 2, 2018*\n\nDjango 2.0.7 fixes several bugs in 2.0.6.\n\nBugfixes\n========\n\n* Fixed admin changelist crash when using a query expression without ``asc()``\n  or ``desc()`` in the page&#39;s ordering (:ticket:`29428`).\n\n* Fixed admin check crash when using a query expression in\n  ``ModelAdmin.ordering`` (:ticket:`29428`).\n\n* Fixed ``__regex`` and ``__iregex`` lookups with MySQL 8 (:ticket:`29451`).\n\n* Fixed migrations crash with namespace packages on Python 3.7\n  (:ticket:`28814`).\n\n\n==========================\n   ```\n   \n  \n  \n   ### 2.0.6\n   ```\n   ==========================\n\n*June 1, 2018*\n\nDjango 2.0.6 fixes several bugs in 2.0.5.\n\nBugfixes\n========\n\n* Fixed a regression that broke custom template filters that use decorators\n  (:ticket:`29400`).\n\n* Fixed detection of custom URL converters in included patterns\n  (:ticket:`29415`).\n\n* Fixed a regression that added an unnecessary subquery to the ``GROUP BY``\n  clause on MySQL when using a ``RawSQL`` annotation (:ticket:`29416`).\n\n* Fixed ``WKBWriter.write()`` and ``write_hex()`` for empty polygons on\n  GEOS 3.6.1+ (:ticket:`29460`).\n\n* Fixed a regression in Django 1.10 that could result in large memory usage\n  when making edits using ``ModelAdmin.list_editable`` (:ticket:`28462`).\n\n\n==========================\n   ```\n   \n  \n  \n   ### 2.0.5\n   ```\n   ==========================\n\n*May 1, 2018*\n\nDjango 2.0.5 fixes several bugs in 2.0.4.\n\nBugfixes\n========\n\n* Corrected the import paths that ``inspectdb`` generates for\n  ``django.contrib.postgres`` fields (:ticket:`29307`).\n\n* Fixed a regression in Django 1.11.8 where altering a field with a unique\n  constraint may drop and rebuild more foreign keys than necessary\n  (:ticket:`29193`).\n\n* Fixed crashes in ``django.contrib.admindocs`` when a view is a callable\n  object, such as ``django.contrib.syndication.views.Feed`` (:ticket:`29296`).\n\n* Fixed a regression in Django 2.0.4 where ``QuerySet.values()`` or\n  ``values_list()`` after combining an annotated and unannotated queryset with\n  ``union()``, ``difference()``, or ``intersection()`` crashed due to mismatching\n  columns (:ticket:`29286`).\n\n\n==========================\n   ```\n   \n  \n  \n   ### 2.0.4\n   ```\n   ==========================\n\n*April 2, 2018*\n\nDjango 2.0.4 fixes several bugs in 2.0.3.\n\nBugfixes\n========\n\n* Fixed a crash when filtering with an ``Exists()`` annotation of a queryset\n  containing a single field (:ticket:`29195`).\n\n* Fixed admin autocomplete widget&#39;s translations for `zh-hans` and `zh-hant`\n  languages (:ticket:`29213`).\n\n* Corrected admin&#39;s autocomplete widget to add a space after custom classes\n  (:ticket:`29221`).\n\n* Fixed ``PasswordResetConfirmView`` crash when using a user model with a\n  ``UUIDField`` primary key and the reset URL contains an encoded primary key\n  value that decodes to an invalid UUID (:ticket:`29206`).\n\n* Fixed a regression in Django 1.11.8 where combining two annotated\n  ``values_list()`` querysets with ``union()``, ``difference()``, or\n  ``intersection()`` crashed due to mismatching columns (:ticket:`29229`).\n\n* Fixed a regression in Django 1.11 where an empty choice could be initially\n  selected for the ``SelectMultiple`` and ``CheckboxSelectMultiple`` widgets\n  (:ticket:`29273`).\n\n* Fixed a regression in Django 2.0 where ``OpenLayersWidget`` deserialization\n  ignored the widget map&#39;s SRID and assumed 4326 (WGS84) (:ticket:`29116`).\n\n\n==========================\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django\n  - Changelog: https://pyup.io/changelogs/django/\n  - Homepage: https://www.djangoproject.com/\n</details>\n\n","created_at":"2018-08-31T15:33:23Z","updated_at":"2018-08-31T15:33:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508/commits","review_comments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508/comments","review_comment_url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/508/comments","statuses_url":"https://api.github.com/repos/OpenDroneMap/WebODM/statuses/de53bcca4f34caf0bf224d7c155be210b746ed47","head":{"label":"OpenDroneMap:pyup-update-django-2.0.3-to-2.1.1","ref":"pyup-update-django-2.0.3-to-2.1.1","sha":"de53bcca4f34caf0bf224d7c155be210b746ed47","user":{"login":"OpenDroneMap","id":7285716,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyODU3MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7285716?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenDroneMap","html_url":"https://github.com/OpenDroneMap","followers_url":"https://api.github.com/users/OpenDroneMap/followers","following_url":"https://api.github.com/users/OpenDroneMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenDroneMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenDroneMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenDroneMap/subscriptions","organizations_url":"https://api.github.com/users/OpenDroneMap/orgs","repos_url":"https://api.github.com/users/OpenDroneMap/repos","events_url":"https://api.github.com/users/OpenDroneMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenDroneMap/received_events","type":"Organization","site_admin":false},"repo":{"id":65209477,"node_id":"MDEwOlJlcG9zaXRvcnk2NTIwOTQ3Nw==","name":"WebODM","full_name":"OpenDroneMap/WebODM","owner":{"login":"OpenDroneMap","id":7285716,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyODU3MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7285716?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenDroneMap","html_url":"https://github.com/OpenDroneMap","followers_url":"https://api.github.com/users/OpenDroneMap/followers","following_url":"https://api.github.com/users/OpenDroneMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenDroneMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenDroneMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenDroneMap/subscriptions","organizations_url":"https://api.github.com/users/OpenDroneMap/orgs","repos_url":"https://api.github.com/users/OpenDroneMap/repos","events_url":"https://api.github.com/users/OpenDroneMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenDroneMap/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenDroneMap/WebODM","description":"📷 ✈ A free, user-friendly, extendable application and API for drone image processing.","fork":false,"url":"https://api.github.com/repos/OpenDroneMap/WebODM","forks_url":"https://api.github.com/repos/OpenDroneMap/WebODM/forks","keys_url":"https://api.github.com/repos/OpenDroneMap/WebODM/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenDroneMap/WebODM/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenDroneMap/WebODM/teams","hooks_url":"https://api.github.com/repos/OpenDroneMap/WebODM/hooks","issue_events_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/events{/number}","events_url":"https://api.github.com/repos/OpenDroneMap/WebODM/events","assignees_url":"https://api.github.com/repos/OpenDroneMap/WebODM/assignees{/user}","branches_url":"https://api.github.com/repos/OpenDroneMap/WebODM/branches{/branch}","tags_url":"https://api.github.com/repos/OpenDroneMap/WebODM/tags","blobs_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenDroneMap/WebODM/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenDroneMap/WebODM/languages","stargazers_url":"https://api.github.com/repos/OpenDroneMap/WebODM/stargazers","contributors_url":"https://api.github.com/repos/OpenDroneMap/WebODM/contributors","subscribers_url":"https://api.github.com/repos/OpenDroneMap/WebODM/subscribers","subscription_url":"https://api.github.com/repos/OpenDroneMap/WebODM/subscription","commits_url":"https://api.github.com/repos/OpenDroneMap/WebODM/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenDroneMap/WebODM/contents/{+path}","compare_url":"https://api.github.com/repos/OpenDroneMap/WebODM/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenDroneMap/WebODM/merges","archive_url":"https://api.github.com/repos/OpenDroneMap/WebODM/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenDroneMap/WebODM/downloads","issues_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues{/number}","pulls_url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenDroneMap/WebODM/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenDroneMap/WebODM/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenDroneMap/WebODM/labels{/name}","releases_url":"https://api.github.com/repos/OpenDroneMap/WebODM/releases{/id}","deployments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/deployments","created_at":"2016-08-08T14:08:22Z","updated_at":"2018-08-31T09:06:23Z","pushed_at":"2018-08-31T15:33:23Z","git_url":"git://github.com/OpenDroneMap/WebODM.git","ssh_url":"git@github.com:OpenDroneMap/WebODM.git","clone_url":"https://github.com/OpenDroneMap/WebODM.git","svn_url":"https://github.com/OpenDroneMap/WebODM","homepage":"https://www.opendronemap.org/webodm/","size":100589,"stargazers_count":560,"watchers_count":560,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":204,"mirror_url":null,"archived":false,"open_issues_count":93,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0","node_id":"MDc6TGljZW5zZTE0"},"forks":204,"open_issues":93,"watchers":560,"default_branch":"master"}},"base":{"label":"OpenDroneMap:master","ref":"master","sha":"10b4824095327dd75f0ab194fe4c1b74027c70c8","user":{"login":"OpenDroneMap","id":7285716,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyODU3MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7285716?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenDroneMap","html_url":"https://github.com/OpenDroneMap","followers_url":"https://api.github.com/users/OpenDroneMap/followers","following_url":"https://api.github.com/users/OpenDroneMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenDroneMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenDroneMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenDroneMap/subscriptions","organizations_url":"https://api.github.com/users/OpenDroneMap/orgs","repos_url":"https://api.github.com/users/OpenDroneMap/repos","events_url":"https://api.github.com/users/OpenDroneMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenDroneMap/received_events","type":"Organization","site_admin":false},"repo":{"id":65209477,"node_id":"MDEwOlJlcG9zaXRvcnk2NTIwOTQ3Nw==","name":"WebODM","full_name":"OpenDroneMap/WebODM","owner":{"login":"OpenDroneMap","id":7285716,"node_id":"MDEyOk9yZ2FuaXphdGlvbjcyODU3MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7285716?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenDroneMap","html_url":"https://github.com/OpenDroneMap","followers_url":"https://api.github.com/users/OpenDroneMap/followers","following_url":"https://api.github.com/users/OpenDroneMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenDroneMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenDroneMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenDroneMap/subscriptions","organizations_url":"https://api.github.com/users/OpenDroneMap/orgs","repos_url":"https://api.github.com/users/OpenDroneMap/repos","events_url":"https://api.github.com/users/OpenDroneMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenDroneMap/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenDroneMap/WebODM","description":"📷 ✈ A free, user-friendly, extendable application and API for drone image processing.","fork":false,"url":"https://api.github.com/repos/OpenDroneMap/WebODM","forks_url":"https://api.github.com/repos/OpenDroneMap/WebODM/forks","keys_url":"https://api.github.com/repos/OpenDroneMap/WebODM/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenDroneMap/WebODM/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenDroneMap/WebODM/teams","hooks_url":"https://api.github.com/repos/OpenDroneMap/WebODM/hooks","issue_events_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/events{/number}","events_url":"https://api.github.com/repos/OpenDroneMap/WebODM/events","assignees_url":"https://api.github.com/repos/OpenDroneMap/WebODM/assignees{/user}","branches_url":"https://api.github.com/repos/OpenDroneMap/WebODM/branches{/branch}","tags_url":"https://api.github.com/repos/OpenDroneMap/WebODM/tags","blobs_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenDroneMap/WebODM/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenDroneMap/WebODM/languages","stargazers_url":"https://api.github.com/repos/OpenDroneMap/WebODM/stargazers","contributors_url":"https://api.github.com/repos/OpenDroneMap/WebODM/contributors","subscribers_url":"https://api.github.com/repos/OpenDroneMap/WebODM/subscribers","subscription_url":"https://api.github.com/repos/OpenDroneMap/WebODM/subscription","commits_url":"https://api.github.com/repos/OpenDroneMap/WebODM/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenDroneMap/WebODM/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenDroneMap/WebODM/contents/{+path}","compare_url":"https://api.github.com/repos/OpenDroneMap/WebODM/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenDroneMap/WebODM/merges","archive_url":"https://api.github.com/repos/OpenDroneMap/WebODM/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenDroneMap/WebODM/downloads","issues_url":"https://api.github.com/repos/OpenDroneMap/WebODM/issues{/number}","pulls_url":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenDroneMap/WebODM/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenDroneMap/WebODM/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenDroneMap/WebODM/labels{/name}","releases_url":"https://api.github.com/repos/OpenDroneMap/WebODM/releases{/id}","deployments_url":"https://api.github.com/repos/OpenDroneMap/WebODM/deployments","created_at":"2016-08-08T14:08:22Z","updated_at":"2018-08-31T09:06:23Z","pushed_at":"2018-08-31T15:33:23Z","git_url":"git://github.com/OpenDroneMap/WebODM.git","ssh_url":"git@github.com:OpenDroneMap/WebODM.git","clone_url":"https://github.com/OpenDroneMap/WebODM.git","svn_url":"https://github.com/OpenDroneMap/WebODM","homepage":"https://www.opendronemap.org/webodm/","size":100589,"stargazers_count":560,"watchers_count":560,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":204,"mirror_url":null,"archived":false,"open_issues_count":93,"license":{"key":"mpl-2.0","name":"Mozilla Public License 2.0","spdx_id":"MPL-2.0","url":"https://api.github.com/licenses/mpl-2.0","node_id":"MDc6TGljZW5zZTE0"},"forks":204,"open_issues":93,"watchers":560,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508"},"html":{"href":"https://github.com/OpenDroneMap/WebODM/pull/508"},"issue":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/508"},"comments":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/issues/508/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/pulls/508/commits"},"statuses":{"href":"https://api.github.com/repos/OpenDroneMap/WebODM/statuses/de53bcca4f34caf0bf224d7c155be210b746ed47"}},"author_association":"CONTRIBUTOR","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"}}