| Commit message (Collapse) | Author | Age |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Track tokens should only be used when creating stations from tracks not
from search results. Also return the created station from the search
models when a station is created.
Fixes #63
Closes #64
|
|
|
|
| |
This is the current modern way to build, package, and test python code.
|
|
|
|
|
|
| |
I don't particularly like the black formatter (does anybody, really?)
but it's guaranteed to be consistent so it should prevent nitpicking
style.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
* Adds support for additionalAudioUrl for station.getPlaylist
* Fixes broken tests
* Reworks use of iterables for additional audio urls and adds associated tests
* Moves parsing additional url response into a syntethic field
* Adds tests for additional urls field
|
|
|
|
| |
related: #57
|
|
|
|
|
|
| |
Stations contain feedback and seeds that can be manipulated later
through the API. Construct these model classes when building a Station
object.
|
| |
|
|
|
|
|
| |
The SyntheticField already has an instance of itself when the formatter
runs so no longer passes attributes from the value into the field.
|
|
|
|
|
|
|
| |
These used to be done with formatters but that was somewhat an abuse of
the formatter model in the first place. This changeset adds a model
attribute that will cause the underlying model builder to dynamically
construct a model or list of models depending on the incoming data type.
|
|
|
|
|
|
| |
This is an internal implementation detail that exists purely for python2
backwards compatibility. Put it with all the other python 2
compatibility stuff.
|
|
|
|
|
| |
The complex models don't make sense without a data sample and I always
end up looking at the tests. Instead add some docs and a data sample.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This generalizes the audio URL extraction logic into a synthesized field
that can be extracted from the PlaylistModel class. It also removes a
few transmogrifiers that are no longer needed in the general case.
Technically this breaks a publicly exposed API within playlists models
but it was always considered an implementation detail so nobody should
be relying on it.
|
|
|
|
|
|
| |
This doesn't make any sense. If the dict list key isn't defined it falls
through to the loop which would iterate the keys of a dict and not the
dicts in a list which will likely fail anyhow.
|
| |
|
|
|
|
|
| |
Importing from the base of a module is deprecated and will be removed in
a future major version. Nothing internally should be doing this.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
PyCrypto is no longer supported nor recommended. Cryptography is the
replacement package which is actively maintained by the Python core
committers. Also Cryptography is bundled as binary wheels for all the
platforms we support which removes the install-tiem compiler
requirement, making it easier to distribute Pydora. This commit replaces
all usages of PyCrypto with Cryptography but is completely API
compatible with the previous version.
|
|
|
|
|
|
|
|
|
| |
Extract core player logic and mpg123-bound logic into parent-child
classes so that other player backend strategies can be added. Create a
headless VLC strategy that uses VLC if it's available. Update the pydora
player to prefer VLC if it's available on the system because it supports
a much more broad set of codecs and Pandora is now preferring AAC
formatted files.
|
|
|
|
|
|
|
|
|
|
| |
Pandora now returns two different responses to the API depending on
which API key the client is using and the tuner endpoint. Instead of a
quality map only a single audio URL is returned which is of AAC SBR
format. This change accommodates that and returns the proper bitrate and
format based on empirical testing.
see: #52
|
|
|
|
|
|
|
|
|
| |
Previously Pandora only surfaced mp3 files in their responses which
worked fairly universally. Recently they started surfacing AAC files
which don't work in the pydora player as-is. Add the encoding to the
sock model so that players can make a decision based on it.
see: #52
|
| |
|
| |
|
|
|
| |
Add support for searching genre stations.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
being raised.
|