From 830636df739d359116e3106c35375ac838bf15c3 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Thu, 21 Dec 2017 16:31:59 +0100 Subject: [PATCH] [2.0.x] Fixed #28594 -- Removed Jython docs and specific code Thanks Andrey Martyanov for the report, and Tim Graham for the review. Backport of 23b21db31bfcf2a065d485617412cca43a311a4c from master. --- django/core/management/templates.py | 4 -- django/utils/autoreload.py | 15 +----- docs/howto/jython.txt | 74 +++-------------------------- docs/index.txt | 8 ---- docs/intro/install.txt | 7 --- docs/releases/1.0.txt | 2 - docs/topics/install.txt | 6 +-- tests/admin_scripts/tests.py | 16 +------ 8 files changed, 13 insertions(+), 119 deletions(-) diff --git a/django/core/management/templates.py b/django/core/management/templates.py index eb4baafd62..a89a54fa62 100644 --- a/django/core/management/templates.py +++ b/django/core/management/templates.py @@ -5,7 +5,6 @@ import posixpath import re import shutil import stat -import sys import tempfile from importlib import import_module from os import path @@ -335,9 +334,6 @@ class TemplateCommand(BaseCommand): Make sure that the file is writeable. Useful if our source is read-only. """ - if sys.platform.startswith('java'): - # On Jython there is no os.access() - return if not os.access(filename, os.W_OK): st = os.stat(filename) new_permissions = stat.S_IMODE(st.st_mode) | stat.S_IWUSR diff --git a/django/utils/autoreload.py b/django/utils/autoreload.py index 0081b502fe..534fb4af46 100644 --- a/django/utils/autoreload.py +++ b/django/utils/autoreload.py @@ -307,24 +307,11 @@ def python_reloader(main_func, args, kwargs): pass -def jython_reloader(main_func, args, kwargs): - from _systemrestart import SystemRestart - _thread.start_new_thread(main_func, args) - while True: - if code_changed(): - raise SystemRestart - time.sleep(1) - - def main(main_func, args=None, kwargs=None): if args is None: args = () if kwargs is None: kwargs = {} - if sys.platform.startswith('java'): - reloader = jython_reloader - else: - reloader = python_reloader wrapped_main_func = check_errors(main_func) - reloader(wrapped_main_func, args, kwargs) + python_reloader(wrapped_main_func, args, kwargs) diff --git a/docs/howto/jython.txt b/docs/howto/jython.txt index cdb9b06caf..9685ba2bb0 100644 --- a/docs/howto/jython.txt +++ b/docs/howto/jython.txt @@ -1,74 +1,14 @@ -======================== -Running Django on Jython -======================== +================ +Django on Jython +================ .. index:: Jython, Java, JVM Jython_ is an implementation of Python that runs on the Java platform (JVM). -This document will get you up and running with Django on top of Jython. - -Installing Jython -================= - -Django works with Jython versions 2.7b2 and higher. See the Jython_ website for -download and installation instructions. .. _jython: http://www.jython.org/ -Creating a servlet container -============================ - -If you just want to experiment with Django, skip ahead to the next section; -Django includes a lightweight Web server you can use for testing, so you won't -need to set up anything else until you're ready to deploy Django in production. - -If you want to use Django on a production site, use a Java servlet container, -such as `Apache Tomcat`_. Full JavaEE applications servers such as `GlassFish`_ -or `JBoss`_ are also OK, if you need the extra features they include. - -.. _`Apache Tomcat`: https://tomcat.apache.org/ -.. _GlassFish: https://javaee.github.io/glassfish/ -.. _JBoss: https://www.jboss.org/ - -Installing Django -================= - -The next step is to install Django itself. This is exactly the same as -installing Django on standard Python, so see -:ref:`removing-old-versions-of-django` and :ref:`install-django-code` for -instructions. - -Installing Jython platform support libraries -============================================ - -The `django-jython`_ project contains database backends and management commands -for Django/Jython development. Note that the builtin Django backends won't work -on top of Jython. - -.. _`django-jython`: https://github.com/beachmachine/django-jython - -To install it, follow the `installation instructions`_ detailed on the project -website. Also, read the `database backends`_ documentation there. - -.. _`installation instructions`: https://pythonhosted.org/django-jython/quickstart.html#install -.. _`database backends`: https://pythonhosted.org/django-jython/database-backends.html - -Differences with Django on Jython -================================= - -.. index:: JYTHONPATH - -At this point, Django on Jython should behave nearly identically to Django -running on standard Python. However, are a few differences to keep in mind: - -* Remember to use the ``jython`` command instead of ``python``. The - documentation uses ``python`` for consistency, but if you're using Jython - you'll want to mentally replace ``python`` with ``jython`` every time it - occurs. - -* Similarly, you'll need to use the ``JYTHONPATH`` environment variable - instead of ``PYTHONPATH``. - -* Any part of Django that requires `Pillow`_ will not work. - -.. _Pillow: https://pillow.readthedocs.io/en/latest/ +If you want to use Jython (which supports only Python 2.7 at the time of this +writing), you must use Django 1.11.x (the last series to support Python 2). +Jython support may be readded to Django if a Python 3 compatible Jython is +released. diff --git a/docs/index.txt b/docs/index.txt index a764ee1be1..6ab9fdb4c5 100644 --- a/docs/index.txt +++ b/docs/index.txt @@ -275,14 +275,6 @@ more efficiently - faster, and using fewer system resources. * :doc:`Performance and optimization overview ` -Python compatibility -==================== - -Django aims to be compatible with multiple different flavors and versions of -Python: - -* :doc:`Jython support ` - Geographic framework ==================== diff --git a/docs/intro/install.txt b/docs/intro/install.txt index 9861923b37..a0e7f54562 100644 --- a/docs/intro/install.txt +++ b/docs/intro/install.txt @@ -19,13 +19,6 @@ database called SQLite_ so you won't need to set up a database just yet. Get the latest version of Python at https://www.python.org/downloads/ or with your operating system's package manager. -.. admonition:: Django on Jython - - If you use Jython_ (a Python implementation for the Java platform), you'll - need to follow a few additional steps. See :doc:`/howto/jython` for details. - -.. _jython: http://www.jython.org/ - You can verify that Python is installed by typing ``python`` from your shell; you should see something like:: diff --git a/docs/releases/1.0.txt b/docs/releases/1.0.txt index 65c185e82a..0c24ca3fb9 100644 --- a/docs/releases/1.0.txt +++ b/docs/releases/1.0.txt @@ -154,8 +154,6 @@ Django's codebase has been refactored to remove incompatibilities with on the Java Virtual Machine. Django is now compatible with the forthcoming Jython 2.5 release. -See :doc:`/howto/jython`. - .. _Jython: http://www.jython.org/ Generic relations in forms and admin diff --git a/docs/topics/install.txt b/docs/topics/install.txt index 60affd4f29..ab6b41a3ee 100644 --- a/docs/topics/install.txt +++ b/docs/topics/install.txt @@ -15,10 +15,10 @@ your operating system's package manager. .. admonition:: Django on Jython - If you use Jython_ (a Python implementation for the Java platform), you'll - need to follow a few additional steps. See :doc:`/howto/jython` for details. + Jython_ (a Python implementation for the Java platform) is not compatible + with Python 3, so Django ≥ 2.0 cannot run on Jython. -.. _jython: http://jython.org/ +.. _jython: http://www.jython.org/ .. admonition:: Python on Windows diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 8fd564468d..4617978947 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -95,15 +95,8 @@ class AdminScriptTestCase(unittest.TestCase): else: os.remove(full_name) - # Also try to remove the compiled file; if it exists, it could + # Also remove a __pycache__ directory, if it exists; it could # mess up later tests that depend upon the .py file not existing - try: - if sys.platform.startswith('java'): - # Jython produces module$py.class files - os.remove(re.sub(r'\.py$', '$py.class', full_name)) - except OSError: - pass - # Also remove a __pycache__ directory, if it exists cache_name = os.path.join(self.test_dir, '__pycache__') if os.path.isdir(cache_name): shutil.rmtree(cache_name) @@ -133,11 +126,6 @@ class AdminScriptTestCase(unittest.TestCase): # Define a temporary environment for the subprocess test_environ = os.environ.copy() - if sys.platform.startswith('java'): - python_path_var_name = 'JYTHONPATH' - else: - python_path_var_name = 'PYTHONPATH' - old_cwd = os.getcwd() # Set the test environment @@ -147,7 +135,7 @@ class AdminScriptTestCase(unittest.TestCase): del test_environ['DJANGO_SETTINGS_MODULE'] python_path = [base_dir, django_dir, tests_dir] python_path.extend(ext_backend_base_dirs) - test_environ[python_path_var_name] = os.pathsep.join(python_path) + test_environ['PYTHONPATH'] = os.pathsep.join(python_path) test_environ['PYTHONWARNINGS'] = '' # Move to the test directory and run