[{"data":1,"prerenderedAt":346},["ShallowReactive",2],{"project-16902896":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":44,"post_text":46,"what":47,"said":94,"maker_in_thread":194,"shape":199,"grid":204,"attempts":308,"same_week":309,"maker_shows":42,"maker_hidden":338,"reader_version":339,"card":340},"16902896","Quart","HTTP\u002F2 Python-Asyncio Web Microframework","title","Show HN: HTTP\u002F2 Python-Asyncio Web Microframework","https:\u002F\u002Fgitlab.com\u002Fpgjones\u002Fquart","gitlab.com","pgjones",1524487636,2018,173,42,220,2155,11,"notable","languages","web framework","library",[24,25,26,27],"python asyncio","http\u002F2 framework","flask compatible","async web framework","curious",-0.023,{"positive":31,"neutral":32,"mixed":33,"critical":34},3,7,0,4,14,{"idea":37,"design":39,"docs":40,"execution":41,"performance":43},{"positive":38,"critical":33},1,{"positive":33,"critical":38},{"positive":38,"critical":33},{"positive":33,"critical":42},2,{"positive":33,"critical":38},[31,33,33,33,33,33,33,33,33,33,33,33,31,33,33,38,33,45,33,31,31,38,33,45,33,33,33,45,31,31,33,38,38,33,31,33,33,33,33,33],5,null,{"problem":48,"audience":59,"pricing":46,"motivation":68,"time_to_build":46,"stack":75,"openness":92,"stage":93,"team_size":93},{"value":49,"source":50,"evidence":51},"Brings Flask-style web development to asyncio with HTTP\u002F2 and websockets","maker",[52,55],{"id":53,"by":11,"text":54},"16905890","Sanic is Flask-like, whereas Quart is the Flask-API (some Flask extensions work with Quart https:\u002F\u002Fpgjones.gitlab.io\u002Fquart\u002Fflask_extensions.html#supported-extensions). The key…",{"id":56,"by":57,"text":58},"16904610","linsomniac","I started dabbling with Quart a few months ago and it looks really promising. But I haven't developed any apps with it. My plan is to try building an app using it instead of…",{"value":60,"source":61,"evidence":62},"Python developers, especially Flask users wanting async","inferred",[63,67],{"id":64,"by":65,"text":66},"16904531","mcintyre1994","This looks really nice, and Flask compatibility is great. One question, in the asyncio docs (really nice BTW, I hadn't tried that out yet and instantly grasped your example) you…",{"id":56,"by":57,"text":58},{"value":69,"source":61,"evidence":70},"Serve Flask API with async and HTTP\u002F2 support",[71,72],{"id":53,"by":11,"text":54},{"id":73,"by":11,"text":74},"16905862","`request` itself isn't an awaitable, whereas the `data` property and `get_json` method both return awaitables…",[76,81,86],{"value":77,"source":78,"evidence":79},"Python 3.6","commenter",[80],{"id":64,"by":65,"text":66},{"value":82,"source":50,"evidence":83},"asyncio",[84],{"id":85},"post",{"value":87,"source":50,"evidence":88},"uvloop",[89],{"id":90,"by":11,"text":91},"16905962","It isn't compared with other languages, however Quart sits well in the Python ecosystem, especially with uvloop. I wrote some of this up…","open_source","unknown",{"praise":95,"objections":109,"requests":139,"questions":154,"alternatives":166},[96,101,105],{"value":97,"source":78,"evidence":98},"Flask compatibility is useful",[99,100],{"id":64,"by":65,"text":66},{"id":53,"by":11,"text":54},{"value":102,"source":78,"evidence":103},"Docs are clear",[104],{"id":64,"by":65,"text":66},{"value":106,"source":50,"evidence":107},"Faster than Flask with uvloop",[108],{"id":90,"by":11,"text":91},[110,121,132],{"value":111,"source":78,"evidence":112},"No async database layer; SQLAlchemy ORM incompatible",[113,117],{"id":114,"by":115,"text":116},"16906276","gamesbrainiac","I think this is all well and good, especially the compatibility with Flask. However, the biggest issue is the data access layer. Most flask apps will use an ORM like…",{"id":118,"by":119,"text":120},"16905266","dfee","The sqlalchemy orm and asyncio are incompatible. There are packages like aiopg that allow for sqlalchemy to be used as a functional sql layer. If you want to use the orm parts of…",{"value":122,"source":78,"evidence":123},"asyncio is hard to understand",[124,128],{"id":125,"by":126,"text":127},"16908297","BrandoElFollito","> asyncio is just one (really really poor) implementation of async\u002Fawait coroutines on Python. Are there other implementations or is it just that the one existing (asyncio) is…",{"id":129,"by":130,"text":131},"16909132","emmelaich","What's wrong with asyncio? For those of us not in the loop.",{"value":133,"source":78,"evidence":134},"Asyncio not fast enough for speed-focused users",[135],{"id":136,"by":137,"text":138},"16904616","friend-monoid","Cool! Might try this for some smaller project. It's a shame that asyncio is so slow though, this framework isn't going to win any speed awards I guess.",[140,147],{"value":141,"source":78,"evidence":142},"Adopt ASGI as common interface",[143],{"id":144,"by":145,"text":146},"16907004","tomchristie","Neat, good to see more `asyncio` frameworks coming along. Python's going to have a bit of an awkward time with two completely different sets of ecosystem for threaded vs. asyncio…",{"value":148,"source":78,"evidence":149},"SQLAlchemy integration docs",[150],{"id":151,"by":152,"text":153},"16904630","sandGorgon","could you add sqlalchemy integration docs as well ? because that is where I get stuck when thinking about async. How does psycogreen work with you asyncio apis ?",[155,162],{"value":156,"source":78,"evidence":157},"Why host on GitLab instead of GitHub",[158],{"id":159,"by":160,"text":161},"16904306","dharness","Why did you choose to host this on gitlab over github?",{"value":163,"source":78,"evidence":164},"Do await calls on request properties need brackets",[165],{"id":64,"by":65,"text":66},[167,174,181,187],{"value":168,"source":78,"evidence":169},"Sanic",[170],{"id":171,"by":172,"text":173},"16904673","mixmastamyk","Isn't this what sanic was supposed to be? https:\u002F\u002Fgithub.com\u002Fchannelcat\u002Fsanic",{"value":175,"source":78,"evidence":176},"Flask",[177],{"id":178,"by":179,"text":180},"16907476","cup-of-tea","I've seen a few libraries like this now. Are they supposed to supersede the non asyncio versions? Is there any reason to still use flask? Will they be maintained like forks?",{"value":182,"source":50,"evidence":183},"GINO and Peewee-Async",[184],{"id":185,"by":11,"text":186},"16906441","Have you any experience with GINO (https:\u002F\u002Fgithub.com\u002Ffantix\u002Fgino) or Peewee-Async (https:\u002F\u002Fgithub.com\u002F05bit\u002Fpeewee-async)? These look to be feasible alternatives.",{"value":188,"source":78,"evidence":189},"Trio and Curio",[190],{"id":191,"by":192,"text":193},"16910485","Fukkaudeku","There are other implementations, such as Curio (https:\u002F\u002Fgithub.com\u002Fdabeaz\u002Fcurio) or Trio (https:\u002F\u002Fgithub.com\u002Fpython-trio\u002Ftrio). Both are simpler and more hand-holdy (and less…",{"comments":45,"answered":31,"key":195},[196,197,198],{"id":53,"text":54},{"id":73,"text":74},{"id":185,"text":186},{"commenters":200,"max_depth":201,"maker_replies":45,"first_comment_mins":202,"lifespan_hours":203},30,6,167,112,[205,207,210,212,213,217,218,220,222,223,227,229,232,234,237,240,244,245,247,251,253,256,260,262,264,268,271,274,277,279,280,281,282,284,287,289,292,295,298,301,303,306],[144,33,31,206,145,33],"maker\u002Fneutral\u002Fidea",[208,33,33,209,192,33],"16907319","commenter\u002Fneutral\u002Fnone",[211,33,33,209,145,33],"16907689",[125,33,33,209,126,33],[214,33,33,215,216,33],"16908447","other\u002Fneutral\u002Fnone","cutler",[191,33,33,215,192,33],[219,33,33,209,126,33],"16910795",[221,33,33,215,65,33],"16911083",[129,33,33,215,130,33],[224,33,33,225,226,33],"16907495","other\u002Fneutral\u002Fidea","simonw",[228,33,33,215,145,33],"16907546",[230,33,33,215,231,33],"16909203","est",[171,38,31,233,172,33],"project\u002Fneutral\u002Fidea",[235,38,33,215,236,33],"16905158","abuckenheimer",[238,38,33,215,239,33],"16909595","je42",[241,38,38,242,243,33],"16905483","project\u002Fcritical\u002Fdesign","ergo14",[53,38,33,233,11,38],[64,42,45,246,65,33],"project\u002Fpositive\u002Fdocs",[248,42,33,249,250,33],"16904591","commenter\u002Fneutral\u002Fdocs","orf",[73,42,33,252,11,38],"maker\u002Fneutral\u002Fdocs",[254,42,31,252,255,33],"16907874","bb88",[257,31,31,258,259,33],"16905649","project\u002Fneutral\u002Fnone","cmcginty",[114,34,38,261,115,33],"project\u002Fcritical\u002Fexecution",[185,34,33,263,11,38],"project\u002Fneutral\u002Fexecution",[265,34,45,266,267,33],"16946075","project\u002Fpositive\u002Fnone","fantix",[269,34,33,215,270,33],"16906729","theptip",[272,34,33,273,145,33],"16907174","other\u002Fneutral\u002Fperformance",[275,34,33,209,276,33],"16906751","tinix",[56,45,45,278,57,33],"project\u002Fpositive\u002Fidea",[178,201,31,233,179,33],[151,32,31,252,152,33],[118,32,33,215,119,33],[283,32,38,261,152,33],"16918847",[136,285,38,286,137,33],8,"project\u002Fcritical\u002Fperformance",[90,285,33,288,11,38],"project\u002Fpositive\u002Fperformance",[159,290,31,291,160,33],9,"maker\u002Fneutral\u002Fnone",[293,290,33,209,294,33],"16904408","some_account",[296,290,33,209,297,33],"16904870","pknopf",[299,290,33,209,300,33],"16904411","cpburns2009",[302,290,33,209,297,33],"16904858",[304,290,33,209,305,33],"16906702","luka-birsa",[307,290,33,291,11,38],"16905906",[],[310,315,320,325,330,334],{"id":311,"name":312,"points":313,"category":314},"16909714","Intuitive Linear Algebra and 3D Geometry",402,"learning_science",{"id":316,"name":317,"points":318,"category":319},"16912601","Classroomies",360,"consumer_social",{"id":321,"name":322,"points":323,"category":324},"16902628","Wunderscan",330,"productivity",{"id":326,"name":327,"points":328,"category":329},"16884979","cchound",239,"creative",{"id":331,"name":332,"points":333,"category":324},"16876636","Telescope",166,{"id":335,"name":336,"points":337,"category":329},"16902431","NYC Buildings",151,false,"v2",{"id":341,"name":5,"line":6,"ai":338,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":342,"top":18,"kw":343,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":344,"url":9,"mix":345,"praise":97,"objection":111,"sub":21},16902896,-0.02,[24,25,26,27],"3000000000003001050331050005330110300000",[31,32,33,34],1794036565377]