From c905134bf4d0bb399cad24352daa39cb5d8827f6 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:49:57 +0200 Subject: [PATCH 1/8] Fix error in MANIFEST.in --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index 6a64cb9a..f98952ca 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -7,7 +7,7 @@ include mopidy/backends/spotify/spotify_appkey.key include pylintrc recursive-include docs * prune docs/_build -recursive-include mopidy/frontends/http/data/ +recursive-include mopidy/frontends/http/data * recursive-include requirements * recursive-include tests *.py recursive-include tests/data * From 1dab53d5c885c54062febcf3c73327d7ba2376d2 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:50:14 +0200 Subject: [PATCH 2/8] Ignore *.egg-info files generated by setuptools --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9229541f..6ef1ff32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.egg-info *.pyc *.swp .coverage From a8b81eadd04a9fe4ca4ffa00db916770e018bdc7 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:52:03 +0200 Subject: [PATCH 3/8] Switch from distutils to setuptools --- docs/changes.rst | 9 ++++ requirements/core.txt | 3 ++ setup.py | 112 +++++++++++------------------------------- 3 files changed, 41 insertions(+), 83 deletions(-) diff --git a/docs/changes.rst b/docs/changes.rst index ee1ea5d7..3ad5b2e1 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -4,6 +4,15 @@ Changes This change log is used to track all major changes to Mopidy. +v0.14.0 (UNRELEASED) +==================== + +**Dependencies** + +- setuptools or distribute is now required. We've introduced this dependency to + use setuptools' entry points functionality to find installed Mopidy + extensions. + v0.13.0 (2013-03-31) ==================== diff --git a/requirements/core.txt b/requirements/core.txt index 9ffac2cf..d8e81e61 100644 --- a/requirements/core.txt +++ b/requirements/core.txt @@ -1,2 +1,5 @@ +setuptools +# Available as python-setuptools in Debian/Ubuntu + Pykka >= 1.1 # Available as python-pykka from apt.mopidy.com diff --git a/setup.py b/setup.py index 5840ca53..1c0d10b8 100644 --- a/setup.py +++ b/setup.py @@ -1,101 +1,47 @@ -""" -Most of this file is taken from the Django project, which is BSD licensed. -""" - from __future__ import unicode_literals -from distutils.core import setup -from distutils.command.install_data import install_data -from distutils.command.install import INSTALL_SCHEMES -import os import re -import sys + +from setuptools import setup, find_packages -def get_version(): - init_py = open('mopidy/__init__.py').read() +def get_version(filename): + init_py = open(filename).read() metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", init_py)) return metadata['version'] -class osx_install_data(install_data): - # On MacOS, the platform-specific lib dir is - # /System/Library/Framework/Python/.../ which is wrong. Python 2.5 supplied - # with MacOS 10.5 has an Apple-specific fix for this in - # distutils.command.install_data#306. It fixes install_lib but not - # install_data, which is why we roll our own install_data class. - - def finalize_options(self): - # By the time finalize_options is called, install.install_lib is set to - # the fixed directory, so we set the installdir to install_lib. The - # install_data class uses ('install_data', 'install_dir') instead. - self.set_undefined_options('install', ('install_lib', 'install_dir')) - install_data.finalize_options(self) - - -if sys.platform == "darwin": - cmdclasses = {'install_data': osx_install_data} -else: - cmdclasses = {'install_data': install_data} - - -def fullsplit(path, result=None): - """ - Split a pathname into components (the opposite of os.path.join) in a - platform-neutral way. - """ - if result is None: - result = [] - head, tail = os.path.split(path) - if head == '': - return [tail] + result - if head == path: - return result - return fullsplit(head, [tail] + result) - - -# Tell distutils to put the data_files in platform-specific installation -# locations. See here for an explanation: -# http://groups.google.com/group/comp.lang.python/browse_thread/ -# thread/35ec7b2fed36eaec/2105ee4d9e8042cb -for scheme in INSTALL_SCHEMES.values(): - scheme['data'] = scheme['purelib'] - - -# Compile the list of packages available, because distutils doesn't have -# an easy way to do this. -packages, data_files = [], [] -root_dir = os.path.dirname(__file__) -if root_dir != b'': - os.chdir(root_dir) -project_dir = b'mopidy' - -for dirpath, dirnames, filenames in os.walk(project_dir): - # Ignore dirnames that start with '.' - for i, dirname in enumerate(dirnames): - if dirname.startswith(b'.'): - del dirnames[i] - if b'__init__.py' in filenames: - packages.append(b'.'.join(fullsplit(dirpath))) - elif filenames: - data_files.append([ - dirpath, [os.path.join(dirpath, f) for f in filenames]]) - - setup( name='Mopidy', - version=get_version(), - author='Stein Magnus Jodal', - author_email='stein.magnus@jodal.no', - packages=packages, - package_data={b'mopidy': ['backends/spotify/spotify_appkey.key']}, - cmdclass=cmdclasses, - data_files=data_files, - scripts=['bin/mopidy', 'bin/mopidy-scan'], + version=get_version('mopidy/__init__.py'), url='http://www.mopidy.com/', license='Apache License, Version 2.0', + author='Stein Magnus Jodal', + author_email='stein.magnus@jodal.no', description='Music server with MPD and Spotify support', long_description=open('README.rst').read(), + packages=find_packages(exclude=['tests', 'tests.*']), + zip_safe=False, + include_package_data=True, + install_requires=[ + 'setuptools', + 'Pykka >= 1.1', + ], + extras_require={ + b'spotify': ['pyspotify >= 1.9, < 1.11'], + b'lastfm': ['pylast >= 0.5.7'], + b'http': ['cherrypy >= 3.2.2', 'ws4py >= 0.2.3'], + b'external_mixers': ['pyserial'], + }, + test_suite='nose.collector', + tests_require=[ + 'nose', + 'mock >= 0.7', + 'unittest2', + ], + entry_points={ + b'mopidy.extension': [], + }, classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: No Input/Output (Daemon)', From 1a9fea08a589b3e659f1579b3b1b4537542f71e6 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:52:24 +0200 Subject: [PATCH 4/8] docs: setuptools always regenerates MANIFEST --- docs/development.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/development.rst b/docs/development.rst index 59d004fa..4374acf2 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -359,7 +359,6 @@ Creating releases #. Build package and upload to PyPI:: - rm MANIFEST # Will be regenerated by setup.py python setup.py sdist upload #. Update the Debian package. From a4f8af048d0c3e79b400d99997df8795dc5661df Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:52:53 +0200 Subject: [PATCH 5/8] Let setuptools generate executables --- bin/mopidy | 5 ----- bin/mopidy-scan | 5 ----- setup.py | 4 ++++ 3 files changed, 4 insertions(+), 10 deletions(-) delete mode 100755 bin/mopidy delete mode 100755 bin/mopidy-scan diff --git a/bin/mopidy b/bin/mopidy deleted file mode 100755 index 0472518e..00000000 --- a/bin/mopidy +++ /dev/null @@ -1,5 +0,0 @@ -#! /usr/bin/env python - -if __name__ == '__main__': - from mopidy.__main__ import main - main() diff --git a/bin/mopidy-scan b/bin/mopidy-scan deleted file mode 100755 index 00f51809..00000000 --- a/bin/mopidy-scan +++ /dev/null @@ -1,5 +0,0 @@ -#! /usr/bin/env python - -if __name__ == '__main__': - from mopidy.scanner import main - main() diff --git a/setup.py b/setup.py index 1c0d10b8..eeab24bd 100644 --- a/setup.py +++ b/setup.py @@ -40,6 +40,10 @@ setup( 'unittest2', ], entry_points={ + b'console_scripts': [ + 'mopidy = mopidy.__main__:main', + 'mopidy-scan = mopidy.scanner:main', + ], b'mopidy.extension': [], }, classifiers=[ From 0f593b66bd832b2ca3fbdd206a7b8a03f113ccde Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 12:53:32 +0200 Subject: [PATCH 6/8] docs: Remove 'platforms' from extension's setup.py example --- docs/extensiondev.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/extensiondev.rst b/docs/extensiondev.rst index f2c54847..afebc6a7 100644 --- a/docs/extensiondev.rst +++ b/docs/extensiondev.rst @@ -162,7 +162,6 @@ class that will connect the rest of the dots. #py_modules=['mopidy_soundspot'], zip_safe=False, include_package_data=True, - platforms='any', install_requires=[ 'setuptools', 'Mopidy', From 5fcae977cabaf0fddee2db67ea912fa512fe0083 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 13:07:01 +0200 Subject: [PATCH 7/8] docs: If using pip Pykka will be installed automatically --- docs/installation/index.rst | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/docs/installation/index.rst b/docs/installation/index.rst index 2b9806fd..45f93510 100644 --- a/docs/installation/index.rst +++ b/docs/installation/index.rst @@ -135,10 +135,10 @@ Pip. sudo easy_install pip -#. Then get, build, and install the latest releast of pyspotify, pylast, pykka, +#. Then get, build, and install the latest releast of pyspotify, pylast, and Mopidy using Pip:: - sudo pip install -U pyspotify pylast pykka mopidy + sudo pip install -U pyspotify pylast mopidy #. Finally, you need to set a couple of :doc:`settings `, and then you're ready to :doc:`run Mopidy `. @@ -171,15 +171,7 @@ can install Mopidy from PyPI using Pip. sudo yum install -y gcc python-devel python-pip -#. Then you'll need to install all of Mopidy's hard dependencies: - - - Pykka >= 1.0:: - - sudo pip install -U pykka - - On Fedora the binary is called ``pip-python``:: - - sudo pip-python install -U pykka +#. Then you'll need to install all of Mopidy's hard non-Python dependencies: - GStreamer 0.10.x, with Python bindings. GStreamer is packaged for most popular Linux distributions. Search for GStreamer in your package manager, @@ -235,7 +227,8 @@ can install Mopidy from PyPI using Pip. sudo pip install -U pyspotify - # Fedora: + On Fedora the binary is called ``pip-python``:: + sudo pip-python install -U pyspotify #. Optional: If you want to scrobble your played tracks to Last.fm, you need @@ -243,7 +236,8 @@ can install Mopidy from PyPI using Pip. sudo pip install -U pylast - # Fedora: + On Fedora the binary is called ``pip-python``:: + sudo pip-python install -U pylast #. Optional: To use MPRIS, e.g. for controlling Mopidy from the Ubuntu Sound @@ -259,7 +253,8 @@ can install Mopidy from PyPI using Pip. sudo pip install -U mopidy - # Fedora: + On Fedora the binary is called ``pip-python``:: + sudo pip-python install -U mopidy To upgrade Mopidy to future releases, just rerun this command. From 77f8e228d8615909fc8b746e18b3010e52eb37c9 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 1 Apr 2013 13:19:46 +0200 Subject: [PATCH 8/8] docs: Fix typo --- docs/extensiondev.rst | 2 +- docs/installation/index.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/extensiondev.rst b/docs/extensiondev.rst index afebc6a7..04c6aa6b 100644 --- a/docs/extensiondev.rst +++ b/docs/extensiondev.rst @@ -168,7 +168,7 @@ class that will connect the rest of the dots. 'pysoundspot', ], entry_points={ - 'mopidy.extension': [ + b'mopidy.extension': [ 'soundspot = mopidy_soundspot:Extension', ], }, diff --git a/docs/installation/index.rst b/docs/installation/index.rst index 45f93510..ab81b753 100644 --- a/docs/installation/index.rst +++ b/docs/installation/index.rst @@ -135,7 +135,7 @@ Pip. sudo easy_install pip -#. Then get, build, and install the latest releast of pyspotify, pylast, +#. Then get, build, and install the latest release of pyspotify, pylast, and Mopidy using Pip:: sudo pip install -U pyspotify pylast mopidy