Comments (4)
@frafra It was my intention that the codeblock I posted be combined with your one haha
would anyone like to PR this in themselves? Don't worry if not, I can add this is either way :)
from spotify.py.
Actually I wouldn't recommend that @frafra spotify.Client
is made to me created once and carried around for the lifetime of the program. So creating and destroying instances on every route handler is a very expensive thing to do.
I'd suggesting using the contextvars module:
import asyncio
from contextvars import ContextVar
from aiohttp.web import AppRunner, TCPSite
CLIENT: ContextVar("spotify_client")
async def callback(request):
client = CLIENT.get()
user = await spotify.User.from_code(
client=client,
code=request.query['code'],
redirect_uri=REDIRECT_URI,
)
tracks = await user.library.get_all_tracks()
return web.HTTPFound(repr(tracks))
async def main() -> None:
async with spotify.Client(CLIENT_ID, CLIENT_SECRET) as client:
CLIENT.set(client)
runner = AppRunner(app)
await runner.setup()
site = TCPSite(runner, 'localhost', 8080)
await site.start()
if __name__ == "__main__":
asyncio.run(main())
from spotify.py.
Here is an example I wrote:
#!/usr/bin/env python3
from aiohttp import web
import os
import spotify
CLIENT_ID = os.environ['CLIENT_ID']
CLIENT_SECRET = os.environ['CLIENT_SECRET']
REDIRECT_URI = os.environ['REDIRECT_URI']
async def auth(request):
async with spotify.Client(CLIENT_ID, CLIENT_SECRET) as client:
url = client.oauth2_url(
redirect_uri=REDIRECT_URI,
scopes=['user-library-read'],
)
return web.HTTPFound(url)
async def callback(request):
async with spotify.Client(CLIENT_ID, CLIENT_SECRET) as client:
user = await spotify.User.from_code(
client=client,
code=request.query['code'],
redirect_uri=REDIRECT_URI,
)
tracks = await user.library.get_all_tracks()
return web.HTTPFound(repr(tracks))
app = web.Application()
app.add_routes([
web.get('/', auth),
web.get('/callback', callback),
])
if __name__ == '__main__':
web.run_app(app)
from spotify.py.
Using ContextVar
is a good suggestion indeed :-)
The code looks incomplete to me now, as the auth
part with the initial request and scopes is missing.
from spotify.py.
Related Issues (20)
- Impossible to play list of tracks HOT 2
- Player.progress_ms is only set once and not updated HOT 4
- 'Payload' referenced before assignment HOT 3
- Spotify Register Problem HOT 4
- Issue with session closing HOT 3
- OAuth needs "scopes" oauth2_url use "scope"
- edit_playlist issues when calling change_playlist_details
- Can't use parameters with user.top_artists() HOT 2
- Better http throttling post 429s HOT 2
- Right, so I've investigated the issue and have a possible fix ready. HOT 2
- Playlist attribute `tracks` is always None HOT 8
- Suggestion: allow User.recently_played() to take same optional parameters as Http.recently_played() HOT 1
- Suggestion: add support for "Add an Item to the User's Playback Queue" endpoint
- When creating a Playlist using the result of HttpClient.get_playlist() an error occurs
- Todo: Support new "Podcasts API"
- When using album.get_all_tracks(), an error is produced. `'Nonetype' has no attribute 'images'` HOT 2
- TypeError: __await__() returned a coroutine HOT 2
- Receiving an error when trying to initialize player HOT 2
- Not possible to install spotify.py and pyspotify at the same time HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spotify.py.