{"id":13721073,"url":"https://github.com/vidyasagar1432/detacache","last_synced_at":"2025-05-07T13:31:32.199Z","repository":{"id":43731471,"uuid":"433332133","full_name":"vidyasagar1432/detacache","owner":"vidyasagar1432","description":"Cache any function call's to Deta base.","archived":false,"fork":false,"pushed_at":"2022-10-09T10:49:16.000Z","size":81,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-19T21:08:37.224Z","etag":null,"topics":["aiohttp","async","asyncio","base","cache","cache-api","cache-request","deta","deta-cache","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/detacache/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vidyasagar1432.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-30T07:19:01.000Z","updated_at":"2024-03-09T10:04:39.000Z","dependencies_parsed_at":"2022-09-21T16:53:39.108Z","dependency_job_id":null,"html_url":"https://github.com/vidyasagar1432/detacache","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vidyasagar1432%2Fdetacache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vidyasagar1432%2Fdetacache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vidyasagar1432%2Fdetacache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vidyasagar1432%2Fdetacache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vidyasagar1432","download_url":"https://codeload.github.com/vidyasagar1432/detacache/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252886276,"owners_count":21819690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiohttp","async","asyncio","base","cache","cache-api","cache-request","deta","deta-cache","python"],"created_at":"2024-08-03T01:01:12.165Z","updated_at":"2025-05-07T13:31:31.942Z","avatar_url":"https://github.com/vidyasagar1432.png","language":"Python","funding_links":[],"categories":["Misc's"],"sub_categories":["Cache"],"readme":"# [DetaCache](https://github.com/vidyasagar1432/detacache)\n\n#### Async and Sync Function Decorator to cache function call's to Deta base.\n\n## Installing\n\n```bash\npip install detacache\n```\n\n## Async and Sync Decorator to cache function\n```python\nimport asyncio\nimport aiohttp\nimport requests\n\nfrom detacache import DetaCache\n\napp = detaCache('projectKey')\n\n\n@app.cache(expire=30)\nasync def asyncgetjSON(url:str):\n    async with aiohttp.ClientSession() as session:\n        async with session.get(url) as response:\n            return await response.json()\n\n@app.cache(expire=30)\ndef syncgetjSON(url:str):\n    return requests.get(url).json()\n\nasync def main():\n    asyncdata = await asyncgetjSON('https://httpbin.org/json')\n    print(asyncdata)\n    syncdata = syncgetjSON('https://httpbin.org/json')\n    print(syncdata)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n```\n\n## FastAPI Decorator to cache function\n\n#### you can use `cache` method as decorator between router decorator and view function and must pass `request` as param of view function.\n\n```python\nfrom fastapi import FastAPI, Request\nfrom fastapi.templating import Jinja2Templates\nfrom fastapi.responses import HTMLResponse, PlainTextResponse\nfrom detacache import FastAPICache\n\napp = FastAPI()\n\ntemplates = Jinja2Templates(directory='templates')\n\ndeta = FastAPICache(projectKey='projectKey')\n\n\n@app.get('/t-html')\n@deta.cache(expire=10)\ndef templateResponse(request:Request):\n    return templates.TemplateResponse('home.html',context={'request':request})\n\n@app.get('/html')\n@deta.cache(expire=10)\ndef htmlResponse(request: Request):\n    return HTMLResponse('''\n        \u003c!DOCTYPE HTML\u003e\n        \u003chtml lang=\"en-US\"\u003e\n        \u003chead\u003e\n            \u003cmeta charset=\"UTF-8\"\u003e\n            \u003ctitle\u003eMy Pimpin Website\u003c/title\u003e\n            \u003cmeta name=\"description\" content=\"A sample website, nothin fancy\"\u003e\n            \u003cmeta http-equiv=\"author\" content=\"Francisco Campos Arias\"\u003e\n            \u003cmeta name=\"keywords\" content=\"html, css, web, design, sample, practice\"\u003e\n        \u003c/head\u003e\n        \u003cbody\u003e\n            \u003cdiv class=\"container\"\u003e\n            \u003cheader\u003e\n                \u003cdiv class=\"header\"\u003e\n                    \u003ch1\u003e{{ data }}\u003c/h1\u003e\n                \u003c/div\u003e\n            \u003c/header\u003e\n                \u003cdiv class=\"main\"\u003e\n                    \u003ch2\u003eThis is just an example with some web content. This is the Hero Unit.\u003c/h2\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"feature\"\u003e\n                    \u003ch3\u003eFeatured Content 1\u003c/h3\u003e\n                    \u003cp\u003elorem ipsum dolor amet lorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum.\u003c/p\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"feature\"\u003e\n                    \u003ch3\u003eFeatured Content 2\u003c/h3\u003e\n                    \u003cp\u003elorem ipsum dolor amet lorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor.\u003c/p\u003e\n                \u003c/div\u003e\n            \u003cfooter\u003e\n                \u0026copy;2012 Francisco Campos Arias, All Rigts Reserved.\n            \u003c/footer\u003e\n            \u003c/div\u003e\n        \u003c/body\u003e\n        \u003c/html\u003e\n        ''')\n\n\n@app.get('/dict')\n@deta.cache(expire=10)\ndef dictResponse(request: Request):\n    return {\n        \"slideshow\": {\n            \"author\": \"Yours Truly\",\n            \"date\": \"date of publication\",\n            \"slides\": [\n                {\n                    \"title\": \"Wake up to WonderWidgets!\",\n                    \"type\": \"all\"\n                },\n                {\n                    \"items\": [\n                        \"Why \u003cem\u003eWonderWidgets\u003c/em\u003e are great\",\n                        \"Who \u003cem\u003ebuys\u003c/em\u003e WonderWidgets\"\n                    ],\n                    \"title\": \"Overview\",\n                    \"type\": \"all\"\n                }\n            ],\n            \"title\": \"Sample Slide Show\"\n        }\n    }\n\n\n@app.get('/text')\n@deta.cache(expire=10)\ndef textResponse(request: Request):\n    return PlainTextResponse('detacache')\n\n\n@app.get('/str')\n@deta.cache(expire=20)\nasync def strResponse(request: Request):\n    return 'fastapi detacache'\n\n\n@app.get('/tuple')\n@deta.cache(expire=10)\ndef tupleResponse(request: Request):\n    return ('fastapi', 'detacache')\n\n\n@app.get('/list')\n@deta.cache(expire=10)\ndef tupleResponse(request: Request):\n    return ['fastapi', 'detacache']\n\n@app.get('/set')\n@deta.cache(expire=10)\ndef setResponse(request: Request):\n    return {'fastapi', 'detacache'}\n\n\n@app.get('/int')\n@deta.cache(expire=10)\ndef intResponse(request: Request):\n    return 10\n\n\n@app.get('/float')\n@deta.cache(expire=10)\ndef floatResponse(request: Request):\n    return 1.5\n\n\n@app.get('/bool')\n@deta.cache(expire=10)\ndef boolResponse(request: Request):\n    return True\n\n```\n\n## starlette Decorator to cache function\n\n#### you can use `cache` method as decorator and must pass `request` as param of view function.\n\n```python\nfrom starlette.applications import Starlette\nfrom starlette.responses import HTMLResponse, PlainTextResponse, JSONResponse\nfrom starlette.routing import Route\nfrom starlette.requests import Request\n\nfrom detacache import StarletteCache\n\n\ndeta = StarletteCache(projectKey='projectKey')\n\n\n\n@deta.cache(expire=30)\ndef dictResponse(request: Request):\n    return JSONResponse({\n        \"slideshow\": {\n            \"author\": \"Yours Truly\",\n            \"date\": \"date of publication\",\n            \"slides\": [\n                {\n                    \"title\": \"Wake up to WonderWidgets!\",\n                    \"type\": \"all\"\n                },\n                {\n                    \"items\": [\n                        \"Why \u003cem\u003eWonderWidgets\u003c/em\u003e are great\",\n                        \"Who \u003cem\u003ebuys\u003c/em\u003e WonderWidgets\"\n                    ],\n                    \"title\": \"Overview\",\n                    \"type\": \"all\"\n                }\n            ],\n            \"title\": \"Sample Slide Show\"\n        }\n    })\n\n@deta.cache(expire=20)\nasync def strResponse(request: Request):\n    return JSONResponse('fastapi detacache') \n\n@deta.cache(expire=10)\ndef tupleResponse(request: Request):\n    return JSONResponse(('fastapi', 'detacache'))\n\n@deta.cache(expire=10)\ndef listResponse(req):\n    print(req.url)\n    return JSONResponse(['fastapi', 'detacache'])\n\n@deta.cache(expire=10)\ndef setResponse(request: Request):\n    return JSONResponse({'fastapi', 'detacache'})\n\n@deta.cache(expire=10)\ndef intResponse(request: Request):\n    return JSONResponse(10)\n\n@deta.cache(expire=10)\ndef floatResponse(request: Request):\n    return JSONResponse(1.5)\n\n@deta.cache(expire=10)\ndef boolResponse(request: Request):\n    return JSONResponse(True)\n\n@deta.cache(expire=10)\ndef jsonResponse(request: Request):\n    return JSONResponse({\n        \"slideshow\": {\n            \"author\": \"Yours Truly\",\n            \"date\": \"date of publication\",\n            \"slides\": [\n                {\n                    \"title\": \"Wake up to WonderWidgets!\",\n                    \"type\": \"all\"\n                },\n                {\n                    \"items\": [\n                        \"Why \u003cem\u003eWonderWidgets\u003c/em\u003e are great\",\n                        \"Who \u003cem\u003ebuys\u003c/em\u003e WonderWidgets\"\n                    ],\n                    \"title\": \"Overview\",\n                    \"type\": \"all\"\n                }\n            ],\n            \"title\": \"Sample Slide Show\"\n        }\n    }\n)\n\n@deta.cache(expire=30)\ndef htmlResponse(request: Request):\n    return HTMLResponse('''\n        \u003c!DOCTYPE HTML\u003e\n        \u003chtml lang=\"en-US\"\u003e\n        \u003chead\u003e\n            \u003cmeta charset=\"UTF-8\"\u003e\n            \u003ctitle\u003eMy Pimpin Website\u003c/title\u003e\n            \u003cmeta name=\"description\" content=\"A sample website, nothin fancy\"\u003e\n            \u003cmeta http-equiv=\"author\" content=\"Francisco Campos Arias\"\u003e\n            \u003cmeta name=\"keywords\" content=\"html, css, web, design, sample, practice\"\u003e\n        \u003c/head\u003e\n        \u003cbody\u003e\n            \u003cdiv class=\"container\"\u003e\n            \u003cheader\u003e\n                \u003cdiv class=\"header\"\u003e\n                    \u003ch1\u003e{{ data }}\u003c/h1\u003e\n                \u003c/div\u003e\n            \u003c/header\u003e\n                \u003cdiv class=\"main\"\u003e\n                    \u003ch2\u003eThis is just an example with some web content. This is the Hero Unit.\u003c/h2\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"feature\"\u003e\n                    \u003ch3\u003eFeatured Content 1\u003c/h3\u003e\n                    \u003cp\u003elorem ipsum dolor amet lorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum.\u003c/p\u003e\n                \u003c/div\u003e\n                \u003cdiv class=\"feature\"\u003e\n                    \u003ch3\u003eFeatured Content 2\u003c/h3\u003e\n                    \u003cp\u003elorem ipsum dolor amet lorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor ametlorem ipsum dolor.\u003c/p\u003e\n                \u003c/div\u003e\n            \u003cfooter\u003e\n                \u0026copy;2012 Francisco Campos Arias, All Rigts Reserved.\n            \u003c/footer\u003e\n            \u003c/div\u003e\n        \u003c/body\u003e\n        \u003c/html\u003e\n        ''')\n\n@deta.cache(expire=20)\ndef textResponse(request: Request):\n    return PlainTextResponse('detacache')\n\n\nroutes = [\n    Route(\"/text\", endpoint=textResponse),\n    Route(\"/html\", endpoint=htmlResponse),\n    Route(\"/json\", endpoint=jsonResponse),\n    Route(\"/bool\", endpoint=boolResponse),\n    Route(\"/float\", endpoint=floatResponse),\n    Route(\"/int\", endpoint=intResponse),\n    Route(\"/set\", endpoint=setResponse),\n    Route(\"/list\", endpoint=listResponse),\n    Route(\"/tuple\", endpoint=tupleResponse),\n    Route(\"/str\", endpoint=strResponse),\n    Route(\"/dict\", endpoint=dictResponse),\n]\n\napp = Starlette(routes=routes)\n```\n## License\n\nMIT License\n\nCopyright (c) 2021 [Vidya Sagar](https://github.com/vidyasagar1432)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvidyasagar1432%2Fdetacache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvidyasagar1432%2Fdetacache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvidyasagar1432%2Fdetacache/lists"}