[{"data":1,"prerenderedAt":255},["ShallowReactive",2],{"project-10976794":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":42,"post_text":44,"what":45,"said":82,"maker_in_thread":145,"shape":158,"grid":162,"attempts":217,"same_week":218,"maker_shows":206,"maker_hidden":247,"reader_version":248,"card":249},"10976794","Graphene","GraphQL framework for Python","title","Show HN: Graphene – GraphQL framework for Python","http:\u002F\u002Fgraphene-python.org\u002F","graphene-python.org","syrusakbary",1453847974,2016,106,25,346,2264,16,"notable","dev_tools","graphql framework","library",[24,25,21,26,27],"graphql","python","graphql schema","python api","curious",0.056,{"positive":31,"neutral":32,"mixed":33,"critical":34},3,10,0,2,15,{"docs":37,"idea":38,"performance":40,"design":41},{"positive":33,"critical":34},{"positive":39,"critical":33},1,{"positive":33,"critical":33},{"positive":39,"critical":33},[39,43,33,39,33,31,33,31,31,33,31,33,31,31,31,31,33,43,33,33,43,31,33,31,33],5,null,{"problem":46,"audience":52,"pricing":44,"motivation":44,"time_to_build":44,"stack":60,"openness":80,"stage":81,"team_size":81},{"value":47,"source":48,"evidence":49},"Building GraphQL servers in Python","inferred",[50],{"id":51},"post",{"value":53,"source":48,"evidence":54},"Python developers building GraphQL APIs",[55,56],{"id":51},{"id":57,"by":58,"text":59},"10977509","andrewingram","Ah nice, i'll have a look into that a bit more. What's the graphql library that's being imported alongside graphene? Can you see how dataloader might be implemented? The…",[61,68,76],{"value":62,"source":63,"evidence":64},"Python","maker",[65],{"id":66,"by":11,"text":67},"10977000","Hi dwiel, you mean fields inside types? (as class attributes?) If so, putting the attributes inside a function is usually for lazy resolving the fields. Sometimes the types could…",{"value":69,"source":70,"evidence":71},"graphql-core","commenter",[72],{"id":73,"by":74,"text":75},"10977924","jhgg","Graphene is a more pythonic wrapper ontop of a lower-level library called graphql-core[1], which provides async execution using execution middlewares [2]. As far as how a…",{"value":77,"source":70,"evidence":78},"gevent",[79],{"id":73,"by":74,"text":75},"open_source","unknown",{"praise":83,"objections":97,"requests":112,"questions":123,"alternatives":144},[84,90],{"value":85,"source":70,"evidence":86},"Pythonic wrapper around graphql-core",[87],{"id":88,"by":74,"text":89},"10977894","Awesome work Syrus! Super happy to see this library evolve to provide a pythonic wrapper around the core graphql library. https:\u002F\u002Fgithub.com\u002Fgraphql-python\u002Fgraphql-core",{"value":91,"source":70,"evidence":92},"Snappy website",[93],{"id":94,"by":95,"text":96},"10978883","estefan","Snappy website. Is that on github as well? I'd like to have a poke around and see how it's made.",[98,105],{"value":99,"source":70,"evidence":100},"Under-documented, examples too simple",[101],{"id":102,"by":103,"text":104},"10979216","dgoldstein","I've been trying to work with this library. So far my conclusion is that it's heavily under-documented and the examples are almost too simple. I'm having lots of trouble…",{"value":106,"source":70,"evidence":107},"Description on front page is too generic",[108],{"id":109,"by":110,"text":111},"10979918","masukomi","\"A GraphQL query is a string interpreted by a server that returns data in a specified format\" .... that is the most useless effing description of a thing. That describes…",[113,119],{"value":114,"source":70,"evidence":115},"Example of parallel resolvers",[116],{"id":117,"by":58,"text":118},"10977471","Any chance of an example of how that might look\u002Fwork?",{"value":120,"source":70,"evidence":121},"Dataloader implementation for Python",[122],{"id":57,"by":58,"text":59},[124,130,137],{"value":125,"source":70,"evidence":126},"Can resolvers run in parallel or sequentially?",[127],{"id":128,"by":58,"text":129},"10977264","Can resolve functions get executed in parallel or sequentially? Likewise, is there a dataloader equivalent? These things are kind of essential for a performant GraphQL server. I…",{"value":131,"source":70,"evidence":132},"How is caching and invalidation handled?",[133],{"id":134,"by":135,"text":136},"10977338","d0m","One thing I'm wondering about graphql is how does it know when something changed in the db and should be re-queried. For example, I fetch some movies in my front-end webapp and…",{"value":138,"source":70,"evidence":139},"Can one attribute be derived from another?",[140],{"id":141,"by":142,"text":143},"10976984","dwiel","Is there a way to define attributes as a function of other attributes? I poked through the documentation and tried to prototype it but couldn't get it to work. Am I missing…",[],{"comments":146,"answered":147,"key":148},6,4,[149,152,155],{"id":150,"text":151},"10978654","Thanks! Without your work at graphql-core this would not have been possible! ;)",{"id":153,"text":154},"10982912","I'm sorry to hear that. Documentation is in progress :) As a side note, a better approach for handling errors is coming to graphene soon",{"id":156,"text":157},"10977438","By default is executed sequentially, however supports parallel resolvers in fields using asyncio, gevent, or async def in Python 3.5+",{"commenters":159,"max_depth":146,"maker_replies":146,"first_comment_mins":160,"lifespan_hours":161},12,31,22,[163,165,167,169,170,172,176,179,181,183,184,185,187,189,190,191,193,197,199,202,204,209,212,213,215],[109,33,39,164,110,33],"project\u002Fcritical\u002Fdocs",[88,39,43,166,74,33],"maker\u002Fpositive\u002Fidea",[150,39,33,168,11,39],"commenter\u002Fneutral\u002Fnone",[102,34,39,164,103,33],[153,34,33,171,11,39],"maker\u002Fneutral\u002Fdocs",[173,31,31,174,175,33],"10978641","project\u002Fneutral\u002Fidea","owyn",[177,31,33,178,58,33],"10979580","commenter\u002Fneutral\u002Fidea",[180,31,31,174,175,33],"10981016",[128,147,31,182,58,33],"project\u002Fneutral\u002Fperformance",[156,147,33,182,11,39],[117,147,31,171,58,33],[186,147,33,171,11,39],"10977492",[57,147,31,188,58,33],"maker\u002Fneutral\u002Fperformance",[73,147,31,182,74,33],[134,43,31,182,135,33],[192,43,31,182,58,33],"10977362",[194,43,33,195,196,33],"10978984","other\u002Fneutral\u002Fnone","sebak",[94,146,43,198,95,33],"maker\u002Fpositive\u002Fdesign",[200,146,33,195,201,33],"10978896","kylemathews",[203,146,33,168,95,33],"10979141",[205,206,43,207,208,33],"10977188",7,"maker\u002Fpositive\u002Fnone","kevinastone",[141,210,31,211,142,33],8,"project\u002Fneutral\u002Fdocs",[66,210,33,171,11,39],[214,210,31,211,142,33],"10977380",[216,210,33,171,11,39],"10977506",[],[219,224,228,233,238,243],{"id":220,"name":221,"points":222,"category":223},"10944795","Super Mail Forward",454,"creative",{"id":225,"name":226,"points":227,"category":223},"10950794","finda.photo",310,{"id":229,"name":230,"points":231,"category":232},"10955186","Wallabag",135,"productivity",{"id":234,"name":235,"points":236,"category":237},"10944617","murgen",122,"hardware",{"id":239,"name":240,"points":241,"category":242},"10976365","RemoteTogether",115,"consumer_social",{"id":244,"name":245,"points":246,"category":242},"10972290","Visual Hacker News",113,false,"v2",{"id":250,"name":5,"line":6,"ai":247,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":251,"top":18,"kw":252,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":253,"url":9,"mix":254,"praise":85,"objection":99,"sub":21},10976794,0.06,[24,25,21,26,27],"1501030330303333050053030",[31,32,33,34],1794036540075]