Py.Cafe

tvb.../

solara-click-counter

Interactive Click Counter with Solara

DocsPricing
  • app.py
  • model_blockade.py
  • requirements.txt
model_blockade.py
1
aW1wb3J0IHNvbGFyYQpmcm9tIG1lc2EgaW1wb3J0IE1vZGVsLCBBZ2VudApmcm9tIG1lc2Euc3BhY2UgaW1wb3J0IENvbnRpbnVvdXNTcGFjZQpmcm9tIG1lc2EuZGF0YWNvbGxlY3Rpb24gaW1wb3J0IERhdGFDb2xsZWN0b3IKZnJvbSBtZXNhLnZpc3VhbGl6YXRpb24gaW1wb3J0IFNvbGFyYVZpeiwgbWFrZV9zcGFjZV9jb21wb25lbnQsIG1ha2VfcGxvdF9jb21wb25lbnQKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCByYW5kb20KCgojIC0tLS0gU2hpcCBBZ2VudCAtLS0tCmNsYXNzIFNoaXAoQWdlbnQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBiYXNlLCBzcGVlZCwgbWFpbnRlbmFuY2Vfc3RhcnQpOgogICAgICAgICMgQXV0b21hdGljYWxseSBhc3NpZ25zIGEgdW5pcXVlX2lkIGFuZCByZWdpc3RlcnMgdGhlIGFnZW50IHdpdGggdGhlIG1vZGVsCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtb2RlbCkKICAgICAgICBzZWxmLmJhc2UgPSBiYXNlCiAgICAgICAgc2VsZi5zdGF0dXMgPSAidHJhbnNpdGluZyIgICMgaW5pdGlhbCBzdGF0dXM6IG1vdmluZyB0b3dhcmQgdGhlIGFyZWEKICAgICAgICBzZWxmLmRheXNfaW5fYXJlYSA9IDAKICAgICAgICBzZWxmLnNwZWVkID0gc3BlZWQKICAgICAgICBzZWxmLm1haW50ZW5hbmNlX3N0YXJ0ID0gbWFpbnRlbmFuY2Vfc3RhcnQKICAgICAgICBzZWxmLnRhcmdldF9iYXNlID0gTm9uZQoKICAgICAgICAjIFBsYWNlIHRoZSBzaGlwIGF0IGl0cyBiYXNlIHBvc2l0aW9uCiAgICAgICAgYmFzZV9wb3MgPSBtb2RlbC5iYXNlc1tiYXNlXVsicG9zaXRpb24iXQogICAgICAgIG1vZGVsLnNwYWNlLnBsYWNlX2FnZW50KHNlbGYsIGJhc2VfcG9zKQogICAgICAgICMgU2V0IHRoZSBkZXN0aW5hdGlvbiBhcyB0aGUgYXJlYSBvZiBpbnRlcmVzdAogICAgICAgIHNlbGYuZGVzdGluYXRpb24gPSAobW9kZWwuYXJlYV9vZl9pbnRlcmVzdFsieCJdLCBtb2RlbC5hcmVhX29mX2ludGVyZXN0WyJ5Il0pCgogICAgZGVmIHN0ZXAoc2VsZik6CiAgICAgICAgaWYgc2VsZi5zdGF0dXMgPT0gInRyYW5zaXRpbmciOgogICAgICAgICAgICBzZWxmLm1vdmVfdG93YXJkcyhzZWxmLmRlc3RpbmF0aW9uKQogICAgICAgICAgICBpZiBzZWxmLnJlYWNoZWRfZGVzdGluYXRpb24oc2VsZi5kZXN0aW5hdGlvbik6CiAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9ICJpbl9hcmVhIgoKICAgICAgICBlbGlmIHNlbGYuc3RhdHVzID09ICJpbl9hcmVhIjoKICAgICAgICAgICAgc2VsZi5kYXlzX2luX2FyZWEgKz0gMQogICAgICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCBzZWxmLm1haW50ZW5hbmNlX3Byb2JhYmlsaXR5KCk6CiAgICAgICAgICAgICAgICAjIExvb2sgZm9yIHRoZSBjbG9zZXN0IGF2YWlsYWJsZSBiYXNlIChieSBFdWNsaWRlYW4gZGlzdGFuY2UpCiAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9iYXNlID0gc2VsZi5jbG9zZXN0X2Jhc2UoKQogICAgICAgICAgICAgICAgaWYgc2VsZi50YXJnZXRfYmFzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9ICJ0cmFuc2l0aW5nX2JhY2siCiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXN0aW5hdGlvbiA9IHNlbGYubW9kZWwuYmFzZXNbc2VsZi50YXJnZXRfYmFzZV1bInBvc2l0aW9uIl0KICAgICAgICAgICAgICAgICAgICAjIFJlc2VydmUgYSBtYWludGVuYW5jZSBzbG90IGJ5IHJlZHVjaW5nIGNhcGFjaXR5CiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5iYXNlc1tzZWxmLnRhcmdldF9iYXNlXVsiY2FwYWNpdHkiXSAtPSAxCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICMgSWYgbm8gYmFzZSBpcyBhdmFpbGFibGUsIHJlbWFpbiBpbiB0aGUgYXJlYQogICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gImluX2FyZWEiCgogICAgICAgIGVsaWYgc2VsZi5zdGF0dXMgPT0gInRyYW5zaXRpbmdfYmFjayI6CiAgICAgICAgICAgIHNlbGYubW92ZV90b3dhcmRzKHNlbGYuZGVzdGluYXRpb24pCiAgICAgICAgICAgIGlmIHNlbGYucmVhY2hlZF9kZXN0aW5hdGlvbihzZWxmLmRlc3RpbmF0aW9uKToKICAgICAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gImluX2Jhc2UiCiAgICAgICAgICAgICAgICAjIE1haW50ZW5hbmNlIGNvbXBsZXRlOyBmcmVlIHRoZSBzbG90CiAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLmJhc2VzW3NlbGYudGFyZ2V0X2Jhc2VdWyJjYXBhY2l0eSJdICs9IDEKCiAgICAgICAgZWxpZiBzZWxmLnN0YXR1cyA9PSAiaW5fYmFzZSI6CiAgICAgICAgICAgICMgQWZ0ZXIgbWFpbnRlbmFuY2UsIHRoZXJlJ3MgYSBjaGFuY2UgdG8gcmVkZXBsb3kKICAgICAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC4xOgogICAgICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSAidHJhbnNpdGluZyIKICAgICAgICAgICAgICAgIHNlbGYuZGF5c19pbl9hcmVhID0gMAogICAgICAgICAgICAgICAgc2VsZi5kZXN0aW5hdGlvbiA9IChzZWxmLm1vZGVsLmFyZWFfb2ZfaW50ZXJlc3RbIngiXSwgc2VsZi5tb2RlbC5hcmVhX29mX2ludGVyZXN0WyJ5Il0pCgogICAgZGVmIG1haW50ZW5hbmNlX3Byb2JhYmlsaXR5KHNlbGYpOgogICAgICAgICMgVXNlIGEgbG9naXN0aWMgZnVuY3Rpb24gdG8gcmFtcCB1cCB0aGUgcHJvYmFiaWxpdHkgYWZ0ZXIgbWFpbnRlbmFuY2Vfc3RhcnQgZGF5cwogICAgICAgIGlmIHNlbGYuZGF5c19pbl9hcmVhID4gc2VsZi5tYWludGVuYW5jZV9zdGFydDoKICAgICAgICAgICAgcmV0dXJuIDEgLyAoMSArIG5wLmV4cCgtMC4xICogKHNlbGYuZGF5c19pbl9hcmVhIC0gc2VsZi5tYWludGVuYW5jZV9zdGFydCAtIDUwKSkpCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgY2xvc2VzdF9iYXNlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENvbXB1dGUgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBmcm9tIHRoZSBzaGlwJ3MgY3VycmVudCBwb3NpdGlvbiB0byBlYWNoIGJhc2UgdGhhdAogICAgICAgIHN0aWxsIGhhcyBhdmFpbGFibGUgY2FwYWNpdHksIGFuZCByZXR1cm4gdGhlIGtleSBvZiB0aGUgY2xvc2VzdCBvbmUuCiAgICAgICAgIiIiCiAgICAgICAgYXZhaWxhYmxlX2Jhc2VzID0gewogICAgICAgICAgICBiOiBzZWxmLm1vZGVsLmJhc2VzW2JdCiAgICAgICAgICAgIGZvciBiIGluIHNlbGYubW9kZWwuYmFzZXMKICAgICAgICAgICAgaWYgc2VsZi5tb2RlbC5iYXNlc1tiXVsiY2FwYWNpdHkiXSA+IDAKICAgICAgICB9CiAgICAgICAgaWYgYXZhaWxhYmxlX2Jhc2VzOgogICAgICAgICAgICByZXR1cm4gbWluKAogICAgICAgICAgICAgICAgYXZhaWxhYmxlX2Jhc2VzLAogICAgICAgICAgICAgICAga2V5PWxhbWJkYSBiOiBucC5saW5hbGcubm9ybSgKICAgICAgICAgICAgICAgICAgICBucC5hcnJheShzZWxmLnBvcykgLSBucC5hcnJheShzZWxmLm1vZGVsLmJhc2VzW2JdWyJwb3NpdGlvbiJdKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBOb25lCgogICAgZGVmIG1vdmVfdG93YXJkcyhzZWxmLCB0YXJnZXQpOgogICAgICAgIHgsIHkgPSBzZWxmLnBvcwogICAgICAgIHR4LCB0eSA9IHRhcmdldAogICAgICAgIGR4LCBkeSA9IHR4IC0geCwgdHkgLSB5CiAgICAgICAgZGlzdCA9IG5wLnNxcnQoZHggKiogMiArIGR5ICoqIDIpCiAgICAgICAgaWYgZGlzdCA+IDA6CiAgICAgICAgICAgIHN0ZXBfeCA9IHNlbGYuc3BlZWQgKiAoZHggLyBkaXN0KQogICAgICAgICAgICBzdGVwX3kgPSBzZWxmLnNwZWVkICogKGR5IC8gZGlzdCkKICAgICAgICAgICAgbmV3X3BvcyA9ICh4ICsgc3RlcF94LCB5ICsgc3RlcF95KQogICAgICAgICAgICBzZWxmLm1vZGVsLnNwYWNlLm1vdmVfYWdlbnQoc2VsZiwgbmV3X3BvcykKCiAgICBkZWYgcmVhY2hlZF9kZXN0aW5hdGlvbihzZWxmLCB0YXJnZXQpOgogICAgICAgIHJldHVybiBucC5saW5hbGcubm9ybShucC5hcnJheShzZWxmLnBvcykgLSBucC5hcnJheSh0YXJnZXQpKSA8IHNlbGYuc3BlZWQKCgojIC0tLS0gTW9kZWwgLS0tLQpjbGFzcyBTaGlwRGVwbG95bWVudE1vZGVsKE1vZGVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fc2hpcHM9NDAsIGJhc2VzPU5vbmUsIGFyZWFfb2ZfaW50ZXJlc3Q9Tm9uZSwgc3BlZWQ9MiwgbWFpbnRlbmFuY2Vfc3RhcnQ9NjAsIHNlZWQ9Tm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWVkPXNlZWQpICAjIE1hbmRhdG9yeSBpbiBNZXNhIDMKICAgICAgICBzZWxmLm51bV9zaGlwcyA9IG51bV9zaGlwcwogICAgICAgIHNlbGYuYmFzZXMgPSBiYXNlcyBpZiBiYXNlcyBlbHNlIHsKICAgICAgICAgICAgIkRpZWdvIEdhcmNpYSI6IHsicG9zaXRpb24iOiAoMjAsIDIwKSwgImRpc3RhbmNlIjogMzUwMCwgImNhcGFjaXR5IjogMTB9LAogICAgICAgICAgICAiR3VhbSI6IHsicG9zaXRpb24iOiAoODAsIDgwKSwgImRpc3RhbmNlIjogNzAwMCwgImNhcGFjaXR5IjogMTB9LAogICAgICAgICAgICAiRGFyd2luIjogeyJwb3NpdGlvbiI6ICg0MCwgNDApLCAiZGlzdGFuY2UiOiA1MDAwLCAiY2FwYWNpdHkiOiAxMH0sCiAgICAgICAgfQogICAgICAgIHNlbGYuYXJlYV9vZl9pbnRlcmVzdCA9IGFyZWFfb2ZfaW50ZXJlc3QgaWYgYXJlYV9vZl9pbnRlcmVzdCBlbHNlIHsieCI6IDUwLCAieSI6IDUwfQogICAgICAgIHNlbGYuc3BhY2UgPSBDb250aW51b3VzU3BhY2UoMTAwLCAxMDAsIHRvcnVzPUZhbHNlKQoKICAgICAgICAjIENyZWF0ZSBTaGlwIGFnZW50cwogICAgICAgIGZvciBfIGluIHJhbmdlKG51bV9zaGlwcyk6CiAgICAgICAgICAgIGJhc2UgPSByYW5kb20uY2hvaWNlKGxpc3Qoc2VsZi5iYXNlcy5rZXlzKCkpKQogICAgICAgICAgICBTaGlwKHNlbGYsIGJhc2UsIHNwZWVkLCBtYWludGVuYW5jZV9zdGFydCkKCiAgICAgICAgIyBEYXRhIGNvbGxlY3Rpb246IGNvdW50IHNoaXBzIGluIGRpZmZlcmVudCBzdGF0dXNlcwogICAgICAgIHNlbGYuZGF0YWNvbGxlY3RvciA9IERhdGFDb2xsZWN0b3IoCiAgICAgICAgICAgIG1vZGVsX3JlcG9ydGVycz17CiAgICAgICAgICAgICAgICAiU2hpcHMgaW4gQXJlYSI6IGxhbWJkYSBtOiBzdW0oMSBmb3IgcyBpbiBtLmFnZW50c19ieV90eXBlW1NoaXBdIGlmIHMuc3RhdHVzID09ICJpbl9hcmVhIiksCiAgICAgICAgICAgICAgICAiU2hpcHMgUmV0dXJuaW5nIjogbGFtYmRhIG06IHN1bSgxIGZvciBzIGluIG0uYWdlbnRzX2J5X3R5cGVbU2hpcF0gaWYgcy5zdGF0dXMgPT0gInRyYW5zaXRpbmdfYmFjayIpLAogICAgICAgICAgICAgICAgIlNoaXBzIGluIEJhc2UiOiBsYW1iZGEgbTogc3VtKDEgZm9yIHMgaW4gbS5hZ2VudHNfYnlfdHlwZVtTaGlwXSBpZiBzLnN0YXR1cyA9PSAiaW5fYmFzZSIpLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKCiAgICBkZWYgc3RlcChzZWxmKToKICAgICAgICAjIGFnZW50IGFjdGl2YXRpb24KICAgICAgICBzZWxmLmFnZW50c19ieV90eXBlW1NoaXBdLnNodWZmbGVfZG8oInN0ZXAiKQogICAgICAgIHNlbGYuZGF0YWNvbGxlY3Rvci5jb2xsZWN0KHNlbGYpCgoKIyAtLS0tIFZpc3VhbGl6YXRpb24gLS0tLQpkZWYgYWdlbnRfcG9ydHJheWFsKGFnZW50KToKICAgIGlmIGlzaW5zdGFuY2UoYWdlbnQsIFNoaXApOgogICAgICAgIGlmIGFnZW50LnN0YXR1cyA9PSAiaW5fYXJlYSI6CiAgICAgICAgICAgIGNvbG9yID0gImJsdWUiCiAgICAgICAgZWxpZiBhZ2VudC5zdGF0dXMgPT0gInRyYW5zaXRpbmdfYmFjayI6CiAgICAgICAgICAgIGNvbG9yID0gInJlZCIKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb2xvciA9ICJncmVlbiIKICAgICAgICByZXR1cm4geyJTaGFwZSI6ICJjaXJjbGUiLCAiQ29sb3IiOiBjb2xvciwgIkZpbGxlZCI6IFRydWUsICJyIjogMC44fQogICAgcmV0dXJuIHt9CgoKIyBQbG90IGNvbXBvbmVudCBmb3IgbGl2ZSBjaGFydHMKU2hpcFBsb3QgPSBtYWtlX3Bsb3RfY29tcG9uZW50KHsKICAgICJTaGlwcyBpbiBBcmVhIjogInRhYjpibHVlIiwKICAgICJTaGlwcyBSZXR1cm5pbmciOiAidGFiOnJlZCIsCiAgICAiU2hpcHMgaW4gQmFzZSI6ICJ0YWI6Z3JlZW4iLAp9KQoKIyBEZWZpbmUgbW9kZWwgcGFyYW1ldGVycyAoZm9yIFVJIGlucHV0cykKbW9kZWxfcGFyYW1zID0gewogICAgInNlZWQiOiB7CiAgICAgICAgInR5cGUiOiAiSW5wdXRUZXh0IiwKICAgICAgICAidmFsdWUiOiA0MiwKICAgICAgICAibGFiZWwiOiAiUmFuZG9tIFNlZWQiLAogICAgfSwKICAgICJudW1fc2hpcHMiOiB7CiAgICAgICAgInR5cGUiOiAiU2xpZGVySW50IiwKICAgICAgICAidmFsdWUiOiA0MCwKICAgICAgICAibGFiZWwiOiAiTnVtYmVyIG9mIFNoaXBzIiwKICAgICAgICAibWluIjogMTAsCiAgICAgICAgIm1heCI6IDEwMCwKICAgICAgICAic3RlcCI6IDEsCiAgICB9LAogICAgInNwZWVkIjogewogICAgICAgICJ0eXBlIjogIlNsaWRlckZsb2F0IiwKICAgICAgICAidmFsdWUiOiAyLAogICAgICAgICJsYWJlbCI6ICJTaGlwIFNwZWVkIiwKICAgICAgICAibWluIjogMSwKICAgICAgICAibWF4IjogMTAsCiAgICAgICAgInN0ZXAiOiAwLjUsCiAgICB9LAogICAgIm1haW50ZW5hbmNlX3N0YXJ0IjogewogICAgICAgICJ0eXBlIjogIlNsaWRlckludCIsCiAgICAgICAgInZhbHVlIjogNjAsCiAgICAgICAgImxhYmVsIjogIk1haW50ZW5hbmNlIFN0YXJ0IChEYXlzKSIsCiAgICAgICAgIm1pbiI6IDMwLAogICAgICAgICJtYXgiOiAxMDAsCiAgICAgICAgInN0ZXAiOiA1LAogICAgfSwKfQoKIyBJbnN0YW50aWF0ZSB0aGUgbW9kZWwgdXNpbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyAoaWdub3JpbmcgJ3NlZWQnIGhlcmUpCm1vZGVsX2luc3RhbmNlID0gU2hpcERlcGxveW1lbnRNb2RlbCgqKntrOiB2WyJ2YWx1ZSJdIGZvciBrLCB2IGluIG1vZGVsX3BhcmFtcy5pdGVtcygpIGlmIGsgIT0gInNlZWQifSkKIyBXcmFwIHRoZSBtb2RlbCBpbiBhIHJlYWN0aXZlIGNvbnRhaW5lciBzbyB0aGF0IFNvbGFyYVZpeiB1cGRhdGVzIGF1dG9tYXRpY2FsbHkKbW9kZWwgPSBzb2xhcmEucmVhY3RpdmUobW9kZWxfaW5zdGFuY2UpCgojIEluaXRpYWxpemUgdGhlIHZpc3VhbGl6YXRpb24gZGFzaGJvYXJkIHdpdGggc3BhY2UgYW5kIHBsb3QgY29tcG9uZW50cwpwYWdlID0gU29sYXJhVml6KAogICAgbW9kZWwsCiAgICBjb21wb25lbnRzPVsKICAgICAgICBtYWtlX3NwYWNlX2NvbXBvbmVudChhZ2VudF9wb3J0cmF5YWwpLAogICAgICAgIFNoaXBQbG90LAogICAgXSwKICAgIG1vZGVsX3BhcmFtcz1tb2RlbF9wYXJhbXMsCiAgICBuYW1lPSJCbG9ja2FkZSBNb2RlbCIsCikKCnBhZ2Ug