[{"data":1,"prerenderedAt":15767},["ShallowReactive",2],{"navigation":3,"/asynchronous-django/asynchronous-support":1016,"/asynchronous-django/asynchronous-support-surround":15762},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":729,"body":1018,"description":1028,"extension":15757,"links":15758,"meta":15759,"navigation":1162,"path":730,"seo":15760,"stem":731,"__hash__":15761},"docs/19.asynchronous-django/07.asynchronous-support.md",{"type":1019,"value":1020,"toc":15740},"minimark",[1021,1025,1029,1033,1038,1041,2193,2197,4794,4798,6232,6236,6240,6243,7133,7137,8791,8795,10266,10270,10274,11627,11631,14004,14008,15733,15736],[1022,1023,729],"h1",{"id":1024},"asynchronous-support",[1026,1027,1028],"p",{},"Django's asynchronous support enables building high-performance applications that can handle concurrent operations efficiently. This chapter covers async views, async safety considerations, and adapter functions that bridge synchronous and asynchronous code.",[1030,1031,713],"h2",{"id":1032},"async-views",[1034,1035,1037],"h3",{"id":1036},"understanding-async-views","Understanding Async Views",[1026,1039,1040],{},"Async views allow Django to handle multiple requests concurrently without blocking threads. They're particularly beneficial for I/O-bound operations like API calls, file operations, or database queries.",[1042,1043,1048],"pre",{"className":1044,"code":1045,"language":1046,"meta":1047,"style":1047},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Basic async view patterns\nimport asyncio\nimport aiohttp\nfrom django.http import JsonResponse\nfrom django.shortcuts import aget_object_or_404\nfrom asgiref.sync import sync_to_async\nfrom .models import Post, User\n\nasync def simple_async_view(request):\n    \"\"\"Basic async view example.\"\"\"\n    # Simulate async I/O operation\n    await asyncio.sleep(0.1)\n    \n    return JsonResponse({\n        'message': 'Hello from async view',\n        'timestamp': asyncio.get_event_loop().time()\n    })\n\nasync def async_database_view(request):\n    \"\"\"Async view with database operations.\"\"\"\n    # Using Django's async ORM methods (Django 4.1+)\n    posts_count = await Post.objects.acount()\n    \n    # Async iteration over queryset\n    recent_posts = []\n    async for post in Post.objects.filter(published=True)[:5]:\n        recent_posts.append({\n            'id': post.id,\n            'title': post.title,\n            'created_at': post.created_at.isoformat()\n        })\n    \n    return JsonResponse({\n        'total_posts': posts_count,\n        'recent_posts': recent_posts\n    })\n\nasync def async_external_api_view(request):\n    \"\"\"Async view calling external APIs.\"\"\"\n    async with aiohttp.ClientSession() as session:\n        # Multiple concurrent API calls\n        tasks = [\n            fetch_weather_data(session, 'New York'),\n            fetch_weather_data(session, 'London'),\n            fetch_weather_data(session, 'Tokyo')\n        ]\n        \n        results = await asyncio.gather(*tasks, return_exceptions=True)\n        \n        weather_data = {}\n        for i, city in enumerate(['New York', 'London', 'Tokyo']):\n            if isinstance(results[i], Exception):\n                weather_data[city] = {'error': str(results[i])}\n            else:\n                weather_data[city] = results[i]\n        \n        return JsonResponse({'weather': weather_data})\n\nasync def fetch_weather_data(session, city):\n    \"\"\"Fetch weather data for a city.\"\"\"\n    url = f\"https://api.weather.com/v1/current?city={city}\"\n    \n    try:\n        async with session.get(url) as response:\n            if response.status == 200:\n                return await response.json()\n            else:\n                return {'error': f'HTTP {response.status}'}\n    except Exception as e:\n        return {'error': str(e)}\n","python","",[1049,1050,1051,1060,1071,1079,1100,1117,1135,1157,1164,1188,1202,1208,1232,1238,1250,1278,1306,1312,1317,1333,1343,1349,1376,1381,1387,1398,1445,1458,1480,1500,1525,1531,1536,1545,1562,1577,1582,1587,1603,1613,1641,1647,1658,1681,1701,1721,1727,1733,1770,1775,1786,1834,1863,1906,1914,1937,1942,1968,1973,1994,2004,2030,2035,2043,2073,2093,2110,2117,2153,2168],"code",{"__ignoreMap":1047},[1052,1053,1056],"span",{"class":1054,"line":1055},"line",1,[1052,1057,1059],{"class":1058},"s9Tkl","# Basic async view patterns\n",[1052,1061,1063,1067],{"class":1054,"line":1062},2,[1052,1064,1066],{"class":1065},"siDh9","import",[1052,1068,1070],{"class":1069},"sftqT"," asyncio\n",[1052,1072,1074,1076],{"class":1054,"line":1073},3,[1052,1075,1066],{"class":1065},[1052,1077,1078],{"class":1069}," aiohttp\n",[1052,1080,1082,1085,1088,1092,1095,1097],{"class":1054,"line":1081},4,[1052,1083,1084],{"class":1065},"from",[1052,1086,1087],{"class":1069}," django",[1052,1089,1091],{"class":1090},"soVBu",".",[1052,1093,1094],{"class":1069},"http ",[1052,1096,1066],{"class":1065},[1052,1098,1099],{"class":1069}," JsonResponse\n",[1052,1101,1103,1105,1107,1109,1112,1114],{"class":1054,"line":1102},5,[1052,1104,1084],{"class":1065},[1052,1106,1087],{"class":1069},[1052,1108,1091],{"class":1090},[1052,1110,1111],{"class":1069},"shortcuts ",[1052,1113,1066],{"class":1065},[1052,1115,1116],{"class":1069}," aget_object_or_404\n",[1052,1118,1120,1122,1125,1127,1130,1132],{"class":1054,"line":1119},6,[1052,1121,1084],{"class":1065},[1052,1123,1124],{"class":1069}," asgiref",[1052,1126,1091],{"class":1090},[1052,1128,1129],{"class":1069},"sync ",[1052,1131,1066],{"class":1065},[1052,1133,1134],{"class":1069}," sync_to_async\n",[1052,1136,1138,1140,1143,1146,1148,1151,1154],{"class":1054,"line":1137},7,[1052,1139,1084],{"class":1065},[1052,1141,1142],{"class":1090}," .",[1052,1144,1145],{"class":1069},"models ",[1052,1147,1066],{"class":1065},[1052,1149,1150],{"class":1069}," Post",[1052,1152,1153],{"class":1090},",",[1052,1155,1156],{"class":1069}," User\n",[1052,1158,1160],{"class":1054,"line":1159},8,[1052,1161,1163],{"emptyLinePlaceholder":1162},true,"\n",[1052,1165,1167,1171,1174,1178,1181,1185],{"class":1054,"line":1166},9,[1052,1168,1170],{"class":1169},"s5Kfy","async",[1052,1172,1173],{"class":1169}," def",[1052,1175,1177],{"class":1176},"sljsM"," simple_async_view",[1052,1179,1180],{"class":1090},"(",[1052,1182,1184],{"class":1183},"sCyAa","request",[1052,1186,1187],{"class":1090},"):\n",[1052,1189,1191,1195,1199],{"class":1054,"line":1190},10,[1052,1192,1194],{"class":1193},"sm7ve","    \"\"\"",[1052,1196,1198],{"class":1197},"sVyVU","Basic async view example.",[1052,1200,1201],{"class":1193},"\"\"\"\n",[1052,1203,1205],{"class":1054,"line":1204},11,[1052,1206,1207],{"class":1058},"    # Simulate async I/O operation\n",[1052,1209,1211,1214,1217,1219,1223,1225,1229],{"class":1054,"line":1210},12,[1052,1212,1213],{"class":1065},"    await",[1052,1215,1216],{"class":1069}," asyncio",[1052,1218,1091],{"class":1090},[1052,1220,1222],{"class":1221},"siWMO","sleep",[1052,1224,1180],{"class":1090},[1052,1226,1228],{"class":1227},"s7CZa","0.1",[1052,1230,1231],{"class":1090},")\n",[1052,1233,1235],{"class":1054,"line":1234},13,[1052,1236,1237],{"class":1069},"    \n",[1052,1239,1241,1244,1247],{"class":1054,"line":1240},14,[1052,1242,1243],{"class":1065},"    return",[1052,1245,1246],{"class":1221}," JsonResponse",[1052,1248,1249],{"class":1090},"({\n",[1052,1251,1253,1257,1261,1264,1267,1270,1273,1275],{"class":1054,"line":1252},15,[1052,1254,1256],{"class":1255},"sbYkP","        '",[1052,1258,1260],{"class":1259},"sTbE_","message",[1052,1262,1263],{"class":1255},"'",[1052,1265,1266],{"class":1090},":",[1052,1268,1269],{"class":1255}," '",[1052,1271,1272],{"class":1259},"Hello from async view",[1052,1274,1263],{"class":1255},[1052,1276,1277],{"class":1090},",\n",[1052,1279,1281,1283,1286,1288,1290,1292,1294,1297,1300,1303],{"class":1054,"line":1280},16,[1052,1282,1256],{"class":1255},[1052,1284,1285],{"class":1259},"timestamp",[1052,1287,1263],{"class":1255},[1052,1289,1266],{"class":1090},[1052,1291,1216],{"class":1221},[1052,1293,1091],{"class":1090},[1052,1295,1296],{"class":1221},"get_event_loop",[1052,1298,1299],{"class":1090},"().",[1052,1301,1302],{"class":1221},"time",[1052,1304,1305],{"class":1090},"()\n",[1052,1307,1309],{"class":1054,"line":1308},17,[1052,1310,1311],{"class":1090},"    })\n",[1052,1313,1315],{"class":1054,"line":1314},18,[1052,1316,1163],{"emptyLinePlaceholder":1162},[1052,1318,1320,1322,1324,1327,1329,1331],{"class":1054,"line":1319},19,[1052,1321,1170],{"class":1169},[1052,1323,1173],{"class":1169},[1052,1325,1326],{"class":1176}," async_database_view",[1052,1328,1180],{"class":1090},[1052,1330,1184],{"class":1183},[1052,1332,1187],{"class":1090},[1052,1334,1336,1338,1341],{"class":1054,"line":1335},20,[1052,1337,1194],{"class":1193},[1052,1339,1340],{"class":1197},"Async view with database operations.",[1052,1342,1201],{"class":1193},[1052,1344,1346],{"class":1054,"line":1345},21,[1052,1347,1348],{"class":1058},"    # Using Django's async ORM methods (Django 4.1+)\n",[1052,1350,1352,1355,1358,1361,1363,1365,1369,1371,1374],{"class":1054,"line":1351},22,[1052,1353,1354],{"class":1069},"    posts_count ",[1052,1356,1357],{"class":1090},"=",[1052,1359,1360],{"class":1065}," await",[1052,1362,1150],{"class":1069},[1052,1364,1091],{"class":1090},[1052,1366,1368],{"class":1367},"sBPpx","objects",[1052,1370,1091],{"class":1090},[1052,1372,1373],{"class":1221},"acount",[1052,1375,1305],{"class":1090},[1052,1377,1379],{"class":1054,"line":1378},23,[1052,1380,1237],{"class":1069},[1052,1382,1384],{"class":1054,"line":1383},24,[1052,1385,1386],{"class":1058},"    # Async iteration over queryset\n",[1052,1388,1390,1393,1395],{"class":1054,"line":1389},25,[1052,1391,1392],{"class":1069},"    recent_posts ",[1052,1394,1357],{"class":1090},[1052,1396,1397],{"class":1090}," []\n",[1052,1399,1401,1404,1407,1410,1413,1415,1417,1419,1421,1424,1426,1430,1432,1436,1439,1442],{"class":1054,"line":1400},26,[1052,1402,1403],{"class":1065},"    async",[1052,1405,1406],{"class":1065}," for",[1052,1408,1409],{"class":1069}," post ",[1052,1411,1412],{"class":1065},"in",[1052,1414,1150],{"class":1069},[1052,1416,1091],{"class":1090},[1052,1418,1368],{"class":1367},[1052,1420,1091],{"class":1090},[1052,1422,1423],{"class":1221},"filter",[1052,1425,1180],{"class":1090},[1052,1427,1429],{"class":1428},"sqOPj","published",[1052,1431,1357],{"class":1090},[1052,1433,1435],{"class":1434},"s8XtY","True",[1052,1437,1438],{"class":1090},")[:",[1052,1440,1441],{"class":1227},"5",[1052,1443,1444],{"class":1090},"]:\n",[1052,1446,1448,1451,1453,1456],{"class":1054,"line":1447},27,[1052,1449,1450],{"class":1069},"        recent_posts",[1052,1452,1091],{"class":1090},[1052,1454,1455],{"class":1221},"append",[1052,1457,1249],{"class":1090},[1052,1459,1461,1464,1467,1469,1471,1474,1476,1478],{"class":1054,"line":1460},28,[1052,1462,1463],{"class":1255},"            '",[1052,1465,1466],{"class":1259},"id",[1052,1468,1263],{"class":1255},[1052,1470,1266],{"class":1090},[1052,1472,1473],{"class":1221}," post",[1052,1475,1091],{"class":1090},[1052,1477,1466],{"class":1367},[1052,1479,1277],{"class":1090},[1052,1481,1483,1485,1488,1490,1492,1494,1496,1498],{"class":1054,"line":1482},29,[1052,1484,1463],{"class":1255},[1052,1486,1487],{"class":1259},"title",[1052,1489,1263],{"class":1255},[1052,1491,1266],{"class":1090},[1052,1493,1473],{"class":1221},[1052,1495,1091],{"class":1090},[1052,1497,1487],{"class":1367},[1052,1499,1277],{"class":1090},[1052,1501,1503,1505,1508,1510,1512,1514,1516,1518,1520,1523],{"class":1054,"line":1502},30,[1052,1504,1463],{"class":1255},[1052,1506,1507],{"class":1259},"created_at",[1052,1509,1263],{"class":1255},[1052,1511,1266],{"class":1090},[1052,1513,1473],{"class":1221},[1052,1515,1091],{"class":1090},[1052,1517,1507],{"class":1367},[1052,1519,1091],{"class":1090},[1052,1521,1522],{"class":1221},"isoformat",[1052,1524,1305],{"class":1090},[1052,1526,1528],{"class":1054,"line":1527},31,[1052,1529,1530],{"class":1090},"        })\n",[1052,1532,1534],{"class":1054,"line":1533},32,[1052,1535,1237],{"class":1069},[1052,1537,1539,1541,1543],{"class":1054,"line":1538},33,[1052,1540,1243],{"class":1065},[1052,1542,1246],{"class":1221},[1052,1544,1249],{"class":1090},[1052,1546,1548,1550,1553,1555,1557,1560],{"class":1054,"line":1547},34,[1052,1549,1256],{"class":1255},[1052,1551,1552],{"class":1259},"total_posts",[1052,1554,1263],{"class":1255},[1052,1556,1266],{"class":1090},[1052,1558,1559],{"class":1221}," posts_count",[1052,1561,1277],{"class":1090},[1052,1563,1565,1567,1570,1572,1574],{"class":1054,"line":1564},35,[1052,1566,1256],{"class":1255},[1052,1568,1569],{"class":1259},"recent_posts",[1052,1571,1263],{"class":1255},[1052,1573,1266],{"class":1090},[1052,1575,1576],{"class":1221}," recent_posts\n",[1052,1578,1580],{"class":1054,"line":1579},36,[1052,1581,1311],{"class":1090},[1052,1583,1585],{"class":1054,"line":1584},37,[1052,1586,1163],{"emptyLinePlaceholder":1162},[1052,1588,1590,1592,1594,1597,1599,1601],{"class":1054,"line":1589},38,[1052,1591,1170],{"class":1169},[1052,1593,1173],{"class":1169},[1052,1595,1596],{"class":1176}," async_external_api_view",[1052,1598,1180],{"class":1090},[1052,1600,1184],{"class":1183},[1052,1602,1187],{"class":1090},[1052,1604,1606,1608,1611],{"class":1054,"line":1605},39,[1052,1607,1194],{"class":1193},[1052,1609,1610],{"class":1197},"Async view calling external APIs.",[1052,1612,1201],{"class":1193},[1052,1614,1616,1618,1621,1624,1626,1629,1632,1635,1638],{"class":1054,"line":1615},40,[1052,1617,1403],{"class":1065},[1052,1619,1620],{"class":1065}," with",[1052,1622,1623],{"class":1069}," aiohttp",[1052,1625,1091],{"class":1090},[1052,1627,1628],{"class":1221},"ClientSession",[1052,1630,1631],{"class":1090},"()",[1052,1633,1634],{"class":1065}," as",[1052,1636,1637],{"class":1069}," session",[1052,1639,1640],{"class":1090},":\n",[1052,1642,1644],{"class":1054,"line":1643},41,[1052,1645,1646],{"class":1058},"        # Multiple concurrent API calls\n",[1052,1648,1650,1653,1655],{"class":1054,"line":1649},42,[1052,1651,1652],{"class":1069},"        tasks ",[1052,1654,1357],{"class":1090},[1052,1656,1657],{"class":1090}," [\n",[1052,1659,1661,1664,1666,1669,1671,1673,1676,1678],{"class":1054,"line":1660},43,[1052,1662,1663],{"class":1221},"            fetch_weather_data",[1052,1665,1180],{"class":1090},[1052,1667,1668],{"class":1221},"session",[1052,1670,1153],{"class":1090},[1052,1672,1269],{"class":1255},[1052,1674,1675],{"class":1259},"New York",[1052,1677,1263],{"class":1255},[1052,1679,1680],{"class":1090},"),\n",[1052,1682,1684,1686,1688,1690,1692,1694,1697,1699],{"class":1054,"line":1683},44,[1052,1685,1663],{"class":1221},[1052,1687,1180],{"class":1090},[1052,1689,1668],{"class":1221},[1052,1691,1153],{"class":1090},[1052,1693,1269],{"class":1255},[1052,1695,1696],{"class":1259},"London",[1052,1698,1263],{"class":1255},[1052,1700,1680],{"class":1090},[1052,1702,1704,1706,1708,1710,1712,1714,1717,1719],{"class":1054,"line":1703},45,[1052,1705,1663],{"class":1221},[1052,1707,1180],{"class":1090},[1052,1709,1668],{"class":1221},[1052,1711,1153],{"class":1090},[1052,1713,1269],{"class":1255},[1052,1715,1716],{"class":1259},"Tokyo",[1052,1718,1263],{"class":1255},[1052,1720,1231],{"class":1090},[1052,1722,1724],{"class":1054,"line":1723},46,[1052,1725,1726],{"class":1090},"        ]\n",[1052,1728,1730],{"class":1054,"line":1729},47,[1052,1731,1732],{"class":1069},"        \n",[1052,1734,1736,1739,1741,1743,1745,1747,1750,1752,1756,1759,1761,1764,1766,1768],{"class":1054,"line":1735},48,[1052,1737,1738],{"class":1069},"        results ",[1052,1740,1357],{"class":1090},[1052,1742,1360],{"class":1065},[1052,1744,1216],{"class":1069},[1052,1746,1091],{"class":1090},[1052,1748,1749],{"class":1221},"gather",[1052,1751,1180],{"class":1090},[1052,1753,1755],{"class":1754},"sVsLi","*",[1052,1757,1758],{"class":1221},"tasks",[1052,1760,1153],{"class":1090},[1052,1762,1763],{"class":1428}," return_exceptions",[1052,1765,1357],{"class":1090},[1052,1767,1435],{"class":1434},[1052,1769,1231],{"class":1090},[1052,1771,1773],{"class":1054,"line":1772},49,[1052,1774,1732],{"class":1069},[1052,1776,1778,1781,1783],{"class":1054,"line":1777},50,[1052,1779,1780],{"class":1069},"        weather_data ",[1052,1782,1357],{"class":1090},[1052,1784,1785],{"class":1090}," {}\n",[1052,1787,1789,1792,1795,1797,1800,1802,1806,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831],{"class":1054,"line":1788},51,[1052,1790,1791],{"class":1065},"        for",[1052,1793,1794],{"class":1069}," i",[1052,1796,1153],{"class":1090},[1052,1798,1799],{"class":1069}," city ",[1052,1801,1412],{"class":1065},[1052,1803,1805],{"class":1804},"sJdAF"," enumerate",[1052,1807,1808],{"class":1090},"([",[1052,1810,1263],{"class":1255},[1052,1812,1675],{"class":1259},[1052,1814,1263],{"class":1255},[1052,1816,1153],{"class":1090},[1052,1818,1269],{"class":1255},[1052,1820,1696],{"class":1259},[1052,1822,1263],{"class":1255},[1052,1824,1153],{"class":1090},[1052,1826,1269],{"class":1255},[1052,1828,1716],{"class":1259},[1052,1830,1263],{"class":1255},[1052,1832,1833],{"class":1090},"]):\n",[1052,1835,1837,1840,1843,1845,1848,1851,1854,1857,1861],{"class":1054,"line":1836},52,[1052,1838,1839],{"class":1065},"            if",[1052,1841,1842],{"class":1804}," isinstance",[1052,1844,1180],{"class":1090},[1052,1846,1847],{"class":1221},"results",[1052,1849,1850],{"class":1090},"[",[1052,1852,1853],{"class":1221},"i",[1052,1855,1856],{"class":1090},"],",[1052,1858,1860],{"class":1859},"sa2tF"," Exception",[1052,1862,1187],{"class":1090},[1052,1864,1866,1869,1871,1874,1877,1880,1883,1885,1888,1890,1892,1895,1897,1899,1901,1903],{"class":1054,"line":1865},53,[1052,1867,1868],{"class":1069},"                weather_data",[1052,1870,1850],{"class":1090},[1052,1872,1873],{"class":1069},"city",[1052,1875,1876],{"class":1090},"]",[1052,1878,1879],{"class":1090}," =",[1052,1881,1882],{"class":1090}," {",[1052,1884,1263],{"class":1255},[1052,1886,1887],{"class":1259},"error",[1052,1889,1263],{"class":1255},[1052,1891,1266],{"class":1090},[1052,1893,1894],{"class":1859}," str",[1052,1896,1180],{"class":1090},[1052,1898,1847],{"class":1221},[1052,1900,1850],{"class":1090},[1052,1902,1853],{"class":1221},[1052,1904,1905],{"class":1090},"])}\n",[1052,1907,1909,1912],{"class":1054,"line":1908},54,[1052,1910,1911],{"class":1065},"            else",[1052,1913,1640],{"class":1090},[1052,1915,1917,1919,1921,1923,1925,1927,1930,1932,1934],{"class":1054,"line":1916},55,[1052,1918,1868],{"class":1069},[1052,1920,1850],{"class":1090},[1052,1922,1873],{"class":1069},[1052,1924,1876],{"class":1090},[1052,1926,1879],{"class":1090},[1052,1928,1929],{"class":1069}," results",[1052,1931,1850],{"class":1090},[1052,1933,1853],{"class":1069},[1052,1935,1936],{"class":1090},"]\n",[1052,1938,1940],{"class":1054,"line":1939},56,[1052,1941,1732],{"class":1069},[1052,1943,1945,1948,1950,1953,1955,1958,1960,1962,1965],{"class":1054,"line":1944},57,[1052,1946,1947],{"class":1065},"        return",[1052,1949,1246],{"class":1221},[1052,1951,1952],{"class":1090},"({",[1052,1954,1263],{"class":1255},[1052,1956,1957],{"class":1259},"weather",[1052,1959,1263],{"class":1255},[1052,1961,1266],{"class":1090},[1052,1963,1964],{"class":1221}," weather_data",[1052,1966,1967],{"class":1090},"})\n",[1052,1969,1971],{"class":1054,"line":1970},58,[1052,1972,1163],{"emptyLinePlaceholder":1162},[1052,1974,1976,1978,1980,1983,1985,1987,1989,1992],{"class":1054,"line":1975},59,[1052,1977,1170],{"class":1169},[1052,1979,1173],{"class":1169},[1052,1981,1982],{"class":1176}," fetch_weather_data",[1052,1984,1180],{"class":1090},[1052,1986,1668],{"class":1183},[1052,1988,1153],{"class":1090},[1052,1990,1991],{"class":1183}," city",[1052,1993,1187],{"class":1090},[1052,1995,1997,1999,2002],{"class":1054,"line":1996},60,[1052,1998,1194],{"class":1193},[1052,2000,2001],{"class":1197},"Fetch weather data for a city.",[1052,2003,1201],{"class":1193},[1052,2005,2007,2010,2012,2015,2018,2022,2024,2027],{"class":1054,"line":2006},61,[1052,2008,2009],{"class":1069},"    url ",[1052,2011,1357],{"class":1090},[1052,2013,2014],{"class":1169}," f",[1052,2016,2017],{"class":1259},"\"https://api.weather.com/v1/current?city=",[1052,2019,2021],{"class":2020},"s3h35","{",[1052,2023,1873],{"class":1069},[1052,2025,2026],{"class":2020},"}",[1052,2028,2029],{"class":1259},"\"\n",[1052,2031,2033],{"class":1054,"line":2032},62,[1052,2034,1237],{"class":1069},[1052,2036,2038,2041],{"class":1054,"line":2037},63,[1052,2039,2040],{"class":1065},"    try",[1052,2042,1640],{"class":1090},[1052,2044,2046,2049,2051,2053,2055,2058,2060,2063,2066,2068,2071],{"class":1054,"line":2045},64,[1052,2047,2048],{"class":1065},"        async",[1052,2050,1620],{"class":1065},[1052,2052,1637],{"class":1069},[1052,2054,1091],{"class":1090},[1052,2056,2057],{"class":1221},"get",[1052,2059,1180],{"class":1090},[1052,2061,2062],{"class":1221},"url",[1052,2064,2065],{"class":1090},")",[1052,2067,1634],{"class":1065},[1052,2069,2070],{"class":1069}," response",[1052,2072,1640],{"class":1090},[1052,2074,2076,2078,2080,2082,2085,2088,2091],{"class":1054,"line":2075},65,[1052,2077,1839],{"class":1065},[1052,2079,2070],{"class":1069},[1052,2081,1091],{"class":1090},[1052,2083,2084],{"class":1367},"status",[1052,2086,2087],{"class":1754}," ==",[1052,2089,2090],{"class":1227}," 200",[1052,2092,1640],{"class":1090},[1052,2094,2096,2099,2101,2103,2105,2108],{"class":1054,"line":2095},66,[1052,2097,2098],{"class":1065},"                return",[1052,2100,1360],{"class":1065},[1052,2102,2070],{"class":1069},[1052,2104,1091],{"class":1090},[1052,2106,2107],{"class":1221},"json",[1052,2109,1305],{"class":1090},[1052,2111,2113,2115],{"class":1054,"line":2112},67,[1052,2114,1911],{"class":1065},[1052,2116,1640],{"class":1090},[1052,2118,2120,2122,2124,2126,2128,2130,2132,2134,2137,2139,2142,2144,2146,2148,2150],{"class":1054,"line":2119},68,[1052,2121,2098],{"class":1065},[1052,2123,1882],{"class":1090},[1052,2125,1263],{"class":1255},[1052,2127,1887],{"class":1259},[1052,2129,1263],{"class":1255},[1052,2131,1266],{"class":1090},[1052,2133,2014],{"class":1169},[1052,2135,2136],{"class":1259},"'HTTP ",[1052,2138,2021],{"class":2020},[1052,2140,2141],{"class":1069},"response",[1052,2143,1091],{"class":1090},[1052,2145,2084],{"class":1367},[1052,2147,2026],{"class":2020},[1052,2149,1263],{"class":1259},[1052,2151,2152],{"class":1090},"}\n",[1052,2154,2156,2159,2161,2163,2166],{"class":1054,"line":2155},69,[1052,2157,2158],{"class":1065},"    except",[1052,2160,1860],{"class":1859},[1052,2162,1634],{"class":1065},[1052,2164,2165],{"class":1069}," e",[1052,2167,1640],{"class":1090},[1052,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2190],{"class":1054,"line":2170},70,[1052,2172,1947],{"class":1065},[1052,2174,1882],{"class":1090},[1052,2176,1263],{"class":1255},[1052,2178,1887],{"class":1259},[1052,2180,1263],{"class":1255},[1052,2182,1266],{"class":1090},[1052,2184,1894],{"class":1859},[1052,2186,1180],{"class":1090},[1052,2188,2189],{"class":1221},"e",[1052,2191,2192],{"class":1090},")}\n",[1034,2194,2196],{"id":2195},"advanced-async-view-patterns","Advanced Async View Patterns",[1042,2198,2200],{"className":1044,"code":2199,"language":1046,"meta":1047,"style":1047},"# Advanced async view implementations\nfrom django.views import View\nfrom django.utils.decorators import method_decorator\nfrom django.views.decorators.csrf import csrf_exempt\nimport json\n\nclass AsyncBaseView(View):\n    \"\"\"Base class for async views with proper dispatch.\"\"\"\n    \n    async def dispatch(self, request, *args, **kwargs):\n        \"\"\"Async dispatch method.\"\"\"\n        # Get the handler method\n        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)\n        \n        # Check if handler is async\n        if asyncio.iscoroutinefunction(handler):\n            return await handler(request, *args, **kwargs)\n        else:\n            # Handle sync methods in async context\n            return await sync_to_async(handler)(request, *args, **kwargs)\n\nclass AsyncAPIView(AsyncBaseView):\n    \"\"\"Generic async API view.\"\"\"\n    \n    async def get(self, request, *args, **kwargs):\n        \"\"\"Handle GET requests asynchronously.\"\"\"\n        try:\n            data = await self.get_data(request, *args, **kwargs)\n            return JsonResponse(data)\n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n    \n    async def post(self, request, *args, **kwargs):\n        \"\"\"Handle POST requests asynchronously.\"\"\"\n        try:\n            # Read request body asynchronously\n            body = await request.aread()\n            data = json.loads(body) if body else {}\n            \n            result = await self.create_data(request, data, *args, **kwargs)\n            return JsonResponse(result, status=201)\n        \n        except json.JSONDecodeError:\n            return JsonResponse({'error': 'Invalid JSON'}, status=400)\n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n    \n    async def put(self, request, *args, **kwargs):\n        \"\"\"Handle PUT requests asynchronously.\"\"\"\n        try:\n            body = await request.aread()\n            data = json.loads(body) if body else {}\n            \n            result = await self.update_data(request, data, *args, **kwargs)\n            return JsonResponse(result)\n        \n        except json.JSONDecodeError:\n            return JsonResponse({'error': 'Invalid JSON'}, status=400)\n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n    \n    async def delete(self, request, *args, **kwargs):\n        \"\"\"Handle DELETE requests asynchronously.\"\"\"\n        try:\n            await self.delete_data(request, *args, **kwargs)\n            return JsonResponse({'message': 'Deleted successfully'}, status=204)\n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n    \n    # Override these methods in subclasses\n    async def get_data(self, request, *args, **kwargs):\n        \"\"\"Override to implement GET logic.\"\"\"\n        raise NotImplementedError\n    \n    async def create_data(self, request, data, *args, **kwargs):\n        \"\"\"Override to implement POST logic.\"\"\"\n        raise NotImplementedError\n    \n    async def update_data(self, request, data, *args, **kwargs):\n        \"\"\"Override to implement PUT logic.\"\"\"\n        raise NotImplementedError\n    \n    async def delete_data(self, request, *args, **kwargs):\n        \"\"\"Override to implement DELETE logic.\"\"\"\n        raise NotImplementedError\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass PostAPIView(AsyncAPIView):\n    \"\"\"Async API view for posts.\"\"\"\n    \n    async def get_data(self, request, *args, **kwargs):\n        \"\"\"Get posts data.\"\"\"\n        post_id = kwargs.get('post_id')\n        \n        if post_id:\n            # Get single post\n            post = await aget_object_or_404(Post, id=post_id, published=True)\n            return {\n                'id': post.id,\n                'title': post.title,\n                'content': post.content,\n                'created_at': post.created_at.isoformat()\n            }\n        else:\n            # Get list of posts\n            posts = []\n            async for post in Post.objects.filter(published=True)[:10]:\n                posts.append({\n                    'id': post.id,\n                    'title': post.title,\n                    'created_at': post.created_at.isoformat()\n                })\n            \n            return {'posts': posts}\n    \n    async def create_data(self, request, data, *args, **kwargs):\n        \"\"\"Create new post.\"\"\"\n        # Use sync_to_async for complex database operations\n        @sync_to_async\n        def create_post():\n            return Post.objects.create(\n                title=data['title'],\n                content=data['content'],\n                author_id=data['author_id'],\n                published=data.get('published', False)\n            )\n        \n        post = await create_post()\n        \n        return {\n            'id': post.id,\n            'title': post.title,\n            'message': 'Post created successfully'\n        }\n    \n    async def update_data(self, request, data, *args, **kwargs):\n        \"\"\"Update existing post.\"\"\"\n        post_id = kwargs.get('post_id')\n        \n        @sync_to_async\n        def update_post():\n            post = Post.objects.get(id=post_id)\n            post.title = data.get('title', post.title)\n            post.content = data.get('content', post.content)\n            post.published = data.get('published', post.published)\n            post.save()\n            return post\n        \n        post = await update_post()\n        \n        return {\n            'id': post.id,\n            'title': post.title,\n            'message': 'Post updated successfully'\n        }\n    \n    async def delete_data(self, request, *args, **kwargs):\n        \"\"\"Delete post.\"\"\"\n        post_id = kwargs.get('post_id')\n        \n        @sync_to_async\n        def delete_post():\n            post = Post.objects.get(id=post_id)\n            post.delete()\n        \n        await delete_post()\n",[1049,2201,2202,2207,2223,2244,2270,2277,2281,2298,2307,2311,2349,2359,2364,2406,2410,2415,2434,2462,2469,2474,2506,2510,2524,2533,2537,2568,2577,2584,2618,2631,2644,2679,2683,2713,2722,2728,2733,2751,2783,2788,2827,2849,2853,2866,2901,2913,2945,2949,2980,2989,2995,3011,3037,3041,3078,3090,3094,3106,3138,3150,3182,3186,3217,3226,3232,3262,3296,3308,3340,3344,3349,3381,3391,3400,3405,3441,3451,3458,3463,3499,3509,3516,3521,3553,3563,3570,3575,3605,3620,3630,3635,3666,3676,3702,3707,3717,3723,3761,3769,3789,3808,3828,3851,3857,3864,3870,3880,3917,3929,3949,3968,3991,3997,4002,4023,4028,4063,4073,4079,4088,4100,4119,4140,4160,4181,4210,4216,4221,4235,4240,4247,4266,4285,4304,4310,4315,4350,4360,4383,4388,4395,4405,4432,4468,4503,4538,4550,4558,4563,4576,4581,4588,4607,4626,4644,4649,4654,4685,4695,4718,4723,4730,4740,4767,4779,4784],{"__ignoreMap":1047},[1052,2203,2204],{"class":1054,"line":1055},[1052,2205,2206],{"class":1058},"# Advanced async view implementations\n",[1052,2208,2209,2211,2213,2215,2218,2220],{"class":1054,"line":1062},[1052,2210,1084],{"class":1065},[1052,2212,1087],{"class":1069},[1052,2214,1091],{"class":1090},[1052,2216,2217],{"class":1069},"views ",[1052,2219,1066],{"class":1065},[1052,2221,2222],{"class":1069}," View\n",[1052,2224,2225,2227,2229,2231,2234,2236,2239,2241],{"class":1054,"line":1073},[1052,2226,1084],{"class":1065},[1052,2228,1087],{"class":1069},[1052,2230,1091],{"class":1090},[1052,2232,2233],{"class":1069},"utils",[1052,2235,1091],{"class":1090},[1052,2237,2238],{"class":1069},"decorators ",[1052,2240,1066],{"class":1065},[1052,2242,2243],{"class":1069}," method_decorator\n",[1052,2245,2246,2248,2250,2252,2255,2257,2260,2262,2265,2267],{"class":1054,"line":1081},[1052,2247,1084],{"class":1065},[1052,2249,1087],{"class":1069},[1052,2251,1091],{"class":1090},[1052,2253,2254],{"class":1069},"views",[1052,2256,1091],{"class":1090},[1052,2258,2259],{"class":1069},"decorators",[1052,2261,1091],{"class":1090},[1052,2263,2264],{"class":1069},"csrf ",[1052,2266,1066],{"class":1065},[1052,2268,2269],{"class":1069}," csrf_exempt\n",[1052,2271,2272,2274],{"class":1054,"line":1102},[1052,2273,1066],{"class":1065},[1052,2275,2276],{"class":1069}," json\n",[1052,2278,2279],{"class":1054,"line":1119},[1052,2280,1163],{"emptyLinePlaceholder":1162},[1052,2282,2283,2286,2290,2292,2296],{"class":1054,"line":1137},[1052,2284,2285],{"class":1169},"class",[1052,2287,2289],{"class":2288},"sD-vU"," AsyncBaseView",[1052,2291,1180],{"class":1090},[1052,2293,2295],{"class":2294},"sYn-s","View",[1052,2297,1187],{"class":1090},[1052,2299,2300,2302,2305],{"class":1054,"line":1159},[1052,2301,1194],{"class":1193},[1052,2303,2304],{"class":1197},"Base class for async views with proper dispatch.",[1052,2306,1201],{"class":1193},[1052,2308,2309],{"class":1054,"line":1166},[1052,2310,1237],{"class":1069},[1052,2312,2313,2315,2317,2320,2322,2326,2328,2331,2333,2336,2339,2341,2344,2347],{"class":1054,"line":1190},[1052,2314,1403],{"class":1169},[1052,2316,1173],{"class":1169},[1052,2318,2319],{"class":1176}," dispatch",[1052,2321,1180],{"class":1090},[1052,2323,2325],{"class":2324},"sRjD_","self",[1052,2327,1153],{"class":1090},[1052,2329,2330],{"class":1183}," request",[1052,2332,1153],{"class":1090},[1052,2334,2335],{"class":1754}," *",[1052,2337,2338],{"class":1183},"args",[1052,2340,1153],{"class":1090},[1052,2342,2343],{"class":1754}," **",[1052,2345,2346],{"class":1183},"kwargs",[1052,2348,1187],{"class":1090},[1052,2350,2351,2354,2357],{"class":1054,"line":1204},[1052,2352,2353],{"class":1193},"        \"\"\"",[1052,2355,2356],{"class":1197},"Async dispatch method.",[1052,2358,1201],{"class":1193},[1052,2360,2361],{"class":1054,"line":1210},[1052,2362,2363],{"class":1058},"        # Get the handler method\n",[1052,2365,2366,2369,2371,2374,2376,2379,2381,2383,2385,2388,2390,2393,2396,2399,2401,2404],{"class":1054,"line":1234},[1052,2367,2368],{"class":1069},"        handler ",[1052,2370,1357],{"class":1090},[1052,2372,2373],{"class":1804}," getattr",[1052,2375,1180],{"class":1090},[1052,2377,2325],{"class":2378},"se3Ec",[1052,2380,1153],{"class":1090},[1052,2382,2330],{"class":1221},[1052,2384,1091],{"class":1090},[1052,2386,2387],{"class":1367},"method",[1052,2389,1091],{"class":1090},[1052,2391,2392],{"class":1221},"lower",[1052,2394,2395],{"class":1090},"(),",[1052,2397,2398],{"class":2378}," self",[1052,2400,1091],{"class":1090},[1052,2402,2403],{"class":1367},"http_method_not_allowed",[1052,2405,1231],{"class":1090},[1052,2407,2408],{"class":1054,"line":1240},[1052,2409,1732],{"class":1069},[1052,2411,2412],{"class":1054,"line":1252},[1052,2413,2414],{"class":1058},"        # Check if handler is async\n",[1052,2416,2417,2420,2422,2424,2427,2429,2432],{"class":1054,"line":1280},[1052,2418,2419],{"class":1065},"        if",[1052,2421,1216],{"class":1069},[1052,2423,1091],{"class":1090},[1052,2425,2426],{"class":1221},"iscoroutinefunction",[1052,2428,1180],{"class":1090},[1052,2430,2431],{"class":1221},"handler",[1052,2433,1187],{"class":1090},[1052,2435,2436,2439,2441,2444,2446,2448,2450,2452,2454,2456,2458,2460],{"class":1054,"line":1308},[1052,2437,2438],{"class":1065},"            return",[1052,2440,1360],{"class":1065},[1052,2442,2443],{"class":1221}," handler",[1052,2445,1180],{"class":1090},[1052,2447,1184],{"class":1221},[1052,2449,1153],{"class":1090},[1052,2451,2335],{"class":1754},[1052,2453,2338],{"class":1221},[1052,2455,1153],{"class":1090},[1052,2457,2343],{"class":1754},[1052,2459,2346],{"class":1221},[1052,2461,1231],{"class":1090},[1052,2463,2464,2467],{"class":1054,"line":1314},[1052,2465,2466],{"class":1065},"        else",[1052,2468,1640],{"class":1090},[1052,2470,2471],{"class":1054,"line":1319},[1052,2472,2473],{"class":1058},"            # Handle sync methods in async context\n",[1052,2475,2476,2478,2480,2483,2485,2487,2490,2492,2494,2496,2498,2500,2502,2504],{"class":1054,"line":1335},[1052,2477,2438],{"class":1065},[1052,2479,1360],{"class":1065},[1052,2481,2482],{"class":1221}," sync_to_async",[1052,2484,1180],{"class":1090},[1052,2486,2431],{"class":1221},[1052,2488,2489],{"class":1090},")(",[1052,2491,1184],{"class":1221},[1052,2493,1153],{"class":1090},[1052,2495,2335],{"class":1754},[1052,2497,2338],{"class":1221},[1052,2499,1153],{"class":1090},[1052,2501,2343],{"class":1754},[1052,2503,2346],{"class":1221},[1052,2505,1231],{"class":1090},[1052,2507,2508],{"class":1054,"line":1345},[1052,2509,1163],{"emptyLinePlaceholder":1162},[1052,2511,2512,2514,2517,2519,2522],{"class":1054,"line":1351},[1052,2513,2285],{"class":1169},[1052,2515,2516],{"class":2288}," AsyncAPIView",[1052,2518,1180],{"class":1090},[1052,2520,2521],{"class":2294},"AsyncBaseView",[1052,2523,1187],{"class":1090},[1052,2525,2526,2528,2531],{"class":1054,"line":1378},[1052,2527,1194],{"class":1193},[1052,2529,2530],{"class":1197},"Generic async API view.",[1052,2532,1201],{"class":1193},[1052,2534,2535],{"class":1054,"line":1383},[1052,2536,1237],{"class":1069},[1052,2538,2539,2541,2543,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566],{"class":1054,"line":1389},[1052,2540,1403],{"class":1169},[1052,2542,1173],{"class":1169},[1052,2544,2545],{"class":1176}," get",[1052,2547,1180],{"class":1090},[1052,2549,2325],{"class":2324},[1052,2551,1153],{"class":1090},[1052,2553,2330],{"class":1183},[1052,2555,1153],{"class":1090},[1052,2557,2335],{"class":1754},[1052,2559,2338],{"class":1183},[1052,2561,1153],{"class":1090},[1052,2563,2343],{"class":1754},[1052,2565,2346],{"class":1183},[1052,2567,1187],{"class":1090},[1052,2569,2570,2572,2575],{"class":1054,"line":1400},[1052,2571,2353],{"class":1193},[1052,2573,2574],{"class":1197},"Handle GET requests asynchronously.",[1052,2576,1201],{"class":1193},[1052,2578,2579,2582],{"class":1054,"line":1447},[1052,2580,2581],{"class":1065},"        try",[1052,2583,1640],{"class":1090},[1052,2585,2586,2589,2591,2593,2595,2597,2600,2602,2604,2606,2608,2610,2612,2614,2616],{"class":1054,"line":1460},[1052,2587,2588],{"class":1069},"            data ",[1052,2590,1357],{"class":1090},[1052,2592,1360],{"class":1065},[1052,2594,2398],{"class":2378},[1052,2596,1091],{"class":1090},[1052,2598,2599],{"class":1221},"get_data",[1052,2601,1180],{"class":1090},[1052,2603,1184],{"class":1221},[1052,2605,1153],{"class":1090},[1052,2607,2335],{"class":1754},[1052,2609,2338],{"class":1221},[1052,2611,1153],{"class":1090},[1052,2613,2343],{"class":1754},[1052,2615,2346],{"class":1221},[1052,2617,1231],{"class":1090},[1052,2619,2620,2622,2624,2626,2629],{"class":1054,"line":1482},[1052,2621,2438],{"class":1065},[1052,2623,1246],{"class":1221},[1052,2625,1180],{"class":1090},[1052,2627,2628],{"class":1221},"data",[1052,2630,1231],{"class":1090},[1052,2632,2633,2636,2638,2640,2642],{"class":1054,"line":1502},[1052,2634,2635],{"class":1065},"        except",[1052,2637,1860],{"class":1859},[1052,2639,1634],{"class":1065},[1052,2641,2165],{"class":1069},[1052,2643,1640],{"class":1090},[1052,2645,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2669,2672,2674,2677],{"class":1054,"line":1527},[1052,2647,2438],{"class":1065},[1052,2649,1246],{"class":1221},[1052,2651,1952],{"class":1090},[1052,2653,1263],{"class":1255},[1052,2655,1887],{"class":1259},[1052,2657,1263],{"class":1255},[1052,2659,1266],{"class":1090},[1052,2661,1894],{"class":1859},[1052,2663,1180],{"class":1090},[1052,2665,2189],{"class":1221},[1052,2667,2668],{"class":1090},")},",[1052,2670,2671],{"class":1428}," status",[1052,2673,1357],{"class":1090},[1052,2675,2676],{"class":1227},"500",[1052,2678,1231],{"class":1090},[1052,2680,2681],{"class":1054,"line":1533},[1052,2682,1237],{"class":1069},[1052,2684,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711],{"class":1054,"line":1538},[1052,2686,1403],{"class":1169},[1052,2688,1173],{"class":1169},[1052,2690,1473],{"class":1176},[1052,2692,1180],{"class":1090},[1052,2694,2325],{"class":2324},[1052,2696,1153],{"class":1090},[1052,2698,2330],{"class":1183},[1052,2700,1153],{"class":1090},[1052,2702,2335],{"class":1754},[1052,2704,2338],{"class":1183},[1052,2706,1153],{"class":1090},[1052,2708,2343],{"class":1754},[1052,2710,2346],{"class":1183},[1052,2712,1187],{"class":1090},[1052,2714,2715,2717,2720],{"class":1054,"line":1547},[1052,2716,2353],{"class":1193},[1052,2718,2719],{"class":1197},"Handle POST requests asynchronously.",[1052,2721,1201],{"class":1193},[1052,2723,2724,2726],{"class":1054,"line":1564},[1052,2725,2581],{"class":1065},[1052,2727,1640],{"class":1090},[1052,2729,2730],{"class":1054,"line":1579},[1052,2731,2732],{"class":1058},"            # Read request body asynchronously\n",[1052,2734,2735,2738,2740,2742,2744,2746,2749],{"class":1054,"line":1584},[1052,2736,2737],{"class":1069},"            body ",[1052,2739,1357],{"class":1090},[1052,2741,1360],{"class":1065},[1052,2743,2330],{"class":1069},[1052,2745,1091],{"class":1090},[1052,2747,2748],{"class":1221},"aread",[1052,2750,1305],{"class":1090},[1052,2752,2753,2755,2757,2760,2762,2765,2767,2770,2772,2775,2778,2781],{"class":1054,"line":1589},[1052,2754,2588],{"class":1069},[1052,2756,1357],{"class":1090},[1052,2758,2759],{"class":1069}," json",[1052,2761,1091],{"class":1090},[1052,2763,2764],{"class":1221},"loads",[1052,2766,1180],{"class":1090},[1052,2768,2769],{"class":1221},"body",[1052,2771,2065],{"class":1090},[1052,2773,2774],{"class":1065}," if",[1052,2776,2777],{"class":1069}," body ",[1052,2779,2780],{"class":1065},"else",[1052,2782,1785],{"class":1090},[1052,2784,2785],{"class":1054,"line":1605},[1052,2786,2787],{"class":1069},"            \n",[1052,2789,2790,2793,2795,2797,2799,2801,2804,2806,2808,2810,2813,2815,2817,2819,2821,2823,2825],{"class":1054,"line":1615},[1052,2791,2792],{"class":1069},"            result ",[1052,2794,1357],{"class":1090},[1052,2796,1360],{"class":1065},[1052,2798,2398],{"class":2378},[1052,2800,1091],{"class":1090},[1052,2802,2803],{"class":1221},"create_data",[1052,2805,1180],{"class":1090},[1052,2807,1184],{"class":1221},[1052,2809,1153],{"class":1090},[1052,2811,2812],{"class":1221}," data",[1052,2814,1153],{"class":1090},[1052,2816,2335],{"class":1754},[1052,2818,2338],{"class":1221},[1052,2820,1153],{"class":1090},[1052,2822,2343],{"class":1754},[1052,2824,2346],{"class":1221},[1052,2826,1231],{"class":1090},[1052,2828,2829,2831,2833,2835,2838,2840,2842,2844,2847],{"class":1054,"line":1643},[1052,2830,2438],{"class":1065},[1052,2832,1246],{"class":1221},[1052,2834,1180],{"class":1090},[1052,2836,2837],{"class":1221},"result",[1052,2839,1153],{"class":1090},[1052,2841,2671],{"class":1428},[1052,2843,1357],{"class":1090},[1052,2845,2846],{"class":1227},"201",[1052,2848,1231],{"class":1090},[1052,2850,2851],{"class":1054,"line":1649},[1052,2852,1732],{"class":1069},[1052,2854,2855,2857,2859,2861,2864],{"class":1054,"line":1660},[1052,2856,2635],{"class":1065},[1052,2858,2759],{"class":1069},[1052,2860,1091],{"class":1090},[1052,2862,2863],{"class":1367},"JSONDecodeError",[1052,2865,1640],{"class":1090},[1052,2867,2868,2870,2872,2874,2876,2878,2880,2882,2884,2887,2889,2892,2894,2896,2899],{"class":1054,"line":1683},[1052,2869,2438],{"class":1065},[1052,2871,1246],{"class":1221},[1052,2873,1952],{"class":1090},[1052,2875,1263],{"class":1255},[1052,2877,1887],{"class":1259},[1052,2879,1263],{"class":1255},[1052,2881,1266],{"class":1090},[1052,2883,1269],{"class":1255},[1052,2885,2886],{"class":1259},"Invalid JSON",[1052,2888,1263],{"class":1255},[1052,2890,2891],{"class":1090},"},",[1052,2893,2671],{"class":1428},[1052,2895,1357],{"class":1090},[1052,2897,2898],{"class":1227},"400",[1052,2900,1231],{"class":1090},[1052,2902,2903,2905,2907,2909,2911],{"class":1054,"line":1703},[1052,2904,2635],{"class":1065},[1052,2906,1860],{"class":1859},[1052,2908,1634],{"class":1065},[1052,2910,2165],{"class":1069},[1052,2912,1640],{"class":1090},[1052,2914,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943],{"class":1054,"line":1723},[1052,2916,2438],{"class":1065},[1052,2918,1246],{"class":1221},[1052,2920,1952],{"class":1090},[1052,2922,1263],{"class":1255},[1052,2924,1887],{"class":1259},[1052,2926,1263],{"class":1255},[1052,2928,1266],{"class":1090},[1052,2930,1894],{"class":1859},[1052,2932,1180],{"class":1090},[1052,2934,2189],{"class":1221},[1052,2936,2668],{"class":1090},[1052,2938,2671],{"class":1428},[1052,2940,1357],{"class":1090},[1052,2942,2676],{"class":1227},[1052,2944,1231],{"class":1090},[1052,2946,2947],{"class":1054,"line":1729},[1052,2948,1237],{"class":1069},[1052,2950,2951,2953,2955,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978],{"class":1054,"line":1735},[1052,2952,1403],{"class":1169},[1052,2954,1173],{"class":1169},[1052,2956,2957],{"class":1176}," put",[1052,2959,1180],{"class":1090},[1052,2961,2325],{"class":2324},[1052,2963,1153],{"class":1090},[1052,2965,2330],{"class":1183},[1052,2967,1153],{"class":1090},[1052,2969,2335],{"class":1754},[1052,2971,2338],{"class":1183},[1052,2973,1153],{"class":1090},[1052,2975,2343],{"class":1754},[1052,2977,2346],{"class":1183},[1052,2979,1187],{"class":1090},[1052,2981,2982,2984,2987],{"class":1054,"line":1772},[1052,2983,2353],{"class":1193},[1052,2985,2986],{"class":1197},"Handle PUT requests asynchronously.",[1052,2988,1201],{"class":1193},[1052,2990,2991,2993],{"class":1054,"line":1777},[1052,2992,2581],{"class":1065},[1052,2994,1640],{"class":1090},[1052,2996,2997,2999,3001,3003,3005,3007,3009],{"class":1054,"line":1788},[1052,2998,2737],{"class":1069},[1052,3000,1357],{"class":1090},[1052,3002,1360],{"class":1065},[1052,3004,2330],{"class":1069},[1052,3006,1091],{"class":1090},[1052,3008,2748],{"class":1221},[1052,3010,1305],{"class":1090},[1052,3012,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035],{"class":1054,"line":1836},[1052,3014,2588],{"class":1069},[1052,3016,1357],{"class":1090},[1052,3018,2759],{"class":1069},[1052,3020,1091],{"class":1090},[1052,3022,2764],{"class":1221},[1052,3024,1180],{"class":1090},[1052,3026,2769],{"class":1221},[1052,3028,2065],{"class":1090},[1052,3030,2774],{"class":1065},[1052,3032,2777],{"class":1069},[1052,3034,2780],{"class":1065},[1052,3036,1785],{"class":1090},[1052,3038,3039],{"class":1054,"line":1865},[1052,3040,2787],{"class":1069},[1052,3042,3043,3045,3047,3049,3051,3053,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076],{"class":1054,"line":1908},[1052,3044,2792],{"class":1069},[1052,3046,1357],{"class":1090},[1052,3048,1360],{"class":1065},[1052,3050,2398],{"class":2378},[1052,3052,1091],{"class":1090},[1052,3054,3055],{"class":1221},"update_data",[1052,3057,1180],{"class":1090},[1052,3059,1184],{"class":1221},[1052,3061,1153],{"class":1090},[1052,3063,2812],{"class":1221},[1052,3065,1153],{"class":1090},[1052,3067,2335],{"class":1754},[1052,3069,2338],{"class":1221},[1052,3071,1153],{"class":1090},[1052,3073,2343],{"class":1754},[1052,3075,2346],{"class":1221},[1052,3077,1231],{"class":1090},[1052,3079,3080,3082,3084,3086,3088],{"class":1054,"line":1916},[1052,3081,2438],{"class":1065},[1052,3083,1246],{"class":1221},[1052,3085,1180],{"class":1090},[1052,3087,2837],{"class":1221},[1052,3089,1231],{"class":1090},[1052,3091,3092],{"class":1054,"line":1939},[1052,3093,1732],{"class":1069},[1052,3095,3096,3098,3100,3102,3104],{"class":1054,"line":1944},[1052,3097,2635],{"class":1065},[1052,3099,2759],{"class":1069},[1052,3101,1091],{"class":1090},[1052,3103,2863],{"class":1367},[1052,3105,1640],{"class":1090},[1052,3107,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136],{"class":1054,"line":1970},[1052,3109,2438],{"class":1065},[1052,3111,1246],{"class":1221},[1052,3113,1952],{"class":1090},[1052,3115,1263],{"class":1255},[1052,3117,1887],{"class":1259},[1052,3119,1263],{"class":1255},[1052,3121,1266],{"class":1090},[1052,3123,1269],{"class":1255},[1052,3125,2886],{"class":1259},[1052,3127,1263],{"class":1255},[1052,3129,2891],{"class":1090},[1052,3131,2671],{"class":1428},[1052,3133,1357],{"class":1090},[1052,3135,2898],{"class":1227},[1052,3137,1231],{"class":1090},[1052,3139,3140,3142,3144,3146,3148],{"class":1054,"line":1975},[1052,3141,2635],{"class":1065},[1052,3143,1860],{"class":1859},[1052,3145,1634],{"class":1065},[1052,3147,2165],{"class":1069},[1052,3149,1640],{"class":1090},[1052,3151,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180],{"class":1054,"line":1996},[1052,3153,2438],{"class":1065},[1052,3155,1246],{"class":1221},[1052,3157,1952],{"class":1090},[1052,3159,1263],{"class":1255},[1052,3161,1887],{"class":1259},[1052,3163,1263],{"class":1255},[1052,3165,1266],{"class":1090},[1052,3167,1894],{"class":1859},[1052,3169,1180],{"class":1090},[1052,3171,2189],{"class":1221},[1052,3173,2668],{"class":1090},[1052,3175,2671],{"class":1428},[1052,3177,1357],{"class":1090},[1052,3179,2676],{"class":1227},[1052,3181,1231],{"class":1090},[1052,3183,3184],{"class":1054,"line":2006},[1052,3185,1237],{"class":1069},[1052,3187,3188,3190,3192,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215],{"class":1054,"line":2032},[1052,3189,1403],{"class":1169},[1052,3191,1173],{"class":1169},[1052,3193,3194],{"class":1176}," delete",[1052,3196,1180],{"class":1090},[1052,3198,2325],{"class":2324},[1052,3200,1153],{"class":1090},[1052,3202,2330],{"class":1183},[1052,3204,1153],{"class":1090},[1052,3206,2335],{"class":1754},[1052,3208,2338],{"class":1183},[1052,3210,1153],{"class":1090},[1052,3212,2343],{"class":1754},[1052,3214,2346],{"class":1183},[1052,3216,1187],{"class":1090},[1052,3218,3219,3221,3224],{"class":1054,"line":2037},[1052,3220,2353],{"class":1193},[1052,3222,3223],{"class":1197},"Handle DELETE requests asynchronously.",[1052,3225,1201],{"class":1193},[1052,3227,3228,3230],{"class":1054,"line":2045},[1052,3229,2581],{"class":1065},[1052,3231,1640],{"class":1090},[1052,3233,3234,3237,3239,3241,3244,3246,3248,3250,3252,3254,3256,3258,3260],{"class":1054,"line":2075},[1052,3235,3236],{"class":1065},"            await",[1052,3238,2398],{"class":2378},[1052,3240,1091],{"class":1090},[1052,3242,3243],{"class":1221},"delete_data",[1052,3245,1180],{"class":1090},[1052,3247,1184],{"class":1221},[1052,3249,1153],{"class":1090},[1052,3251,2335],{"class":1754},[1052,3253,2338],{"class":1221},[1052,3255,1153],{"class":1090},[1052,3257,2343],{"class":1754},[1052,3259,2346],{"class":1221},[1052,3261,1231],{"class":1090},[1052,3263,3264,3266,3268,3270,3272,3274,3276,3278,3280,3283,3285,3287,3289,3291,3294],{"class":1054,"line":2095},[1052,3265,2438],{"class":1065},[1052,3267,1246],{"class":1221},[1052,3269,1952],{"class":1090},[1052,3271,1263],{"class":1255},[1052,3273,1260],{"class":1259},[1052,3275,1263],{"class":1255},[1052,3277,1266],{"class":1090},[1052,3279,1269],{"class":1255},[1052,3281,3282],{"class":1259},"Deleted successfully",[1052,3284,1263],{"class":1255},[1052,3286,2891],{"class":1090},[1052,3288,2671],{"class":1428},[1052,3290,1357],{"class":1090},[1052,3292,3293],{"class":1227},"204",[1052,3295,1231],{"class":1090},[1052,3297,3298,3300,3302,3304,3306],{"class":1054,"line":2112},[1052,3299,2635],{"class":1065},[1052,3301,1860],{"class":1859},[1052,3303,1634],{"class":1065},[1052,3305,2165],{"class":1069},[1052,3307,1640],{"class":1090},[1052,3309,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338],{"class":1054,"line":2119},[1052,3311,2438],{"class":1065},[1052,3313,1246],{"class":1221},[1052,3315,1952],{"class":1090},[1052,3317,1263],{"class":1255},[1052,3319,1887],{"class":1259},[1052,3321,1263],{"class":1255},[1052,3323,1266],{"class":1090},[1052,3325,1894],{"class":1859},[1052,3327,1180],{"class":1090},[1052,3329,2189],{"class":1221},[1052,3331,2668],{"class":1090},[1052,3333,2671],{"class":1428},[1052,3335,1357],{"class":1090},[1052,3337,2676],{"class":1227},[1052,3339,1231],{"class":1090},[1052,3341,3342],{"class":1054,"line":2155},[1052,3343,1237],{"class":1069},[1052,3345,3346],{"class":1054,"line":2170},[1052,3347,3348],{"class":1058},"    # Override these methods in subclasses\n",[1052,3350,3352,3354,3356,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379],{"class":1054,"line":3351},71,[1052,3353,1403],{"class":1169},[1052,3355,1173],{"class":1169},[1052,3357,3358],{"class":1176}," get_data",[1052,3360,1180],{"class":1090},[1052,3362,2325],{"class":2324},[1052,3364,1153],{"class":1090},[1052,3366,2330],{"class":1183},[1052,3368,1153],{"class":1090},[1052,3370,2335],{"class":1754},[1052,3372,2338],{"class":1183},[1052,3374,1153],{"class":1090},[1052,3376,2343],{"class":1754},[1052,3378,2346],{"class":1183},[1052,3380,1187],{"class":1090},[1052,3382,3384,3386,3389],{"class":1054,"line":3383},72,[1052,3385,2353],{"class":1193},[1052,3387,3388],{"class":1197},"Override to implement GET logic.",[1052,3390,1201],{"class":1193},[1052,3392,3394,3397],{"class":1054,"line":3393},73,[1052,3395,3396],{"class":1065},"        raise",[1052,3398,3399],{"class":1859}," NotImplementedError\n",[1052,3401,3403],{"class":1054,"line":3402},74,[1052,3404,1237],{"class":1069},[1052,3406,3408,3410,3412,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439],{"class":1054,"line":3407},75,[1052,3409,1403],{"class":1169},[1052,3411,1173],{"class":1169},[1052,3413,3414],{"class":1176}," create_data",[1052,3416,1180],{"class":1090},[1052,3418,2325],{"class":2324},[1052,3420,1153],{"class":1090},[1052,3422,2330],{"class":1183},[1052,3424,1153],{"class":1090},[1052,3426,2812],{"class":1183},[1052,3428,1153],{"class":1090},[1052,3430,2335],{"class":1754},[1052,3432,2338],{"class":1183},[1052,3434,1153],{"class":1090},[1052,3436,2343],{"class":1754},[1052,3438,2346],{"class":1183},[1052,3440,1187],{"class":1090},[1052,3442,3444,3446,3449],{"class":1054,"line":3443},76,[1052,3445,2353],{"class":1193},[1052,3447,3448],{"class":1197},"Override to implement POST logic.",[1052,3450,1201],{"class":1193},[1052,3452,3454,3456],{"class":1054,"line":3453},77,[1052,3455,3396],{"class":1065},[1052,3457,3399],{"class":1859},[1052,3459,3461],{"class":1054,"line":3460},78,[1052,3462,1237],{"class":1069},[1052,3464,3466,3468,3470,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497],{"class":1054,"line":3465},79,[1052,3467,1403],{"class":1169},[1052,3469,1173],{"class":1169},[1052,3471,3472],{"class":1176}," update_data",[1052,3474,1180],{"class":1090},[1052,3476,2325],{"class":2324},[1052,3478,1153],{"class":1090},[1052,3480,2330],{"class":1183},[1052,3482,1153],{"class":1090},[1052,3484,2812],{"class":1183},[1052,3486,1153],{"class":1090},[1052,3488,2335],{"class":1754},[1052,3490,2338],{"class":1183},[1052,3492,1153],{"class":1090},[1052,3494,2343],{"class":1754},[1052,3496,2346],{"class":1183},[1052,3498,1187],{"class":1090},[1052,3500,3502,3504,3507],{"class":1054,"line":3501},80,[1052,3503,2353],{"class":1193},[1052,3505,3506],{"class":1197},"Override to implement PUT logic.",[1052,3508,1201],{"class":1193},[1052,3510,3512,3514],{"class":1054,"line":3511},81,[1052,3513,3396],{"class":1065},[1052,3515,3399],{"class":1859},[1052,3517,3519],{"class":1054,"line":3518},82,[1052,3520,1237],{"class":1069},[1052,3522,3524,3526,3528,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551],{"class":1054,"line":3523},83,[1052,3525,1403],{"class":1169},[1052,3527,1173],{"class":1169},[1052,3529,3530],{"class":1176}," delete_data",[1052,3532,1180],{"class":1090},[1052,3534,2325],{"class":2324},[1052,3536,1153],{"class":1090},[1052,3538,2330],{"class":1183},[1052,3540,1153],{"class":1090},[1052,3542,2335],{"class":1754},[1052,3544,2338],{"class":1183},[1052,3546,1153],{"class":1090},[1052,3548,2343],{"class":1754},[1052,3550,2346],{"class":1183},[1052,3552,1187],{"class":1090},[1052,3554,3556,3558,3561],{"class":1054,"line":3555},84,[1052,3557,2353],{"class":1193},[1052,3559,3560],{"class":1197},"Override to implement DELETE logic.",[1052,3562,1201],{"class":1193},[1052,3564,3566,3568],{"class":1054,"line":3565},85,[1052,3567,3396],{"class":1065},[1052,3569,3399],{"class":1859},[1052,3571,3573],{"class":1054,"line":3572},86,[1052,3574,1163],{"emptyLinePlaceholder":1162},[1052,3576,3578,3581,3584,3586,3589,3591,3594,3596,3598,3601,3603],{"class":1054,"line":3577},87,[1052,3579,3580],{"class":1090},"@",[1052,3582,3583],{"class":1176},"method_decorator",[1052,3585,1180],{"class":1090},[1052,3587,3588],{"class":1221},"csrf_exempt",[1052,3590,1153],{"class":1090},[1052,3592,3593],{"class":1428}," name",[1052,3595,1357],{"class":1090},[1052,3597,1263],{"class":1255},[1052,3599,3600],{"class":1259},"dispatch",[1052,3602,1263],{"class":1255},[1052,3604,1231],{"class":1090},[1052,3606,3608,3610,3613,3615,3618],{"class":1054,"line":3607},88,[1052,3609,2285],{"class":1169},[1052,3611,3612],{"class":2288}," PostAPIView",[1052,3614,1180],{"class":1090},[1052,3616,3617],{"class":2294},"AsyncAPIView",[1052,3619,1187],{"class":1090},[1052,3621,3623,3625,3628],{"class":1054,"line":3622},89,[1052,3624,1194],{"class":1193},[1052,3626,3627],{"class":1197},"Async API view for posts.",[1052,3629,1201],{"class":1193},[1052,3631,3633],{"class":1054,"line":3632},90,[1052,3634,1237],{"class":1069},[1052,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664],{"class":1054,"line":3637},91,[1052,3639,1403],{"class":1169},[1052,3641,1173],{"class":1169},[1052,3643,3358],{"class":1176},[1052,3645,1180],{"class":1090},[1052,3647,2325],{"class":2324},[1052,3649,1153],{"class":1090},[1052,3651,2330],{"class":1183},[1052,3653,1153],{"class":1090},[1052,3655,2335],{"class":1754},[1052,3657,2338],{"class":1183},[1052,3659,1153],{"class":1090},[1052,3661,2343],{"class":1754},[1052,3663,2346],{"class":1183},[1052,3665,1187],{"class":1090},[1052,3667,3669,3671,3674],{"class":1054,"line":3668},92,[1052,3670,2353],{"class":1193},[1052,3672,3673],{"class":1197},"Get posts data.",[1052,3675,1201],{"class":1193},[1052,3677,3679,3682,3684,3687,3689,3691,3693,3695,3698,3700],{"class":1054,"line":3678},93,[1052,3680,3681],{"class":1069},"        post_id ",[1052,3683,1357],{"class":1090},[1052,3685,3686],{"class":1069}," kwargs",[1052,3688,1091],{"class":1090},[1052,3690,2057],{"class":1221},[1052,3692,1180],{"class":1090},[1052,3694,1263],{"class":1255},[1052,3696,3697],{"class":1259},"post_id",[1052,3699,1263],{"class":1255},[1052,3701,1231],{"class":1090},[1052,3703,3705],{"class":1054,"line":3704},94,[1052,3706,1732],{"class":1069},[1052,3708,3710,3712,3715],{"class":1054,"line":3709},95,[1052,3711,2419],{"class":1065},[1052,3713,3714],{"class":1069}," post_id",[1052,3716,1640],{"class":1090},[1052,3718,3720],{"class":1054,"line":3719},96,[1052,3721,3722],{"class":1058},"            # Get single post\n",[1052,3724,3726,3729,3731,3733,3736,3738,3741,3743,3746,3748,3750,3752,3755,3757,3759],{"class":1054,"line":3725},97,[1052,3727,3728],{"class":1069},"            post ",[1052,3730,1357],{"class":1090},[1052,3732,1360],{"class":1065},[1052,3734,3735],{"class":1221}," aget_object_or_404",[1052,3737,1180],{"class":1090},[1052,3739,3740],{"class":1221},"Post",[1052,3742,1153],{"class":1090},[1052,3744,3745],{"class":1428}," id",[1052,3747,1357],{"class":1090},[1052,3749,3697],{"class":1221},[1052,3751,1153],{"class":1090},[1052,3753,3754],{"class":1428}," published",[1052,3756,1357],{"class":1090},[1052,3758,1435],{"class":1434},[1052,3760,1231],{"class":1090},[1052,3762,3764,3766],{"class":1054,"line":3763},98,[1052,3765,2438],{"class":1065},[1052,3767,3768],{"class":1090}," {\n",[1052,3770,3772,3775,3777,3779,3781,3783,3785,3787],{"class":1054,"line":3771},99,[1052,3773,3774],{"class":1255},"                '",[1052,3776,1466],{"class":1259},[1052,3778,1263],{"class":1255},[1052,3780,1266],{"class":1090},[1052,3782,1473],{"class":1069},[1052,3784,1091],{"class":1090},[1052,3786,1466],{"class":1367},[1052,3788,1277],{"class":1090},[1052,3790,3792,3794,3796,3798,3800,3802,3804,3806],{"class":1054,"line":3791},100,[1052,3793,3774],{"class":1255},[1052,3795,1487],{"class":1259},[1052,3797,1263],{"class":1255},[1052,3799,1266],{"class":1090},[1052,3801,1473],{"class":1069},[1052,3803,1091],{"class":1090},[1052,3805,1487],{"class":1367},[1052,3807,1277],{"class":1090},[1052,3809,3811,3813,3816,3818,3820,3822,3824,3826],{"class":1054,"line":3810},101,[1052,3812,3774],{"class":1255},[1052,3814,3815],{"class":1259},"content",[1052,3817,1263],{"class":1255},[1052,3819,1266],{"class":1090},[1052,3821,1473],{"class":1069},[1052,3823,1091],{"class":1090},[1052,3825,3815],{"class":1367},[1052,3827,1277],{"class":1090},[1052,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849],{"class":1054,"line":3830},102,[1052,3832,3774],{"class":1255},[1052,3834,1507],{"class":1259},[1052,3836,1263],{"class":1255},[1052,3838,1266],{"class":1090},[1052,3840,1473],{"class":1069},[1052,3842,1091],{"class":1090},[1052,3844,1507],{"class":1367},[1052,3846,1091],{"class":1090},[1052,3848,1522],{"class":1221},[1052,3850,1305],{"class":1090},[1052,3852,3854],{"class":1054,"line":3853},103,[1052,3855,3856],{"class":1090},"            }\n",[1052,3858,3860,3862],{"class":1054,"line":3859},104,[1052,3861,2466],{"class":1065},[1052,3863,1640],{"class":1090},[1052,3865,3867],{"class":1054,"line":3866},105,[1052,3868,3869],{"class":1058},"            # Get list of posts\n",[1052,3871,3873,3876,3878],{"class":1054,"line":3872},106,[1052,3874,3875],{"class":1069},"            posts ",[1052,3877,1357],{"class":1090},[1052,3879,1397],{"class":1090},[1052,3881,3883,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912,3915],{"class":1054,"line":3882},107,[1052,3884,3885],{"class":1065},"            async",[1052,3887,1406],{"class":1065},[1052,3889,1409],{"class":1069},[1052,3891,1412],{"class":1065},[1052,3893,1150],{"class":1069},[1052,3895,1091],{"class":1090},[1052,3897,1368],{"class":1367},[1052,3899,1091],{"class":1090},[1052,3901,1423],{"class":1221},[1052,3903,1180],{"class":1090},[1052,3905,1429],{"class":1428},[1052,3907,1357],{"class":1090},[1052,3909,1435],{"class":1434},[1052,3911,1438],{"class":1090},[1052,3913,3914],{"class":1227},"10",[1052,3916,1444],{"class":1090},[1052,3918,3920,3923,3925,3927],{"class":1054,"line":3919},108,[1052,3921,3922],{"class":1069},"                posts",[1052,3924,1091],{"class":1090},[1052,3926,1455],{"class":1221},[1052,3928,1249],{"class":1090},[1052,3930,3932,3935,3937,3939,3941,3943,3945,3947],{"class":1054,"line":3931},109,[1052,3933,3934],{"class":1255},"                    '",[1052,3936,1466],{"class":1259},[1052,3938,1263],{"class":1255},[1052,3940,1266],{"class":1090},[1052,3942,1473],{"class":1221},[1052,3944,1091],{"class":1090},[1052,3946,1466],{"class":1367},[1052,3948,1277],{"class":1090},[1052,3950,3952,3954,3956,3958,3960,3962,3964,3966],{"class":1054,"line":3951},110,[1052,3953,3934],{"class":1255},[1052,3955,1487],{"class":1259},[1052,3957,1263],{"class":1255},[1052,3959,1266],{"class":1090},[1052,3961,1473],{"class":1221},[1052,3963,1091],{"class":1090},[1052,3965,1487],{"class":1367},[1052,3967,1277],{"class":1090},[1052,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989],{"class":1054,"line":3970},111,[1052,3972,3934],{"class":1255},[1052,3974,1507],{"class":1259},[1052,3976,1263],{"class":1255},[1052,3978,1266],{"class":1090},[1052,3980,1473],{"class":1221},[1052,3982,1091],{"class":1090},[1052,3984,1507],{"class":1367},[1052,3986,1091],{"class":1090},[1052,3988,1522],{"class":1221},[1052,3990,1305],{"class":1090},[1052,3992,3994],{"class":1054,"line":3993},112,[1052,3995,3996],{"class":1090},"                })\n",[1052,3998,4000],{"class":1054,"line":3999},113,[1052,4001,2787],{"class":1069},[1052,4003,4005,4007,4009,4011,4014,4016,4018,4021],{"class":1054,"line":4004},114,[1052,4006,2438],{"class":1065},[1052,4008,1882],{"class":1090},[1052,4010,1263],{"class":1255},[1052,4012,4013],{"class":1259},"posts",[1052,4015,1263],{"class":1255},[1052,4017,1266],{"class":1090},[1052,4019,4020],{"class":1069}," posts",[1052,4022,2152],{"class":1090},[1052,4024,4026],{"class":1054,"line":4025},115,[1052,4027,1237],{"class":1069},[1052,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061],{"class":1054,"line":4030},116,[1052,4032,1403],{"class":1169},[1052,4034,1173],{"class":1169},[1052,4036,3414],{"class":1176},[1052,4038,1180],{"class":1090},[1052,4040,2325],{"class":2324},[1052,4042,1153],{"class":1090},[1052,4044,2330],{"class":1183},[1052,4046,1153],{"class":1090},[1052,4048,2812],{"class":1183},[1052,4050,1153],{"class":1090},[1052,4052,2335],{"class":1754},[1052,4054,2338],{"class":1183},[1052,4056,1153],{"class":1090},[1052,4058,2343],{"class":1754},[1052,4060,2346],{"class":1183},[1052,4062,1187],{"class":1090},[1052,4064,4066,4068,4071],{"class":1054,"line":4065},117,[1052,4067,2353],{"class":1193},[1052,4069,4070],{"class":1197},"Create new post.",[1052,4072,1201],{"class":1193},[1052,4074,4076],{"class":1054,"line":4075},118,[1052,4077,4078],{"class":1058},"        # Use sync_to_async for complex database operations\n",[1052,4080,4082,4085],{"class":1054,"line":4081},119,[1052,4083,4084],{"class":1090},"        @",[1052,4086,4087],{"class":1176},"sync_to_async\n",[1052,4089,4091,4094,4097],{"class":1054,"line":4090},120,[1052,4092,4093],{"class":1169},"        def",[1052,4095,4096],{"class":1176}," create_post",[1052,4098,4099],{"class":1090},"():\n",[1052,4101,4103,4105,4107,4109,4111,4113,4116],{"class":1054,"line":4102},121,[1052,4104,2438],{"class":1065},[1052,4106,1150],{"class":1069},[1052,4108,1091],{"class":1090},[1052,4110,1368],{"class":1367},[1052,4112,1091],{"class":1090},[1052,4114,4115],{"class":1221},"create",[1052,4117,4118],{"class":1090},"(\n",[1052,4120,4122,4125,4127,4129,4131,4133,4135,4137],{"class":1054,"line":4121},122,[1052,4123,4124],{"class":1428},"                title",[1052,4126,1357],{"class":1090},[1052,4128,2628],{"class":1221},[1052,4130,1850],{"class":1090},[1052,4132,1263],{"class":1255},[1052,4134,1487],{"class":1259},[1052,4136,1263],{"class":1255},[1052,4138,4139],{"class":1090},"],\n",[1052,4141,4143,4146,4148,4150,4152,4154,4156,4158],{"class":1054,"line":4142},123,[1052,4144,4145],{"class":1428},"                content",[1052,4147,1357],{"class":1090},[1052,4149,2628],{"class":1221},[1052,4151,1850],{"class":1090},[1052,4153,1263],{"class":1255},[1052,4155,3815],{"class":1259},[1052,4157,1263],{"class":1255},[1052,4159,4139],{"class":1090},[1052,4161,4163,4166,4168,4170,4172,4174,4177,4179],{"class":1054,"line":4162},124,[1052,4164,4165],{"class":1428},"                author_id",[1052,4167,1357],{"class":1090},[1052,4169,2628],{"class":1221},[1052,4171,1850],{"class":1090},[1052,4173,1263],{"class":1255},[1052,4175,4176],{"class":1259},"author_id",[1052,4178,1263],{"class":1255},[1052,4180,4139],{"class":1090},[1052,4182,4184,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205,4208],{"class":1054,"line":4183},125,[1052,4185,4186],{"class":1428},"                published",[1052,4188,1357],{"class":1090},[1052,4190,2628],{"class":1221},[1052,4192,1091],{"class":1090},[1052,4194,2057],{"class":1221},[1052,4196,1180],{"class":1090},[1052,4198,1263],{"class":1255},[1052,4200,1429],{"class":1259},[1052,4202,1263],{"class":1255},[1052,4204,1153],{"class":1090},[1052,4206,4207],{"class":1434}," False",[1052,4209,1231],{"class":1090},[1052,4211,4213],{"class":1054,"line":4212},126,[1052,4214,4215],{"class":1090},"            )\n",[1052,4217,4219],{"class":1054,"line":4218},127,[1052,4220,1732],{"class":1069},[1052,4222,4224,4227,4229,4231,4233],{"class":1054,"line":4223},128,[1052,4225,4226],{"class":1069},"        post ",[1052,4228,1357],{"class":1090},[1052,4230,1360],{"class":1065},[1052,4232,4096],{"class":1221},[1052,4234,1305],{"class":1090},[1052,4236,4238],{"class":1054,"line":4237},129,[1052,4239,1732],{"class":1069},[1052,4241,4243,4245],{"class":1054,"line":4242},130,[1052,4244,1947],{"class":1065},[1052,4246,3768],{"class":1090},[1052,4248,4250,4252,4254,4256,4258,4260,4262,4264],{"class":1054,"line":4249},131,[1052,4251,1463],{"class":1255},[1052,4253,1466],{"class":1259},[1052,4255,1263],{"class":1255},[1052,4257,1266],{"class":1090},[1052,4259,1473],{"class":1069},[1052,4261,1091],{"class":1090},[1052,4263,1466],{"class":1367},[1052,4265,1277],{"class":1090},[1052,4267,4269,4271,4273,4275,4277,4279,4281,4283],{"class":1054,"line":4268},132,[1052,4270,1463],{"class":1255},[1052,4272,1487],{"class":1259},[1052,4274,1263],{"class":1255},[1052,4276,1266],{"class":1090},[1052,4278,1473],{"class":1069},[1052,4280,1091],{"class":1090},[1052,4282,1487],{"class":1367},[1052,4284,1277],{"class":1090},[1052,4286,4288,4290,4292,4294,4296,4298,4301],{"class":1054,"line":4287},133,[1052,4289,1463],{"class":1255},[1052,4291,1260],{"class":1259},[1052,4293,1263],{"class":1255},[1052,4295,1266],{"class":1090},[1052,4297,1269],{"class":1255},[1052,4299,4300],{"class":1259},"Post created successfully",[1052,4302,4303],{"class":1255},"'\n",[1052,4305,4307],{"class":1054,"line":4306},134,[1052,4308,4309],{"class":1090},"        }\n",[1052,4311,4313],{"class":1054,"line":4312},135,[1052,4314,1237],{"class":1069},[1052,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348],{"class":1054,"line":4317},136,[1052,4319,1403],{"class":1169},[1052,4321,1173],{"class":1169},[1052,4323,3472],{"class":1176},[1052,4325,1180],{"class":1090},[1052,4327,2325],{"class":2324},[1052,4329,1153],{"class":1090},[1052,4331,2330],{"class":1183},[1052,4333,1153],{"class":1090},[1052,4335,2812],{"class":1183},[1052,4337,1153],{"class":1090},[1052,4339,2335],{"class":1754},[1052,4341,2338],{"class":1183},[1052,4343,1153],{"class":1090},[1052,4345,2343],{"class":1754},[1052,4347,2346],{"class":1183},[1052,4349,1187],{"class":1090},[1052,4351,4353,4355,4358],{"class":1054,"line":4352},137,[1052,4354,2353],{"class":1193},[1052,4356,4357],{"class":1197},"Update existing post.",[1052,4359,1201],{"class":1193},[1052,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381],{"class":1054,"line":4362},138,[1052,4364,3681],{"class":1069},[1052,4366,1357],{"class":1090},[1052,4368,3686],{"class":1069},[1052,4370,1091],{"class":1090},[1052,4372,2057],{"class":1221},[1052,4374,1180],{"class":1090},[1052,4376,1263],{"class":1255},[1052,4378,3697],{"class":1259},[1052,4380,1263],{"class":1255},[1052,4382,1231],{"class":1090},[1052,4384,4386],{"class":1054,"line":4385},139,[1052,4387,1732],{"class":1069},[1052,4389,4391,4393],{"class":1054,"line":4390},140,[1052,4392,4084],{"class":1090},[1052,4394,4087],{"class":1176},[1052,4396,4398,4400,4403],{"class":1054,"line":4397},141,[1052,4399,4093],{"class":1169},[1052,4401,4402],{"class":1176}," update_post",[1052,4404,4099],{"class":1090},[1052,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430],{"class":1054,"line":4407},142,[1052,4409,3728],{"class":1069},[1052,4411,1357],{"class":1090},[1052,4413,1150],{"class":1069},[1052,4415,1091],{"class":1090},[1052,4417,1368],{"class":1367},[1052,4419,1091],{"class":1090},[1052,4421,2057],{"class":1221},[1052,4423,1180],{"class":1090},[1052,4425,1466],{"class":1428},[1052,4427,1357],{"class":1090},[1052,4429,3697],{"class":1221},[1052,4431,1231],{"class":1090},[1052,4433,4435,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466],{"class":1054,"line":4434},143,[1052,4436,4437],{"class":1069},"            post",[1052,4439,1091],{"class":1090},[1052,4441,1487],{"class":1367},[1052,4443,1879],{"class":1090},[1052,4445,2812],{"class":1069},[1052,4447,1091],{"class":1090},[1052,4449,2057],{"class":1221},[1052,4451,1180],{"class":1090},[1052,4453,1263],{"class":1255},[1052,4455,1487],{"class":1259},[1052,4457,1263],{"class":1255},[1052,4459,1153],{"class":1090},[1052,4461,1473],{"class":1221},[1052,4463,1091],{"class":1090},[1052,4465,1487],{"class":1367},[1052,4467,1231],{"class":1090},[1052,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501],{"class":1054,"line":4470},144,[1052,4472,4437],{"class":1069},[1052,4474,1091],{"class":1090},[1052,4476,3815],{"class":1367},[1052,4478,1879],{"class":1090},[1052,4480,2812],{"class":1069},[1052,4482,1091],{"class":1090},[1052,4484,2057],{"class":1221},[1052,4486,1180],{"class":1090},[1052,4488,1263],{"class":1255},[1052,4490,3815],{"class":1259},[1052,4492,1263],{"class":1255},[1052,4494,1153],{"class":1090},[1052,4496,1473],{"class":1221},[1052,4498,1091],{"class":1090},[1052,4500,3815],{"class":1367},[1052,4502,1231],{"class":1090},[1052,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536],{"class":1054,"line":4505},145,[1052,4507,4437],{"class":1069},[1052,4509,1091],{"class":1090},[1052,4511,1429],{"class":1367},[1052,4513,1879],{"class":1090},[1052,4515,2812],{"class":1069},[1052,4517,1091],{"class":1090},[1052,4519,2057],{"class":1221},[1052,4521,1180],{"class":1090},[1052,4523,1263],{"class":1255},[1052,4525,1429],{"class":1259},[1052,4527,1263],{"class":1255},[1052,4529,1153],{"class":1090},[1052,4531,1473],{"class":1221},[1052,4533,1091],{"class":1090},[1052,4535,1429],{"class":1367},[1052,4537,1231],{"class":1090},[1052,4539,4541,4543,4545,4548],{"class":1054,"line":4540},146,[1052,4542,4437],{"class":1069},[1052,4544,1091],{"class":1090},[1052,4546,4547],{"class":1221},"save",[1052,4549,1305],{"class":1090},[1052,4551,4553,4555],{"class":1054,"line":4552},147,[1052,4554,2438],{"class":1065},[1052,4556,4557],{"class":1069}," post\n",[1052,4559,4561],{"class":1054,"line":4560},148,[1052,4562,1732],{"class":1069},[1052,4564,4566,4568,4570,4572,4574],{"class":1054,"line":4565},149,[1052,4567,4226],{"class":1069},[1052,4569,1357],{"class":1090},[1052,4571,1360],{"class":1065},[1052,4573,4402],{"class":1221},[1052,4575,1305],{"class":1090},[1052,4577,4579],{"class":1054,"line":4578},150,[1052,4580,1732],{"class":1069},[1052,4582,4584,4586],{"class":1054,"line":4583},151,[1052,4585,1947],{"class":1065},[1052,4587,3768],{"class":1090},[1052,4589,4591,4593,4595,4597,4599,4601,4603,4605],{"class":1054,"line":4590},152,[1052,4592,1463],{"class":1255},[1052,4594,1466],{"class":1259},[1052,4596,1263],{"class":1255},[1052,4598,1266],{"class":1090},[1052,4600,1473],{"class":1069},[1052,4602,1091],{"class":1090},[1052,4604,1466],{"class":1367},[1052,4606,1277],{"class":1090},[1052,4608,4610,4612,4614,4616,4618,4620,4622,4624],{"class":1054,"line":4609},153,[1052,4611,1463],{"class":1255},[1052,4613,1487],{"class":1259},[1052,4615,1263],{"class":1255},[1052,4617,1266],{"class":1090},[1052,4619,1473],{"class":1069},[1052,4621,1091],{"class":1090},[1052,4623,1487],{"class":1367},[1052,4625,1277],{"class":1090},[1052,4627,4629,4631,4633,4635,4637,4639,4642],{"class":1054,"line":4628},154,[1052,4630,1463],{"class":1255},[1052,4632,1260],{"class":1259},[1052,4634,1263],{"class":1255},[1052,4636,1266],{"class":1090},[1052,4638,1269],{"class":1255},[1052,4640,4641],{"class":1259},"Post updated successfully",[1052,4643,4303],{"class":1255},[1052,4645,4647],{"class":1054,"line":4646},155,[1052,4648,4309],{"class":1090},[1052,4650,4652],{"class":1054,"line":4651},156,[1052,4653,1237],{"class":1069},[1052,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679,4681,4683],{"class":1054,"line":4656},157,[1052,4658,1403],{"class":1169},[1052,4660,1173],{"class":1169},[1052,4662,3530],{"class":1176},[1052,4664,1180],{"class":1090},[1052,4666,2325],{"class":2324},[1052,4668,1153],{"class":1090},[1052,4670,2330],{"class":1183},[1052,4672,1153],{"class":1090},[1052,4674,2335],{"class":1754},[1052,4676,2338],{"class":1183},[1052,4678,1153],{"class":1090},[1052,4680,2343],{"class":1754},[1052,4682,2346],{"class":1183},[1052,4684,1187],{"class":1090},[1052,4686,4688,4690,4693],{"class":1054,"line":4687},158,[1052,4689,2353],{"class":1193},[1052,4691,4692],{"class":1197},"Delete post.",[1052,4694,1201],{"class":1193},[1052,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716],{"class":1054,"line":4697},159,[1052,4699,3681],{"class":1069},[1052,4701,1357],{"class":1090},[1052,4703,3686],{"class":1069},[1052,4705,1091],{"class":1090},[1052,4707,2057],{"class":1221},[1052,4709,1180],{"class":1090},[1052,4711,1263],{"class":1255},[1052,4713,3697],{"class":1259},[1052,4715,1263],{"class":1255},[1052,4717,1231],{"class":1090},[1052,4719,4721],{"class":1054,"line":4720},160,[1052,4722,1732],{"class":1069},[1052,4724,4726,4728],{"class":1054,"line":4725},161,[1052,4727,4084],{"class":1090},[1052,4729,4087],{"class":1176},[1052,4731,4733,4735,4738],{"class":1054,"line":4732},162,[1052,4734,4093],{"class":1169},[1052,4736,4737],{"class":1176}," delete_post",[1052,4739,4099],{"class":1090},[1052,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765],{"class":1054,"line":4742},163,[1052,4744,3728],{"class":1069},[1052,4746,1357],{"class":1090},[1052,4748,1150],{"class":1069},[1052,4750,1091],{"class":1090},[1052,4752,1368],{"class":1367},[1052,4754,1091],{"class":1090},[1052,4756,2057],{"class":1221},[1052,4758,1180],{"class":1090},[1052,4760,1466],{"class":1428},[1052,4762,1357],{"class":1090},[1052,4764,3697],{"class":1221},[1052,4766,1231],{"class":1090},[1052,4768,4770,4772,4774,4777],{"class":1054,"line":4769},164,[1052,4771,4437],{"class":1069},[1052,4773,1091],{"class":1090},[1052,4775,4776],{"class":1221},"delete",[1052,4778,1305],{"class":1090},[1052,4780,4782],{"class":1054,"line":4781},165,[1052,4783,1732],{"class":1069},[1052,4785,4787,4790,4792],{"class":1054,"line":4786},166,[1052,4788,4789],{"class":1065},"        await",[1052,4791,4737],{"class":1221},[1052,4793,1305],{"class":1090},[1034,4795,4797],{"id":4796},"async-middleware","Async Middleware",[1042,4799,4801],{"className":1044,"code":4800,"language":1046,"meta":1047,"style":1047},"# middleware/async_middleware.py\nimport asyncio\nimport time\nfrom django.utils.deprecation import MiddlewareMixin\n\nclass AsyncTimingMiddleware:\n    \"\"\"Async middleware for request timing.\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n    \n    async def __call__(self, request):\n        \"\"\"Process request asynchronously.\"\"\"\n        start_time = time.time()\n        \n        # Process request\n        response = await self.get_response(request)\n        \n        # Calculate processing time\n        processing_time = time.time() - start_time\n        \n        # Add timing header\n        response['X-Processing-Time'] = f\"{processing_time:.4f}s\"\n        \n        return response\n\nclass AsyncLoggingMiddleware:\n    \"\"\"Async middleware for request logging.\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n    \n    async def __call__(self, request):\n        \"\"\"Log requests asynchronously.\"\"\"\n        # Log request start\n        await self.log_request_start(request)\n        \n        # Process request\n        response = await self.get_response(request)\n        \n        # Log request completion\n        await self.log_request_end(request, response)\n        \n        return response\n    \n    async def log_request_start(self, request):\n        \"\"\"Log request start asynchronously.\"\"\"\n        # Use sync_to_async for database logging\n        @sync_to_async\n        def log_to_db():\n            # Log to database or external service\n            print(f\"Request started: {request.method} {request.path}\")\n        \n        await log_to_db()\n    \n    async def log_request_end(self, request, response):\n        \"\"\"Log request completion asynchronously.\"\"\"\n        @sync_to_async\n        def log_to_db():\n            print(f\"Request completed: {request.method} {request.path} - {response.status_code}\")\n        \n        await log_to_db()\n\nclass AsyncRateLimitMiddleware:\n    \"\"\"Async rate limiting middleware.\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n        self.rate_limits = {}  # In production, use Redis or similar\n    \n    async def __call__(self, request):\n        \"\"\"Apply rate limiting asynchronously.\"\"\"\n        client_ip = self.get_client_ip(request)\n        \n        # Check rate limit\n        if await self.is_rate_limited(client_ip):\n            from django.http import JsonResponse\n            return JsonResponse(\n                {'error': 'Rate limit exceeded'}, \n                status=429\n            )\n        \n        # Process request\n        response = await self.get_response(request)\n        \n        # Update rate limit counter\n        await self.update_rate_limit(client_ip)\n        \n        return response\n    \n    def get_client_ip(self, request):\n        \"\"\"Get client IP address.\"\"\"\n        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')\n        if x_forwarded_for:\n            return x_forwarded_for.split(',')[0]\n        return request.META.get('REMOTE_ADDR')\n    \n    async def is_rate_limited(self, client_ip):\n        \"\"\"Check if client is rate limited.\"\"\"\n        # Simulate async rate limit check\n        await asyncio.sleep(0.001)\n        \n        current_time = time.time()\n        window_start = current_time - 60  # 1-minute window\n        \n        # Clean old entries\n        if client_ip in self.rate_limits:\n            self.rate_limits[client_ip] = [\n                timestamp for timestamp in self.rate_limits[client_ip]\n                if timestamp > window_start\n            ]\n        \n        # Check current count\n        current_count = len(self.rate_limits.get(client_ip, []))\n        return current_count >= 100  # 100 requests per minute\n    \n    async def update_rate_limit(self, client_ip):\n        \"\"\"Update rate limit counter.\"\"\"\n        await asyncio.sleep(0.001)  # Simulate async operation\n        \n        current_time = time.time()\n        \n        if client_ip not in self.rate_limits:\n            self.rate_limits[client_ip] = []\n        \n        self.rate_limits[client_ip].append(current_time)\n",[1049,4802,4803,4808,4814,4821,4841,4845,4854,4863,4867,4886,4901,4905,4924,4933,4949,4953,4958,4979,4983,4988,5009,5013,5018,5054,5058,5065,5069,5078,5087,5091,5107,5119,5123,5141,5150,5155,5172,5176,5180,5200,5204,5209,5230,5234,5240,5244,5263,5272,5277,5283,5292,5297,5335,5339,5347,5351,5374,5383,5389,5397,5446,5450,5458,5462,5471,5480,5484,5500,5512,5529,5533,5551,5560,5580,5584,5589,5609,5624,5632,5657,5667,5671,5675,5679,5699,5703,5708,5725,5729,5735,5739,5756,5765,5795,5804,5831,5856,5860,5880,5889,5894,5911,5915,5930,5949,5953,5958,5975,5994,6019,6032,6037,6041,6046,6077,6093,6097,6116,6125,6144,6148,6162,6166,6186,6204,6208],{"__ignoreMap":1047},[1052,4804,4805],{"class":1054,"line":1055},[1052,4806,4807],{"class":1058},"# middleware/async_middleware.py\n",[1052,4809,4810,4812],{"class":1054,"line":1062},[1052,4811,1066],{"class":1065},[1052,4813,1070],{"class":1069},[1052,4815,4816,4818],{"class":1054,"line":1073},[1052,4817,1066],{"class":1065},[1052,4819,4820],{"class":1069}," time\n",[1052,4822,4823,4825,4827,4829,4831,4833,4836,4838],{"class":1054,"line":1081},[1052,4824,1084],{"class":1065},[1052,4826,1087],{"class":1069},[1052,4828,1091],{"class":1090},[1052,4830,2233],{"class":1069},[1052,4832,1091],{"class":1090},[1052,4834,4835],{"class":1069},"deprecation ",[1052,4837,1066],{"class":1065},[1052,4839,4840],{"class":1069}," MiddlewareMixin\n",[1052,4842,4843],{"class":1054,"line":1102},[1052,4844,1163],{"emptyLinePlaceholder":1162},[1052,4846,4847,4849,4852],{"class":1054,"line":1119},[1052,4848,2285],{"class":1169},[1052,4850,4851],{"class":2288}," AsyncTimingMiddleware",[1052,4853,1640],{"class":1090},[1052,4855,4856,4858,4861],{"class":1054,"line":1137},[1052,4857,1194],{"class":1193},[1052,4859,4860],{"class":1197},"Async middleware for request timing.",[1052,4862,1201],{"class":1193},[1052,4864,4865],{"class":1054,"line":1159},[1052,4866,1237],{"class":1069},[1052,4868,4869,4872,4875,4877,4879,4881,4884],{"class":1054,"line":1166},[1052,4870,4871],{"class":1169},"    def",[1052,4873,4874],{"class":1804}," __init__",[1052,4876,1180],{"class":1090},[1052,4878,2325],{"class":2324},[1052,4880,1153],{"class":1090},[1052,4882,4883],{"class":1183}," get_response",[1052,4885,1187],{"class":1090},[1052,4887,4888,4891,4893,4896,4898],{"class":1054,"line":1190},[1052,4889,4890],{"class":2378},"        self",[1052,4892,1091],{"class":1090},[1052,4894,4895],{"class":1367},"get_response",[1052,4897,1879],{"class":1090},[1052,4899,4900],{"class":1069}," get_response\n",[1052,4902,4903],{"class":1054,"line":1204},[1052,4904,1237],{"class":1069},[1052,4906,4907,4909,4911,4914,4916,4918,4920,4922],{"class":1054,"line":1210},[1052,4908,1403],{"class":1169},[1052,4910,1173],{"class":1169},[1052,4912,4913],{"class":1804}," __call__",[1052,4915,1180],{"class":1090},[1052,4917,2325],{"class":2324},[1052,4919,1153],{"class":1090},[1052,4921,2330],{"class":1183},[1052,4923,1187],{"class":1090},[1052,4925,4926,4928,4931],{"class":1054,"line":1234},[1052,4927,2353],{"class":1193},[1052,4929,4930],{"class":1197},"Process request asynchronously.",[1052,4932,1201],{"class":1193},[1052,4934,4935,4938,4940,4943,4945,4947],{"class":1054,"line":1240},[1052,4936,4937],{"class":1069},"        start_time ",[1052,4939,1357],{"class":1090},[1052,4941,4942],{"class":1069}," time",[1052,4944,1091],{"class":1090},[1052,4946,1302],{"class":1221},[1052,4948,1305],{"class":1090},[1052,4950,4951],{"class":1054,"line":1252},[1052,4952,1732],{"class":1069},[1052,4954,4955],{"class":1054,"line":1280},[1052,4956,4957],{"class":1058},"        # Process request\n",[1052,4959,4960,4963,4965,4967,4969,4971,4973,4975,4977],{"class":1054,"line":1308},[1052,4961,4962],{"class":1069},"        response ",[1052,4964,1357],{"class":1090},[1052,4966,1360],{"class":1065},[1052,4968,2398],{"class":2378},[1052,4970,1091],{"class":1090},[1052,4972,4895],{"class":1221},[1052,4974,1180],{"class":1090},[1052,4976,1184],{"class":1221},[1052,4978,1231],{"class":1090},[1052,4980,4981],{"class":1054,"line":1314},[1052,4982,1732],{"class":1069},[1052,4984,4985],{"class":1054,"line":1319},[1052,4986,4987],{"class":1058},"        # Calculate processing time\n",[1052,4989,4990,4993,4995,4997,4999,5001,5003,5006],{"class":1054,"line":1335},[1052,4991,4992],{"class":1069},"        processing_time ",[1052,4994,1357],{"class":1090},[1052,4996,4942],{"class":1069},[1052,4998,1091],{"class":1090},[1052,5000,1302],{"class":1221},[1052,5002,1631],{"class":1090},[1052,5004,5005],{"class":1754}," -",[1052,5007,5008],{"class":1069}," start_time\n",[1052,5010,5011],{"class":1054,"line":1345},[1052,5012,1732],{"class":1069},[1052,5014,5015],{"class":1054,"line":1351},[1052,5016,5017],{"class":1058},"        # Add timing header\n",[1052,5019,5020,5023,5025,5027,5030,5032,5034,5036,5038,5041,5043,5046,5049,5051],{"class":1054,"line":1378},[1052,5021,5022],{"class":1069},"        response",[1052,5024,1850],{"class":1090},[1052,5026,1263],{"class":1255},[1052,5028,5029],{"class":1259},"X-Processing-Time",[1052,5031,1263],{"class":1255},[1052,5033,1876],{"class":1090},[1052,5035,1879],{"class":1090},[1052,5037,2014],{"class":1169},[1052,5039,5040],{"class":1259},"\"",[1052,5042,2021],{"class":2020},[1052,5044,5045],{"class":1069},"processing_time",[1052,5047,5048],{"class":1169},":.4f",[1052,5050,2026],{"class":2020},[1052,5052,5053],{"class":1259},"s\"\n",[1052,5055,5056],{"class":1054,"line":1383},[1052,5057,1732],{"class":1069},[1052,5059,5060,5062],{"class":1054,"line":1389},[1052,5061,1947],{"class":1065},[1052,5063,5064],{"class":1069}," response\n",[1052,5066,5067],{"class":1054,"line":1400},[1052,5068,1163],{"emptyLinePlaceholder":1162},[1052,5070,5071,5073,5076],{"class":1054,"line":1447},[1052,5072,2285],{"class":1169},[1052,5074,5075],{"class":2288}," AsyncLoggingMiddleware",[1052,5077,1640],{"class":1090},[1052,5079,5080,5082,5085],{"class":1054,"line":1460},[1052,5081,1194],{"class":1193},[1052,5083,5084],{"class":1197},"Async middleware for request logging.",[1052,5086,1201],{"class":1193},[1052,5088,5089],{"class":1054,"line":1482},[1052,5090,1237],{"class":1069},[1052,5092,5093,5095,5097,5099,5101,5103,5105],{"class":1054,"line":1502},[1052,5094,4871],{"class":1169},[1052,5096,4874],{"class":1804},[1052,5098,1180],{"class":1090},[1052,5100,2325],{"class":2324},[1052,5102,1153],{"class":1090},[1052,5104,4883],{"class":1183},[1052,5106,1187],{"class":1090},[1052,5108,5109,5111,5113,5115,5117],{"class":1054,"line":1527},[1052,5110,4890],{"class":2378},[1052,5112,1091],{"class":1090},[1052,5114,4895],{"class":1367},[1052,5116,1879],{"class":1090},[1052,5118,4900],{"class":1069},[1052,5120,5121],{"class":1054,"line":1533},[1052,5122,1237],{"class":1069},[1052,5124,5125,5127,5129,5131,5133,5135,5137,5139],{"class":1054,"line":1538},[1052,5126,1403],{"class":1169},[1052,5128,1173],{"class":1169},[1052,5130,4913],{"class":1804},[1052,5132,1180],{"class":1090},[1052,5134,2325],{"class":2324},[1052,5136,1153],{"class":1090},[1052,5138,2330],{"class":1183},[1052,5140,1187],{"class":1090},[1052,5142,5143,5145,5148],{"class":1054,"line":1547},[1052,5144,2353],{"class":1193},[1052,5146,5147],{"class":1197},"Log requests asynchronously.",[1052,5149,1201],{"class":1193},[1052,5151,5152],{"class":1054,"line":1564},[1052,5153,5154],{"class":1058},"        # Log request start\n",[1052,5156,5157,5159,5161,5163,5166,5168,5170],{"class":1054,"line":1579},[1052,5158,4789],{"class":1065},[1052,5160,2398],{"class":2378},[1052,5162,1091],{"class":1090},[1052,5164,5165],{"class":1221},"log_request_start",[1052,5167,1180],{"class":1090},[1052,5169,1184],{"class":1221},[1052,5171,1231],{"class":1090},[1052,5173,5174],{"class":1054,"line":1584},[1052,5175,1732],{"class":1069},[1052,5177,5178],{"class":1054,"line":1589},[1052,5179,4957],{"class":1058},[1052,5181,5182,5184,5186,5188,5190,5192,5194,5196,5198],{"class":1054,"line":1605},[1052,5183,4962],{"class":1069},[1052,5185,1357],{"class":1090},[1052,5187,1360],{"class":1065},[1052,5189,2398],{"class":2378},[1052,5191,1091],{"class":1090},[1052,5193,4895],{"class":1221},[1052,5195,1180],{"class":1090},[1052,5197,1184],{"class":1221},[1052,5199,1231],{"class":1090},[1052,5201,5202],{"class":1054,"line":1615},[1052,5203,1732],{"class":1069},[1052,5205,5206],{"class":1054,"line":1643},[1052,5207,5208],{"class":1058},"        # Log request completion\n",[1052,5210,5211,5213,5215,5217,5220,5222,5224,5226,5228],{"class":1054,"line":1649},[1052,5212,4789],{"class":1065},[1052,5214,2398],{"class":2378},[1052,5216,1091],{"class":1090},[1052,5218,5219],{"class":1221},"log_request_end",[1052,5221,1180],{"class":1090},[1052,5223,1184],{"class":1221},[1052,5225,1153],{"class":1090},[1052,5227,2070],{"class":1221},[1052,5229,1231],{"class":1090},[1052,5231,5232],{"class":1054,"line":1660},[1052,5233,1732],{"class":1069},[1052,5235,5236,5238],{"class":1054,"line":1683},[1052,5237,1947],{"class":1065},[1052,5239,5064],{"class":1069},[1052,5241,5242],{"class":1054,"line":1703},[1052,5243,1237],{"class":1069},[1052,5245,5246,5248,5250,5253,5255,5257,5259,5261],{"class":1054,"line":1723},[1052,5247,1403],{"class":1169},[1052,5249,1173],{"class":1169},[1052,5251,5252],{"class":1176}," log_request_start",[1052,5254,1180],{"class":1090},[1052,5256,2325],{"class":2324},[1052,5258,1153],{"class":1090},[1052,5260,2330],{"class":1183},[1052,5262,1187],{"class":1090},[1052,5264,5265,5267,5270],{"class":1054,"line":1729},[1052,5266,2353],{"class":1193},[1052,5268,5269],{"class":1197},"Log request start asynchronously.",[1052,5271,1201],{"class":1193},[1052,5273,5274],{"class":1054,"line":1735},[1052,5275,5276],{"class":1058},"        # Use sync_to_async for database logging\n",[1052,5278,5279,5281],{"class":1054,"line":1772},[1052,5280,4084],{"class":1090},[1052,5282,4087],{"class":1176},[1052,5284,5285,5287,5290],{"class":1054,"line":1777},[1052,5286,4093],{"class":1169},[1052,5288,5289],{"class":1176}," log_to_db",[1052,5291,4099],{"class":1090},[1052,5293,5294],{"class":1054,"line":1788},[1052,5295,5296],{"class":1058},"            # Log to database or external service\n",[1052,5298,5299,5302,5304,5307,5310,5312,5314,5316,5318,5320,5322,5324,5326,5329,5331,5333],{"class":1054,"line":1836},[1052,5300,5301],{"class":1804},"            print",[1052,5303,1180],{"class":1090},[1052,5305,5306],{"class":1169},"f",[1052,5308,5309],{"class":1259},"\"Request started: ",[1052,5311,2021],{"class":2020},[1052,5313,1184],{"class":1221},[1052,5315,1091],{"class":1090},[1052,5317,2387],{"class":1367},[1052,5319,2026],{"class":2020},[1052,5321,1882],{"class":2020},[1052,5323,1184],{"class":1221},[1052,5325,1091],{"class":1090},[1052,5327,5328],{"class":1367},"path",[1052,5330,2026],{"class":2020},[1052,5332,5040],{"class":1259},[1052,5334,1231],{"class":1090},[1052,5336,5337],{"class":1054,"line":1865},[1052,5338,1732],{"class":1069},[1052,5340,5341,5343,5345],{"class":1054,"line":1908},[1052,5342,4789],{"class":1065},[1052,5344,5289],{"class":1221},[1052,5346,1305],{"class":1090},[1052,5348,5349],{"class":1054,"line":1916},[1052,5350,1237],{"class":1069},[1052,5352,5353,5355,5357,5360,5362,5364,5366,5368,5370,5372],{"class":1054,"line":1939},[1052,5354,1403],{"class":1169},[1052,5356,1173],{"class":1169},[1052,5358,5359],{"class":1176}," log_request_end",[1052,5361,1180],{"class":1090},[1052,5363,2325],{"class":2324},[1052,5365,1153],{"class":1090},[1052,5367,2330],{"class":1183},[1052,5369,1153],{"class":1090},[1052,5371,2070],{"class":1183},[1052,5373,1187],{"class":1090},[1052,5375,5376,5378,5381],{"class":1054,"line":1944},[1052,5377,2353],{"class":1193},[1052,5379,5380],{"class":1197},"Log request completion asynchronously.",[1052,5382,1201],{"class":1193},[1052,5384,5385,5387],{"class":1054,"line":1970},[1052,5386,4084],{"class":1090},[1052,5388,4087],{"class":1176},[1052,5390,5391,5393,5395],{"class":1054,"line":1975},[1052,5392,4093],{"class":1169},[1052,5394,5289],{"class":1176},[1052,5396,4099],{"class":1090},[1052,5398,5399,5401,5403,5405,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5431,5433,5435,5437,5440,5442,5444],{"class":1054,"line":1996},[1052,5400,5301],{"class":1804},[1052,5402,1180],{"class":1090},[1052,5404,5306],{"class":1169},[1052,5406,5407],{"class":1259},"\"Request completed: ",[1052,5409,2021],{"class":2020},[1052,5411,1184],{"class":1221},[1052,5413,1091],{"class":1090},[1052,5415,2387],{"class":1367},[1052,5417,2026],{"class":2020},[1052,5419,1882],{"class":2020},[1052,5421,1184],{"class":1221},[1052,5423,1091],{"class":1090},[1052,5425,5328],{"class":1367},[1052,5427,2026],{"class":2020},[1052,5429,5430],{"class":1259}," - ",[1052,5432,2021],{"class":2020},[1052,5434,2141],{"class":1221},[1052,5436,1091],{"class":1090},[1052,5438,5439],{"class":1367},"status_code",[1052,5441,2026],{"class":2020},[1052,5443,5040],{"class":1259},[1052,5445,1231],{"class":1090},[1052,5447,5448],{"class":1054,"line":2006},[1052,5449,1732],{"class":1069},[1052,5451,5452,5454,5456],{"class":1054,"line":2032},[1052,5453,4789],{"class":1065},[1052,5455,5289],{"class":1221},[1052,5457,1305],{"class":1090},[1052,5459,5460],{"class":1054,"line":2037},[1052,5461,1163],{"emptyLinePlaceholder":1162},[1052,5463,5464,5466,5469],{"class":1054,"line":2045},[1052,5465,2285],{"class":1169},[1052,5467,5468],{"class":2288}," AsyncRateLimitMiddleware",[1052,5470,1640],{"class":1090},[1052,5472,5473,5475,5478],{"class":1054,"line":2075},[1052,5474,1194],{"class":1193},[1052,5476,5477],{"class":1197},"Async rate limiting middleware.",[1052,5479,1201],{"class":1193},[1052,5481,5482],{"class":1054,"line":2095},[1052,5483,1237],{"class":1069},[1052,5485,5486,5488,5490,5492,5494,5496,5498],{"class":1054,"line":2112},[1052,5487,4871],{"class":1169},[1052,5489,4874],{"class":1804},[1052,5491,1180],{"class":1090},[1052,5493,2325],{"class":2324},[1052,5495,1153],{"class":1090},[1052,5497,4883],{"class":1183},[1052,5499,1187],{"class":1090},[1052,5501,5502,5504,5506,5508,5510],{"class":1054,"line":2119},[1052,5503,4890],{"class":2378},[1052,5505,1091],{"class":1090},[1052,5507,4895],{"class":1367},[1052,5509,1879],{"class":1090},[1052,5511,4900],{"class":1069},[1052,5513,5514,5516,5518,5521,5523,5526],{"class":1054,"line":2155},[1052,5515,4890],{"class":2378},[1052,5517,1091],{"class":1090},[1052,5519,5520],{"class":1367},"rate_limits",[1052,5522,1879],{"class":1090},[1052,5524,5525],{"class":1090}," {}",[1052,5527,5528],{"class":1058},"  # In production, use Redis or similar\n",[1052,5530,5531],{"class":1054,"line":2170},[1052,5532,1237],{"class":1069},[1052,5534,5535,5537,5539,5541,5543,5545,5547,5549],{"class":1054,"line":3351},[1052,5536,1403],{"class":1169},[1052,5538,1173],{"class":1169},[1052,5540,4913],{"class":1804},[1052,5542,1180],{"class":1090},[1052,5544,2325],{"class":2324},[1052,5546,1153],{"class":1090},[1052,5548,2330],{"class":1183},[1052,5550,1187],{"class":1090},[1052,5552,5553,5555,5558],{"class":1054,"line":3383},[1052,5554,2353],{"class":1193},[1052,5556,5557],{"class":1197},"Apply rate limiting asynchronously.",[1052,5559,1201],{"class":1193},[1052,5561,5562,5565,5567,5569,5571,5574,5576,5578],{"class":1054,"line":3393},[1052,5563,5564],{"class":1069},"        client_ip ",[1052,5566,1357],{"class":1090},[1052,5568,2398],{"class":2378},[1052,5570,1091],{"class":1090},[1052,5572,5573],{"class":1221},"get_client_ip",[1052,5575,1180],{"class":1090},[1052,5577,1184],{"class":1221},[1052,5579,1231],{"class":1090},[1052,5581,5582],{"class":1054,"line":3402},[1052,5583,1732],{"class":1069},[1052,5585,5586],{"class":1054,"line":3407},[1052,5587,5588],{"class":1058},"        # Check rate limit\n",[1052,5590,5591,5593,5595,5597,5599,5602,5604,5607],{"class":1054,"line":3443},[1052,5592,2419],{"class":1065},[1052,5594,1360],{"class":1065},[1052,5596,2398],{"class":2378},[1052,5598,1091],{"class":1090},[1052,5600,5601],{"class":1221},"is_rate_limited",[1052,5603,1180],{"class":1090},[1052,5605,5606],{"class":1221},"client_ip",[1052,5608,1187],{"class":1090},[1052,5610,5611,5614,5616,5618,5620,5622],{"class":1054,"line":3453},[1052,5612,5613],{"class":1065},"            from",[1052,5615,1087],{"class":1069},[1052,5617,1091],{"class":1090},[1052,5619,1094],{"class":1069},[1052,5621,1066],{"class":1065},[1052,5623,1099],{"class":1069},[1052,5625,5626,5628,5630],{"class":1054,"line":3460},[1052,5627,2438],{"class":1065},[1052,5629,1246],{"class":1221},[1052,5631,4118],{"class":1090},[1052,5633,5634,5637,5639,5641,5643,5645,5647,5650,5652,5654],{"class":1054,"line":3465},[1052,5635,5636],{"class":1090},"                {",[1052,5638,1263],{"class":1255},[1052,5640,1887],{"class":1259},[1052,5642,1263],{"class":1255},[1052,5644,1266],{"class":1090},[1052,5646,1269],{"class":1255},[1052,5648,5649],{"class":1259},"Rate limit exceeded",[1052,5651,1263],{"class":1255},[1052,5653,2891],{"class":1090},[1052,5655,5656],{"class":1221}," \n",[1052,5658,5659,5662,5664],{"class":1054,"line":3501},[1052,5660,5661],{"class":1428},"                status",[1052,5663,1357],{"class":1090},[1052,5665,5666],{"class":1227},"429\n",[1052,5668,5669],{"class":1054,"line":3511},[1052,5670,4215],{"class":1090},[1052,5672,5673],{"class":1054,"line":3518},[1052,5674,1732],{"class":1069},[1052,5676,5677],{"class":1054,"line":3523},[1052,5678,4957],{"class":1058},[1052,5680,5681,5683,5685,5687,5689,5691,5693,5695,5697],{"class":1054,"line":3555},[1052,5682,4962],{"class":1069},[1052,5684,1357],{"class":1090},[1052,5686,1360],{"class":1065},[1052,5688,2398],{"class":2378},[1052,5690,1091],{"class":1090},[1052,5692,4895],{"class":1221},[1052,5694,1180],{"class":1090},[1052,5696,1184],{"class":1221},[1052,5698,1231],{"class":1090},[1052,5700,5701],{"class":1054,"line":3565},[1052,5702,1732],{"class":1069},[1052,5704,5705],{"class":1054,"line":3572},[1052,5706,5707],{"class":1058},"        # Update rate limit counter\n",[1052,5709,5710,5712,5714,5716,5719,5721,5723],{"class":1054,"line":3577},[1052,5711,4789],{"class":1065},[1052,5713,2398],{"class":2378},[1052,5715,1091],{"class":1090},[1052,5717,5718],{"class":1221},"update_rate_limit",[1052,5720,1180],{"class":1090},[1052,5722,5606],{"class":1221},[1052,5724,1231],{"class":1090},[1052,5726,5727],{"class":1054,"line":3607},[1052,5728,1732],{"class":1069},[1052,5730,5731,5733],{"class":1054,"line":3622},[1052,5732,1947],{"class":1065},[1052,5734,5064],{"class":1069},[1052,5736,5737],{"class":1054,"line":3632},[1052,5738,1237],{"class":1069},[1052,5740,5741,5743,5746,5748,5750,5752,5754],{"class":1054,"line":3637},[1052,5742,4871],{"class":1169},[1052,5744,5745],{"class":1176}," get_client_ip",[1052,5747,1180],{"class":1090},[1052,5749,2325],{"class":2324},[1052,5751,1153],{"class":1090},[1052,5753,2330],{"class":1183},[1052,5755,1187],{"class":1090},[1052,5757,5758,5760,5763],{"class":1054,"line":3668},[1052,5759,2353],{"class":1193},[1052,5761,5762],{"class":1197},"Get client IP address.",[1052,5764,1201],{"class":1193},[1052,5766,5767,5770,5772,5774,5776,5780,5782,5784,5786,5788,5791,5793],{"class":1054,"line":3678},[1052,5768,5769],{"class":1069},"        x_forwarded_for ",[1052,5771,1357],{"class":1090},[1052,5773,2330],{"class":1069},[1052,5775,1091],{"class":1090},[1052,5777,5779],{"class":5778},"sFGJz","META",[1052,5781,1091],{"class":1090},[1052,5783,2057],{"class":1221},[1052,5785,1180],{"class":1090},[1052,5787,1263],{"class":1255},[1052,5789,5790],{"class":1259},"HTTP_X_FORWARDED_FOR",[1052,5792,1263],{"class":1255},[1052,5794,1231],{"class":1090},[1052,5796,5797,5799,5802],{"class":1054,"line":3704},[1052,5798,2419],{"class":1065},[1052,5800,5801],{"class":1069}," x_forwarded_for",[1052,5803,1640],{"class":1090},[1052,5805,5806,5808,5810,5812,5815,5817,5819,5821,5823,5826,5829],{"class":1054,"line":3709},[1052,5807,2438],{"class":1065},[1052,5809,5801],{"class":1069},[1052,5811,1091],{"class":1090},[1052,5813,5814],{"class":1221},"split",[1052,5816,1180],{"class":1090},[1052,5818,1263],{"class":1255},[1052,5820,1153],{"class":1259},[1052,5822,1263],{"class":1255},[1052,5824,5825],{"class":1090},")[",[1052,5827,5828],{"class":1227},"0",[1052,5830,1936],{"class":1090},[1052,5832,5833,5835,5837,5839,5841,5843,5845,5847,5849,5852,5854],{"class":1054,"line":3719},[1052,5834,1947],{"class":1065},[1052,5836,2330],{"class":1069},[1052,5838,1091],{"class":1090},[1052,5840,5779],{"class":5778},[1052,5842,1091],{"class":1090},[1052,5844,2057],{"class":1221},[1052,5846,1180],{"class":1090},[1052,5848,1263],{"class":1255},[1052,5850,5851],{"class":1259},"REMOTE_ADDR",[1052,5853,1263],{"class":1255},[1052,5855,1231],{"class":1090},[1052,5857,5858],{"class":1054,"line":3725},[1052,5859,1237],{"class":1069},[1052,5861,5862,5864,5866,5869,5871,5873,5875,5878],{"class":1054,"line":3763},[1052,5863,1403],{"class":1169},[1052,5865,1173],{"class":1169},[1052,5867,5868],{"class":1176}," is_rate_limited",[1052,5870,1180],{"class":1090},[1052,5872,2325],{"class":2324},[1052,5874,1153],{"class":1090},[1052,5876,5877],{"class":1183}," client_ip",[1052,5879,1187],{"class":1090},[1052,5881,5882,5884,5887],{"class":1054,"line":3771},[1052,5883,2353],{"class":1193},[1052,5885,5886],{"class":1197},"Check if client is rate limited.",[1052,5888,1201],{"class":1193},[1052,5890,5891],{"class":1054,"line":3791},[1052,5892,5893],{"class":1058},"        # Simulate async rate limit check\n",[1052,5895,5896,5898,5900,5902,5904,5906,5909],{"class":1054,"line":3810},[1052,5897,4789],{"class":1065},[1052,5899,1216],{"class":1069},[1052,5901,1091],{"class":1090},[1052,5903,1222],{"class":1221},[1052,5905,1180],{"class":1090},[1052,5907,5908],{"class":1227},"0.001",[1052,5910,1231],{"class":1090},[1052,5912,5913],{"class":1054,"line":3830},[1052,5914,1732],{"class":1069},[1052,5916,5917,5920,5922,5924,5926,5928],{"class":1054,"line":3853},[1052,5918,5919],{"class":1069},"        current_time ",[1052,5921,1357],{"class":1090},[1052,5923,4942],{"class":1069},[1052,5925,1091],{"class":1090},[1052,5927,1302],{"class":1221},[1052,5929,1305],{"class":1090},[1052,5931,5932,5935,5937,5940,5943,5946],{"class":1054,"line":3859},[1052,5933,5934],{"class":1069},"        window_start ",[1052,5936,1357],{"class":1090},[1052,5938,5939],{"class":1069}," current_time ",[1052,5941,5942],{"class":1754},"-",[1052,5944,5945],{"class":1227}," 60",[1052,5947,5948],{"class":1058},"  # 1-minute window\n",[1052,5950,5951],{"class":1054,"line":3866},[1052,5952,1732],{"class":1069},[1052,5954,5955],{"class":1054,"line":3872},[1052,5956,5957],{"class":1058},"        # Clean old entries\n",[1052,5959,5960,5962,5965,5967,5969,5971,5973],{"class":1054,"line":3882},[1052,5961,2419],{"class":1065},[1052,5963,5964],{"class":1069}," client_ip ",[1052,5966,1412],{"class":1754},[1052,5968,2398],{"class":2378},[1052,5970,1091],{"class":1090},[1052,5972,5520],{"class":1367},[1052,5974,1640],{"class":1090},[1052,5976,5977,5980,5982,5984,5986,5988,5990,5992],{"class":1054,"line":3919},[1052,5978,5979],{"class":2378},"            self",[1052,5981,1091],{"class":1090},[1052,5983,5520],{"class":1367},[1052,5985,1850],{"class":1090},[1052,5987,5606],{"class":1367},[1052,5989,1876],{"class":1090},[1052,5991,1879],{"class":1090},[1052,5993,1657],{"class":1090},[1052,5995,5996,5999,6002,6005,6007,6009,6011,6013,6015,6017],{"class":1054,"line":3931},[1052,5997,5998],{"class":1069},"                timestamp ",[1052,6000,6001],{"class":1065},"for",[1052,6003,6004],{"class":1069}," timestamp ",[1052,6006,1412],{"class":1065},[1052,6008,2398],{"class":2378},[1052,6010,1091],{"class":1090},[1052,6012,5520],{"class":1367},[1052,6014,1850],{"class":1090},[1052,6016,5606],{"class":1367},[1052,6018,1936],{"class":1090},[1052,6020,6021,6024,6026,6029],{"class":1054,"line":3951},[1052,6022,6023],{"class":1065},"                if",[1052,6025,6004],{"class":1069},[1052,6027,6028],{"class":1754},">",[1052,6030,6031],{"class":1069}," window_start\n",[1052,6033,6034],{"class":1054,"line":3970},[1052,6035,6036],{"class":1090},"            ]\n",[1052,6038,6039],{"class":1054,"line":3993},[1052,6040,1732],{"class":1069},[1052,6042,6043],{"class":1054,"line":3999},[1052,6044,6045],{"class":1058},"        # Check current count\n",[1052,6047,6048,6051,6053,6056,6058,6060,6062,6064,6066,6068,6070,6072,6074],{"class":1054,"line":4004},[1052,6049,6050],{"class":1069},"        current_count ",[1052,6052,1357],{"class":1090},[1052,6054,6055],{"class":1804}," len",[1052,6057,1180],{"class":1090},[1052,6059,2325],{"class":2378},[1052,6061,1091],{"class":1090},[1052,6063,5520],{"class":1367},[1052,6065,1091],{"class":1090},[1052,6067,2057],{"class":1221},[1052,6069,1180],{"class":1090},[1052,6071,5606],{"class":1221},[1052,6073,1153],{"class":1090},[1052,6075,6076],{"class":1090}," []))\n",[1052,6078,6079,6081,6084,6087,6090],{"class":1054,"line":4025},[1052,6080,1947],{"class":1065},[1052,6082,6083],{"class":1069}," current_count ",[1052,6085,6086],{"class":1754},">=",[1052,6088,6089],{"class":1227}," 100",[1052,6091,6092],{"class":1058},"  # 100 requests per minute\n",[1052,6094,6095],{"class":1054,"line":4030},[1052,6096,1237],{"class":1069},[1052,6098,6099,6101,6103,6106,6108,6110,6112,6114],{"class":1054,"line":4065},[1052,6100,1403],{"class":1169},[1052,6102,1173],{"class":1169},[1052,6104,6105],{"class":1176}," update_rate_limit",[1052,6107,1180],{"class":1090},[1052,6109,2325],{"class":2324},[1052,6111,1153],{"class":1090},[1052,6113,5877],{"class":1183},[1052,6115,1187],{"class":1090},[1052,6117,6118,6120,6123],{"class":1054,"line":4075},[1052,6119,2353],{"class":1193},[1052,6121,6122],{"class":1197},"Update rate limit counter.",[1052,6124,1201],{"class":1193},[1052,6126,6127,6129,6131,6133,6135,6137,6139,6141],{"class":1054,"line":4081},[1052,6128,4789],{"class":1065},[1052,6130,1216],{"class":1069},[1052,6132,1091],{"class":1090},[1052,6134,1222],{"class":1221},[1052,6136,1180],{"class":1090},[1052,6138,5908],{"class":1227},[1052,6140,2065],{"class":1090},[1052,6142,6143],{"class":1058},"  # Simulate async operation\n",[1052,6145,6146],{"class":1054,"line":4090},[1052,6147,1732],{"class":1069},[1052,6149,6150,6152,6154,6156,6158,6160],{"class":1054,"line":4102},[1052,6151,5919],{"class":1069},[1052,6153,1357],{"class":1090},[1052,6155,4942],{"class":1069},[1052,6157,1091],{"class":1090},[1052,6159,1302],{"class":1221},[1052,6161,1305],{"class":1090},[1052,6163,6164],{"class":1054,"line":4121},[1052,6165,1732],{"class":1069},[1052,6167,6168,6170,6172,6175,6178,6180,6182,6184],{"class":1054,"line":4142},[1052,6169,2419],{"class":1065},[1052,6171,5964],{"class":1069},[1052,6173,6174],{"class":1754},"not",[1052,6176,6177],{"class":1754}," in",[1052,6179,2398],{"class":2378},[1052,6181,1091],{"class":1090},[1052,6183,5520],{"class":1367},[1052,6185,1640],{"class":1090},[1052,6187,6188,6190,6192,6194,6196,6198,6200,6202],{"class":1054,"line":4162},[1052,6189,5979],{"class":2378},[1052,6191,1091],{"class":1090},[1052,6193,5520],{"class":1367},[1052,6195,1850],{"class":1090},[1052,6197,5606],{"class":1367},[1052,6199,1876],{"class":1090},[1052,6201,1879],{"class":1090},[1052,6203,1397],{"class":1090},[1052,6205,6206],{"class":1054,"line":4183},[1052,6207,1732],{"class":1069},[1052,6209,6210,6212,6214,6216,6218,6220,6223,6225,6227,6230],{"class":1054,"line":4212},[1052,6211,4890],{"class":2378},[1052,6213,1091],{"class":1090},[1052,6215,5520],{"class":1367},[1052,6217,1850],{"class":1090},[1052,6219,5606],{"class":1367},[1052,6221,6222],{"class":1090},"].",[1052,6224,1455],{"class":1221},[1052,6226,1180],{"class":1090},[1052,6228,6229],{"class":1221},"current_time",[1052,6231,1231],{"class":1090},[1030,6233,6235],{"id":6234},"async-safety","Async Safety",[1034,6237,6239],{"id":6238},"understanding-async-safety","Understanding Async Safety",[1026,6241,6242],{},"Async safety refers to the ability of code to work correctly in asynchronous contexts without causing race conditions, deadlocks, or other concurrency issues.",[1042,6244,6246],{"className":1044,"code":6245,"language":1046,"meta":1047,"style":1047},"# Thread-safe vs Async-safe patterns\nimport asyncio\nimport threading\nfrom django.core.cache import cache\nfrom asgiref.sync import sync_to_async\n\n# NOT async-safe: Global state without protection\ncounter = 0\n\nasync def unsafe_increment():\n    \"\"\"NOT async-safe - race condition possible.\"\"\"\n    global counter\n    current = counter\n    await asyncio.sleep(0.001)  # Simulate async operation\n    counter = current + 1\n\n# Async-safe: Using asyncio.Lock\nasync_lock = asyncio.Lock()\nsafe_counter = 0\n\nasync def safe_increment():\n    \"\"\"Async-safe increment with lock.\"\"\"\n    global safe_counter\n    \n    async with async_lock:\n        current = safe_counter\n        await asyncio.sleep(0.001)\n        safe_counter = current + 1\n\n# Async-safe: Using local state\nasync def local_state_example():\n    \"\"\"Async-safe using local variables.\"\"\"\n    local_counter = 0\n    \n    async def increment():\n        nonlocal local_counter\n        local_counter += 1\n    \n    # Multiple concurrent calls are safe\n    await asyncio.gather(*[increment() for _ in range(100)])\n    return local_counter\n\n# Database operations safety\nclass AsyncSafeUserService:\n    \"\"\"Async-safe user service.\"\"\"\n    \n    def __init__(self):\n        self._lock = asyncio.Lock()\n    \n    async def create_user_safely(self, username, email):\n        \"\"\"Create user with async safety.\"\"\"\n        async with self._lock:\n            # Check if user exists\n            exists = await sync_to_async(\n                User.objects.filter(username=username).exists\n            )()\n            \n            if exists:\n                raise ValueError(f\"User {username} already exists\")\n            \n            # Create user\n            user = await sync_to_async(User.objects.create)(\n                username=username,\n                email=email\n            )\n            \n            return user\n    \n    async def update_user_profile(self, user_id, **kwargs):\n        \"\"\"Update user profile safely.\"\"\"\n        @sync_to_async\n        def update_profile():\n            try:\n                user = User.objects.select_for_update().get(id=user_id)\n                \n                for field, value in kwargs.items():\n                    if hasattr(user, field):\n                        setattr(user, field, value)\n                \n                user.save()\n                return user\n            except User.DoesNotExist:\n                return None\n        \n        return await update_profile()\n",[1049,6247,6248,6253,6259,6266,6287,6301,6305,6310,6320,6324,6335,6344,6352,6361,6379,6395,6399,6404,6420,6429,6433,6444,6453,6460,6464,6475,6484,6500,6513,6517,6522,6533,6542,6551,6555,6566,6574,6584,6588,6593,6632,6638,6642,6647,6656,6665,6669,6681,6700,6704,6729,6738,6752,6757,6770,6798,6803,6807,6816,6842,6846,6851,6878,6889,6899,6903,6907,6914,6918,6944,6953,6959,6968,6975,7009,7014,7038,7057,7077,7081,7092,7098,7112,7119,7123],{"__ignoreMap":1047},[1052,6249,6250],{"class":1054,"line":1055},[1052,6251,6252],{"class":1058},"# Thread-safe vs Async-safe patterns\n",[1052,6254,6255,6257],{"class":1054,"line":1062},[1052,6256,1066],{"class":1065},[1052,6258,1070],{"class":1069},[1052,6260,6261,6263],{"class":1054,"line":1073},[1052,6262,1066],{"class":1065},[1052,6264,6265],{"class":1069}," threading\n",[1052,6267,6268,6270,6272,6274,6277,6279,6282,6284],{"class":1054,"line":1081},[1052,6269,1084],{"class":1065},[1052,6271,1087],{"class":1069},[1052,6273,1091],{"class":1090},[1052,6275,6276],{"class":1069},"core",[1052,6278,1091],{"class":1090},[1052,6280,6281],{"class":1069},"cache ",[1052,6283,1066],{"class":1065},[1052,6285,6286],{"class":1069}," cache\n",[1052,6288,6289,6291,6293,6295,6297,6299],{"class":1054,"line":1102},[1052,6290,1084],{"class":1065},[1052,6292,1124],{"class":1069},[1052,6294,1091],{"class":1090},[1052,6296,1129],{"class":1069},[1052,6298,1066],{"class":1065},[1052,6300,1134],{"class":1069},[1052,6302,6303],{"class":1054,"line":1119},[1052,6304,1163],{"emptyLinePlaceholder":1162},[1052,6306,6307],{"class":1054,"line":1137},[1052,6308,6309],{"class":1058},"# NOT async-safe: Global state without protection\n",[1052,6311,6312,6315,6317],{"class":1054,"line":1159},[1052,6313,6314],{"class":1069},"counter ",[1052,6316,1357],{"class":1090},[1052,6318,6319],{"class":1227}," 0\n",[1052,6321,6322],{"class":1054,"line":1166},[1052,6323,1163],{"emptyLinePlaceholder":1162},[1052,6325,6326,6328,6330,6333],{"class":1054,"line":1190},[1052,6327,1170],{"class":1169},[1052,6329,1173],{"class":1169},[1052,6331,6332],{"class":1176}," unsafe_increment",[1052,6334,4099],{"class":1090},[1052,6336,6337,6339,6342],{"class":1054,"line":1204},[1052,6338,1194],{"class":1193},[1052,6340,6341],{"class":1197},"NOT async-safe - race condition possible.",[1052,6343,1201],{"class":1193},[1052,6345,6346,6349],{"class":1054,"line":1210},[1052,6347,6348],{"class":1169},"    global",[1052,6350,6351],{"class":1069}," counter\n",[1052,6353,6354,6357,6359],{"class":1054,"line":1234},[1052,6355,6356],{"class":1069},"    current ",[1052,6358,1357],{"class":1090},[1052,6360,6351],{"class":1069},[1052,6362,6363,6365,6367,6369,6371,6373,6375,6377],{"class":1054,"line":1240},[1052,6364,1213],{"class":1065},[1052,6366,1216],{"class":1069},[1052,6368,1091],{"class":1090},[1052,6370,1222],{"class":1221},[1052,6372,1180],{"class":1090},[1052,6374,5908],{"class":1227},[1052,6376,2065],{"class":1090},[1052,6378,6143],{"class":1058},[1052,6380,6381,6384,6386,6389,6392],{"class":1054,"line":1252},[1052,6382,6383],{"class":1069},"    counter ",[1052,6385,1357],{"class":1090},[1052,6387,6388],{"class":1069}," current ",[1052,6390,6391],{"class":1754},"+",[1052,6393,6394],{"class":1227}," 1\n",[1052,6396,6397],{"class":1054,"line":1280},[1052,6398,1163],{"emptyLinePlaceholder":1162},[1052,6400,6401],{"class":1054,"line":1308},[1052,6402,6403],{"class":1058},"# Async-safe: Using asyncio.Lock\n",[1052,6405,6406,6409,6411,6413,6415,6418],{"class":1054,"line":1314},[1052,6407,6408],{"class":1069},"async_lock ",[1052,6410,1357],{"class":1090},[1052,6412,1216],{"class":1069},[1052,6414,1091],{"class":1090},[1052,6416,6417],{"class":1221},"Lock",[1052,6419,1305],{"class":1090},[1052,6421,6422,6425,6427],{"class":1054,"line":1319},[1052,6423,6424],{"class":1069},"safe_counter ",[1052,6426,1357],{"class":1090},[1052,6428,6319],{"class":1227},[1052,6430,6431],{"class":1054,"line":1335},[1052,6432,1163],{"emptyLinePlaceholder":1162},[1052,6434,6435,6437,6439,6442],{"class":1054,"line":1345},[1052,6436,1170],{"class":1169},[1052,6438,1173],{"class":1169},[1052,6440,6441],{"class":1176}," safe_increment",[1052,6443,4099],{"class":1090},[1052,6445,6446,6448,6451],{"class":1054,"line":1351},[1052,6447,1194],{"class":1193},[1052,6449,6450],{"class":1197},"Async-safe increment with lock.",[1052,6452,1201],{"class":1193},[1052,6454,6455,6457],{"class":1054,"line":1378},[1052,6456,6348],{"class":1169},[1052,6458,6459],{"class":1069}," safe_counter\n",[1052,6461,6462],{"class":1054,"line":1383},[1052,6463,1237],{"class":1069},[1052,6465,6466,6468,6470,6473],{"class":1054,"line":1389},[1052,6467,1403],{"class":1065},[1052,6469,1620],{"class":1065},[1052,6471,6472],{"class":1069}," async_lock",[1052,6474,1640],{"class":1090},[1052,6476,6477,6480,6482],{"class":1054,"line":1400},[1052,6478,6479],{"class":1069},"        current ",[1052,6481,1357],{"class":1090},[1052,6483,6459],{"class":1069},[1052,6485,6486,6488,6490,6492,6494,6496,6498],{"class":1054,"line":1447},[1052,6487,4789],{"class":1065},[1052,6489,1216],{"class":1069},[1052,6491,1091],{"class":1090},[1052,6493,1222],{"class":1221},[1052,6495,1180],{"class":1090},[1052,6497,5908],{"class":1227},[1052,6499,1231],{"class":1090},[1052,6501,6502,6505,6507,6509,6511],{"class":1054,"line":1460},[1052,6503,6504],{"class":1069},"        safe_counter ",[1052,6506,1357],{"class":1090},[1052,6508,6388],{"class":1069},[1052,6510,6391],{"class":1754},[1052,6512,6394],{"class":1227},[1052,6514,6515],{"class":1054,"line":1482},[1052,6516,1163],{"emptyLinePlaceholder":1162},[1052,6518,6519],{"class":1054,"line":1502},[1052,6520,6521],{"class":1058},"# Async-safe: Using local state\n",[1052,6523,6524,6526,6528,6531],{"class":1054,"line":1527},[1052,6525,1170],{"class":1169},[1052,6527,1173],{"class":1169},[1052,6529,6530],{"class":1176}," local_state_example",[1052,6532,4099],{"class":1090},[1052,6534,6535,6537,6540],{"class":1054,"line":1533},[1052,6536,1194],{"class":1193},[1052,6538,6539],{"class":1197},"Async-safe using local variables.",[1052,6541,1201],{"class":1193},[1052,6543,6544,6547,6549],{"class":1054,"line":1538},[1052,6545,6546],{"class":1069},"    local_counter ",[1052,6548,1357],{"class":1090},[1052,6550,6319],{"class":1227},[1052,6552,6553],{"class":1054,"line":1547},[1052,6554,1237],{"class":1069},[1052,6556,6557,6559,6561,6564],{"class":1054,"line":1564},[1052,6558,1403],{"class":1169},[1052,6560,1173],{"class":1169},[1052,6562,6563],{"class":1176}," increment",[1052,6565,4099],{"class":1090},[1052,6567,6568,6571],{"class":1054,"line":1579},[1052,6569,6570],{"class":1169},"        nonlocal",[1052,6572,6573],{"class":1069}," local_counter\n",[1052,6575,6576,6579,6582],{"class":1054,"line":1584},[1052,6577,6578],{"class":1069},"        local_counter ",[1052,6580,6581],{"class":1090},"+=",[1052,6583,6394],{"class":1227},[1052,6585,6586],{"class":1054,"line":1589},[1052,6587,1237],{"class":1069},[1052,6589,6590],{"class":1054,"line":1605},[1052,6591,6592],{"class":1058},"    # Multiple concurrent calls are safe\n",[1052,6594,6595,6597,6599,6601,6603,6605,6607,6609,6612,6614,6616,6619,6621,6624,6626,6629],{"class":1054,"line":1615},[1052,6596,1213],{"class":1065},[1052,6598,1216],{"class":1069},[1052,6600,1091],{"class":1090},[1052,6602,1749],{"class":1221},[1052,6604,1180],{"class":1090},[1052,6606,1755],{"class":1754},[1052,6608,1850],{"class":1090},[1052,6610,6611],{"class":1221},"increment",[1052,6613,1631],{"class":1090},[1052,6615,1406],{"class":1065},[1052,6617,6618],{"class":1221}," _ ",[1052,6620,1412],{"class":1065},[1052,6622,6623],{"class":1804}," range",[1052,6625,1180],{"class":1090},[1052,6627,6628],{"class":1227},"100",[1052,6630,6631],{"class":1090},")])\n",[1052,6633,6634,6636],{"class":1054,"line":1643},[1052,6635,1243],{"class":1065},[1052,6637,6573],{"class":1069},[1052,6639,6640],{"class":1054,"line":1649},[1052,6641,1163],{"emptyLinePlaceholder":1162},[1052,6643,6644],{"class":1054,"line":1660},[1052,6645,6646],{"class":1058},"# Database operations safety\n",[1052,6648,6649,6651,6654],{"class":1054,"line":1683},[1052,6650,2285],{"class":1169},[1052,6652,6653],{"class":2288}," AsyncSafeUserService",[1052,6655,1640],{"class":1090},[1052,6657,6658,6660,6663],{"class":1054,"line":1703},[1052,6659,1194],{"class":1193},[1052,6661,6662],{"class":1197},"Async-safe user service.",[1052,6664,1201],{"class":1193},[1052,6666,6667],{"class":1054,"line":1723},[1052,6668,1237],{"class":1069},[1052,6670,6671,6673,6675,6677,6679],{"class":1054,"line":1729},[1052,6672,4871],{"class":1169},[1052,6674,4874],{"class":1804},[1052,6676,1180],{"class":1090},[1052,6678,2325],{"class":2324},[1052,6680,1187],{"class":1090},[1052,6682,6683,6685,6687,6690,6692,6694,6696,6698],{"class":1054,"line":1735},[1052,6684,4890],{"class":2378},[1052,6686,1091],{"class":1090},[1052,6688,6689],{"class":1367},"_lock",[1052,6691,1879],{"class":1090},[1052,6693,1216],{"class":1069},[1052,6695,1091],{"class":1090},[1052,6697,6417],{"class":1221},[1052,6699,1305],{"class":1090},[1052,6701,6702],{"class":1054,"line":1772},[1052,6703,1237],{"class":1069},[1052,6705,6706,6708,6710,6713,6715,6717,6719,6722,6724,6727],{"class":1054,"line":1777},[1052,6707,1403],{"class":1169},[1052,6709,1173],{"class":1169},[1052,6711,6712],{"class":1176}," create_user_safely",[1052,6714,1180],{"class":1090},[1052,6716,2325],{"class":2324},[1052,6718,1153],{"class":1090},[1052,6720,6721],{"class":1183}," username",[1052,6723,1153],{"class":1090},[1052,6725,6726],{"class":1183}," email",[1052,6728,1187],{"class":1090},[1052,6730,6731,6733,6736],{"class":1054,"line":1788},[1052,6732,2353],{"class":1193},[1052,6734,6735],{"class":1197},"Create user with async safety.",[1052,6737,1201],{"class":1193},[1052,6739,6740,6742,6744,6746,6748,6750],{"class":1054,"line":1836},[1052,6741,2048],{"class":1065},[1052,6743,1620],{"class":1065},[1052,6745,2398],{"class":2378},[1052,6747,1091],{"class":1090},[1052,6749,6689],{"class":1367},[1052,6751,1640],{"class":1090},[1052,6753,6754],{"class":1054,"line":1865},[1052,6755,6756],{"class":1058},"            # Check if user exists\n",[1052,6758,6759,6762,6764,6766,6768],{"class":1054,"line":1908},[1052,6760,6761],{"class":1069},"            exists ",[1052,6763,1357],{"class":1090},[1052,6765,1360],{"class":1065},[1052,6767,2482],{"class":1221},[1052,6769,4118],{"class":1090},[1052,6771,6772,6775,6777,6779,6781,6783,6785,6788,6790,6792,6795],{"class":1054,"line":1916},[1052,6773,6774],{"class":1221},"                User",[1052,6776,1091],{"class":1090},[1052,6778,1368],{"class":1367},[1052,6780,1091],{"class":1090},[1052,6782,1423],{"class":1221},[1052,6784,1180],{"class":1090},[1052,6786,6787],{"class":1428},"username",[1052,6789,1357],{"class":1090},[1052,6791,6787],{"class":1221},[1052,6793,6794],{"class":1090},").",[1052,6796,6797],{"class":1367},"exists\n",[1052,6799,6800],{"class":1054,"line":1939},[1052,6801,6802],{"class":1090},"            )()\n",[1052,6804,6805],{"class":1054,"line":1944},[1052,6806,2787],{"class":1069},[1052,6808,6809,6811,6814],{"class":1054,"line":1970},[1052,6810,1839],{"class":1065},[1052,6812,6813],{"class":1069}," exists",[1052,6815,1640],{"class":1090},[1052,6817,6818,6821,6824,6826,6828,6831,6833,6835,6837,6840],{"class":1054,"line":1975},[1052,6819,6820],{"class":1065},"                raise",[1052,6822,6823],{"class":1859}," ValueError",[1052,6825,1180],{"class":1090},[1052,6827,5306],{"class":1169},[1052,6829,6830],{"class":1259},"\"User ",[1052,6832,2021],{"class":2020},[1052,6834,6787],{"class":1221},[1052,6836,2026],{"class":2020},[1052,6838,6839],{"class":1259}," already exists\"",[1052,6841,1231],{"class":1090},[1052,6843,6844],{"class":1054,"line":1996},[1052,6845,2787],{"class":1069},[1052,6847,6848],{"class":1054,"line":2006},[1052,6849,6850],{"class":1058},"            # Create user\n",[1052,6852,6853,6856,6858,6860,6862,6864,6867,6869,6871,6873,6875],{"class":1054,"line":2032},[1052,6854,6855],{"class":1069},"            user ",[1052,6857,1357],{"class":1090},[1052,6859,1360],{"class":1065},[1052,6861,2482],{"class":1221},[1052,6863,1180],{"class":1090},[1052,6865,6866],{"class":1221},"User",[1052,6868,1091],{"class":1090},[1052,6870,1368],{"class":1367},[1052,6872,1091],{"class":1090},[1052,6874,4115],{"class":1367},[1052,6876,6877],{"class":1090},")(\n",[1052,6879,6880,6883,6885,6887],{"class":1054,"line":2037},[1052,6881,6882],{"class":1428},"                username",[1052,6884,1357],{"class":1090},[1052,6886,6787],{"class":1221},[1052,6888,1277],{"class":1090},[1052,6890,6891,6894,6896],{"class":1054,"line":2045},[1052,6892,6893],{"class":1428},"                email",[1052,6895,1357],{"class":1090},[1052,6897,6898],{"class":1221},"email\n",[1052,6900,6901],{"class":1054,"line":2075},[1052,6902,4215],{"class":1090},[1052,6904,6905],{"class":1054,"line":2095},[1052,6906,2787],{"class":1069},[1052,6908,6909,6911],{"class":1054,"line":2112},[1052,6910,2438],{"class":1065},[1052,6912,6913],{"class":1069}," user\n",[1052,6915,6916],{"class":1054,"line":2119},[1052,6917,1237],{"class":1069},[1052,6919,6920,6922,6924,6927,6929,6931,6933,6936,6938,6940,6942],{"class":1054,"line":2155},[1052,6921,1403],{"class":1169},[1052,6923,1173],{"class":1169},[1052,6925,6926],{"class":1176}," update_user_profile",[1052,6928,1180],{"class":1090},[1052,6930,2325],{"class":2324},[1052,6932,1153],{"class":1090},[1052,6934,6935],{"class":1183}," user_id",[1052,6937,1153],{"class":1090},[1052,6939,2343],{"class":1754},[1052,6941,2346],{"class":1183},[1052,6943,1187],{"class":1090},[1052,6945,6946,6948,6951],{"class":1054,"line":2170},[1052,6947,2353],{"class":1193},[1052,6949,6950],{"class":1197},"Update user profile safely.",[1052,6952,1201],{"class":1193},[1052,6954,6955,6957],{"class":1054,"line":3351},[1052,6956,4084],{"class":1090},[1052,6958,4087],{"class":1176},[1052,6960,6961,6963,6966],{"class":1054,"line":3383},[1052,6962,4093],{"class":1169},[1052,6964,6965],{"class":1176}," update_profile",[1052,6967,4099],{"class":1090},[1052,6969,6970,6973],{"class":1054,"line":3393},[1052,6971,6972],{"class":1065},"            try",[1052,6974,1640],{"class":1090},[1052,6976,6977,6980,6982,6985,6987,6989,6991,6994,6996,6998,7000,7002,7004,7007],{"class":1054,"line":3402},[1052,6978,6979],{"class":1069},"                user ",[1052,6981,1357],{"class":1090},[1052,6983,6984],{"class":1069}," User",[1052,6986,1091],{"class":1090},[1052,6988,1368],{"class":1367},[1052,6990,1091],{"class":1090},[1052,6992,6993],{"class":1221},"select_for_update",[1052,6995,1299],{"class":1090},[1052,6997,2057],{"class":1221},[1052,6999,1180],{"class":1090},[1052,7001,1466],{"class":1428},[1052,7003,1357],{"class":1090},[1052,7005,7006],{"class":1221},"user_id",[1052,7008,1231],{"class":1090},[1052,7010,7011],{"class":1054,"line":3407},[1052,7012,7013],{"class":1069},"                \n",[1052,7015,7016,7019,7022,7024,7027,7029,7031,7033,7036],{"class":1054,"line":3443},[1052,7017,7018],{"class":1065},"                for",[1052,7020,7021],{"class":1069}," field",[1052,7023,1153],{"class":1090},[1052,7025,7026],{"class":1069}," value ",[1052,7028,1412],{"class":1065},[1052,7030,3686],{"class":1069},[1052,7032,1091],{"class":1090},[1052,7034,7035],{"class":1221},"items",[1052,7037,4099],{"class":1090},[1052,7039,7040,7043,7046,7048,7051,7053,7055],{"class":1054,"line":3453},[1052,7041,7042],{"class":1065},"                    if",[1052,7044,7045],{"class":1804}," hasattr",[1052,7047,1180],{"class":1090},[1052,7049,7050],{"class":1221},"user",[1052,7052,1153],{"class":1090},[1052,7054,7021],{"class":1221},[1052,7056,1187],{"class":1090},[1052,7058,7059,7062,7064,7066,7068,7070,7072,7075],{"class":1054,"line":3460},[1052,7060,7061],{"class":1804},"                        setattr",[1052,7063,1180],{"class":1090},[1052,7065,7050],{"class":1221},[1052,7067,1153],{"class":1090},[1052,7069,7021],{"class":1221},[1052,7071,1153],{"class":1090},[1052,7073,7074],{"class":1221}," value",[1052,7076,1231],{"class":1090},[1052,7078,7079],{"class":1054,"line":3465},[1052,7080,7013],{"class":1069},[1052,7082,7083,7086,7088,7090],{"class":1054,"line":3501},[1052,7084,7085],{"class":1069},"                user",[1052,7087,1091],{"class":1090},[1052,7089,4547],{"class":1221},[1052,7091,1305],{"class":1090},[1052,7093,7094,7096],{"class":1054,"line":3511},[1052,7095,2098],{"class":1065},[1052,7097,6913],{"class":1069},[1052,7099,7100,7103,7105,7107,7110],{"class":1054,"line":3518},[1052,7101,7102],{"class":1065},"            except",[1052,7104,6984],{"class":1069},[1052,7106,1091],{"class":1090},[1052,7108,7109],{"class":1367},"DoesNotExist",[1052,7111,1640],{"class":1090},[1052,7113,7114,7116],{"class":1054,"line":3523},[1052,7115,2098],{"class":1065},[1052,7117,7118],{"class":1434}," None\n",[1052,7120,7121],{"class":1054,"line":3555},[1052,7122,1732],{"class":1069},[1052,7124,7125,7127,7129,7131],{"class":1054,"line":3565},[1052,7126,1947],{"class":1065},[1052,7128,1360],{"class":1065},[1052,7130,6965],{"class":1221},[1052,7132,1305],{"class":1090},[1034,7134,7136],{"id":7135},"async-safe-patterns","Async-Safe Patterns",[1042,7138,7140],{"className":1044,"code":7139,"language":1046,"meta":1047,"style":1047},"# Async-safe singleton pattern\nclass AsyncSafeSingleton:\n    \"\"\"Async-safe singleton implementation.\"\"\"\n    \n    _instance = None\n    _lock = asyncio.Lock()\n    \n    def __new__(cls):\n        if cls._instance is None:\n            cls._instance = super().__new__(cls)\n        return cls._instance\n    \n    @classmethod\n    async def get_instance(cls):\n        \"\"\"Get singleton instance safely.\"\"\"\n        if cls._instance is None:\n            async with cls._lock:\n                if cls._instance is None:\n                    cls._instance = cls()\n                    await cls._instance.initialize()\n        \n        return cls._instance\n    \n    async def initialize(self):\n        \"\"\"Initialize singleton asynchronously.\"\"\"\n        # Async initialization code\n        await asyncio.sleep(0.1)\n        self.initialized = True\n\n# Async-safe connection pool\nclass AsyncConnectionPool:\n    \"\"\"Async-safe connection pool.\"\"\"\n    \n    def __init__(self, max_connections=10):\n        self.max_connections = max_connections\n        self.connections = asyncio.Queue(maxsize=max_connections)\n        self.created_connections = 0\n        self._lock = asyncio.Lock()\n    \n    async def get_connection(self):\n        \"\"\"Get connection from pool.\"\"\"\n        try:\n            # Try to get existing connection\n            connection = self.connections.get_nowait()\n            return connection\n        except asyncio.QueueEmpty:\n            # Create new connection if under limit\n            async with self._lock:\n                if self.created_connections \u003C self.max_connections:\n                    connection = await self.create_connection()\n                    self.created_connections += 1\n                    return connection\n            \n            # Wait for available connection\n            return await self.connections.get()\n    \n    async def return_connection(self, connection):\n        \"\"\"Return connection to pool.\"\"\"\n        if connection.is_healthy():\n            await self.connections.put(connection)\n        else:\n            # Replace unhealthy connection\n            async with self._lock:\n                self.created_connections -= 1\n    \n    async def create_connection(self):\n        \"\"\"Create new connection.\"\"\"\n        # Simulate connection creation\n        await asyncio.sleep(0.1)\n        return MockConnection()\n\nclass MockConnection:\n    \"\"\"Mock connection for example.\"\"\"\n    \n    def __init__(self):\n        self.healthy = True\n    \n    def is_healthy(self):\n        return self.healthy\n\n# Async-safe caching\nclass AsyncSafeCache:\n    \"\"\"Async-safe cache implementation.\"\"\"\n    \n    def __init__(self):\n        self._cache = {}\n        self._locks = {}\n        self._main_lock = asyncio.Lock()\n    \n    async def get(self, key):\n        \"\"\"Get value from cache.\"\"\"\n        return self._cache.get(key)\n    \n    async def set(self, key, value, ttl=None):\n        \"\"\"Set value in cache with async safety.\"\"\"\n        # Get or create lock for this key\n        async with self._main_lock:\n            if key not in self._locks:\n                self._locks[key] = asyncio.Lock()\n            key_lock = self._locks[key]\n        \n        # Set value with key-specific lock\n        async with key_lock:\n            self._cache[key] = {\n                'value': value,\n                'expires': time.time() + ttl if ttl else None\n            }\n    \n    async def get_or_set(self, key, factory_func, ttl=None):\n        \"\"\"Get value or set using factory function.\"\"\"\n        # Check if value exists and is not expired\n        cached = await self.get(key)\n        if cached and (not cached['expires'] or cached['expires'] > time.time()):\n            return cached['value']\n        \n        # Get or create lock for this key\n        async with self._main_lock:\n            if key not in self._locks:\n                self._locks[key] = asyncio.Lock()\n            key_lock = self._locks[key]\n        \n        # Double-check pattern\n        async with key_lock:\n            cached = await self.get(key)\n            if cached and (not cached['expires'] or cached['expires'] > time.time()):\n                return cached['value']\n            \n            # Generate new value\n            if asyncio.iscoroutinefunction(factory_func):\n                value = await factory_func()\n            else:\n                value = factory_func()\n            \n            await self.set(key, value, ttl)\n            return value\n",[1049,7141,7142,7147,7156,7165,7169,7178,7193,7197,7211,7231,7256,7267,7271,7279,7294,7303,7319,7333,7349,7364,7382,7386,7396,7400,7415,7424,7429,7445,7459,7463,7468,7477,7486,7490,7511,7525,7554,7567,7585,7589,7604,7613,7619,7624,7644,7651,7664,7669,7683,7704,7722,7736,7743,7747,7752,7770,7774,7794,7803,7816,7838,7844,7849,7863,7877,7881,7896,7905,7910,7926,7935,7939,7947,7956,7960,7972,7985,7989,8002,8013,8017,8022,8031,8040,8044,8056,8069,8082,8101,8105,8124,8133,8154,8158,8191,8200,8205,8219,8238,8262,8281,8285,8290,8301,8319,8334,8368,8372,8376,8408,8417,8422,8443,8498,8514,8518,8522,8536,8554,8578,8596,8600,8605,8615,8636,8684,8700,8704,8709,8726,8739,8745,8755,8759,8784],{"__ignoreMap":1047},[1052,7143,7144],{"class":1054,"line":1055},[1052,7145,7146],{"class":1058},"# Async-safe singleton pattern\n",[1052,7148,7149,7151,7154],{"class":1054,"line":1062},[1052,7150,2285],{"class":1169},[1052,7152,7153],{"class":2288}," AsyncSafeSingleton",[1052,7155,1640],{"class":1090},[1052,7157,7158,7160,7163],{"class":1054,"line":1073},[1052,7159,1194],{"class":1193},[1052,7161,7162],{"class":1197},"Async-safe singleton implementation.",[1052,7164,1201],{"class":1193},[1052,7166,7167],{"class":1054,"line":1081},[1052,7168,1237],{"class":1069},[1052,7170,7171,7174,7176],{"class":1054,"line":1102},[1052,7172,7173],{"class":1069},"    _instance ",[1052,7175,1357],{"class":1090},[1052,7177,7118],{"class":1434},[1052,7179,7180,7183,7185,7187,7189,7191],{"class":1054,"line":1119},[1052,7181,7182],{"class":1069},"    _lock ",[1052,7184,1357],{"class":1090},[1052,7186,1216],{"class":1069},[1052,7188,1091],{"class":1090},[1052,7190,6417],{"class":1221},[1052,7192,1305],{"class":1090},[1052,7194,7195],{"class":1054,"line":1137},[1052,7196,1237],{"class":1069},[1052,7198,7199,7201,7204,7206,7209],{"class":1054,"line":1159},[1052,7200,4871],{"class":1169},[1052,7202,7203],{"class":1804}," __new__",[1052,7205,1180],{"class":1090},[1052,7207,7208],{"class":1183},"cls",[1052,7210,1187],{"class":1090},[1052,7212,7213,7215,7218,7220,7223,7226,7229],{"class":1054,"line":1166},[1052,7214,2419],{"class":1065},[1052,7216,7217],{"class":2378}," cls",[1052,7219,1091],{"class":1090},[1052,7221,7222],{"class":1367},"_instance",[1052,7224,7225],{"class":1754}," is",[1052,7227,7228],{"class":1434}," None",[1052,7230,1640],{"class":1090},[1052,7232,7233,7236,7238,7240,7242,7245,7247,7250,7252,7254],{"class":1054,"line":1190},[1052,7234,7235],{"class":2378},"            cls",[1052,7237,1091],{"class":1090},[1052,7239,7222],{"class":1367},[1052,7241,1879],{"class":1090},[1052,7243,7244],{"class":1859}," super",[1052,7246,1299],{"class":1090},[1052,7248,7249],{"class":1804},"__new__",[1052,7251,1180],{"class":1090},[1052,7253,7208],{"class":2378},[1052,7255,1231],{"class":1090},[1052,7257,7258,7260,7262,7264],{"class":1054,"line":1204},[1052,7259,1947],{"class":1065},[1052,7261,7217],{"class":2378},[1052,7263,1091],{"class":1090},[1052,7265,7266],{"class":1367},"_instance\n",[1052,7268,7269],{"class":1054,"line":1210},[1052,7270,1237],{"class":1069},[1052,7272,7273,7276],{"class":1054,"line":1234},[1052,7274,7275],{"class":1090},"    @",[1052,7277,7278],{"class":1859},"classmethod\n",[1052,7280,7281,7283,7285,7288,7290,7292],{"class":1054,"line":1240},[1052,7282,1403],{"class":1169},[1052,7284,1173],{"class":1169},[1052,7286,7287],{"class":1176}," get_instance",[1052,7289,1180],{"class":1090},[1052,7291,7208],{"class":1183},[1052,7293,1187],{"class":1090},[1052,7295,7296,7298,7301],{"class":1054,"line":1252},[1052,7297,2353],{"class":1193},[1052,7299,7300],{"class":1197},"Get singleton instance safely.",[1052,7302,1201],{"class":1193},[1052,7304,7305,7307,7309,7311,7313,7315,7317],{"class":1054,"line":1280},[1052,7306,2419],{"class":1065},[1052,7308,7217],{"class":2378},[1052,7310,1091],{"class":1090},[1052,7312,7222],{"class":1367},[1052,7314,7225],{"class":1754},[1052,7316,7228],{"class":1434},[1052,7318,1640],{"class":1090},[1052,7320,7321,7323,7325,7327,7329,7331],{"class":1054,"line":1308},[1052,7322,3885],{"class":1065},[1052,7324,1620],{"class":1065},[1052,7326,7217],{"class":2378},[1052,7328,1091],{"class":1090},[1052,7330,6689],{"class":1367},[1052,7332,1640],{"class":1090},[1052,7334,7335,7337,7339,7341,7343,7345,7347],{"class":1054,"line":1314},[1052,7336,6023],{"class":1065},[1052,7338,7217],{"class":2378},[1052,7340,1091],{"class":1090},[1052,7342,7222],{"class":1367},[1052,7344,7225],{"class":1754},[1052,7346,7228],{"class":1434},[1052,7348,1640],{"class":1090},[1052,7350,7351,7354,7356,7358,7360,7362],{"class":1054,"line":1319},[1052,7352,7353],{"class":2378},"                    cls",[1052,7355,1091],{"class":1090},[1052,7357,7222],{"class":1367},[1052,7359,1879],{"class":1090},[1052,7361,7217],{"class":2378},[1052,7363,1305],{"class":1090},[1052,7365,7366,7369,7371,7373,7375,7377,7380],{"class":1054,"line":1335},[1052,7367,7368],{"class":1065},"                    await",[1052,7370,7217],{"class":2378},[1052,7372,1091],{"class":1090},[1052,7374,7222],{"class":1367},[1052,7376,1091],{"class":1090},[1052,7378,7379],{"class":1221},"initialize",[1052,7381,1305],{"class":1090},[1052,7383,7384],{"class":1054,"line":1345},[1052,7385,1732],{"class":1069},[1052,7387,7388,7390,7392,7394],{"class":1054,"line":1351},[1052,7389,1947],{"class":1065},[1052,7391,7217],{"class":2378},[1052,7393,1091],{"class":1090},[1052,7395,7266],{"class":1367},[1052,7397,7398],{"class":1054,"line":1378},[1052,7399,1237],{"class":1069},[1052,7401,7402,7404,7406,7409,7411,7413],{"class":1054,"line":1383},[1052,7403,1403],{"class":1169},[1052,7405,1173],{"class":1169},[1052,7407,7408],{"class":1176}," initialize",[1052,7410,1180],{"class":1090},[1052,7412,2325],{"class":2324},[1052,7414,1187],{"class":1090},[1052,7416,7417,7419,7422],{"class":1054,"line":1389},[1052,7418,2353],{"class":1193},[1052,7420,7421],{"class":1197},"Initialize singleton asynchronously.",[1052,7423,1201],{"class":1193},[1052,7425,7426],{"class":1054,"line":1400},[1052,7427,7428],{"class":1058},"        # Async initialization code\n",[1052,7430,7431,7433,7435,7437,7439,7441,7443],{"class":1054,"line":1447},[1052,7432,4789],{"class":1065},[1052,7434,1216],{"class":1069},[1052,7436,1091],{"class":1090},[1052,7438,1222],{"class":1221},[1052,7440,1180],{"class":1090},[1052,7442,1228],{"class":1227},[1052,7444,1231],{"class":1090},[1052,7446,7447,7449,7451,7454,7456],{"class":1054,"line":1460},[1052,7448,4890],{"class":2378},[1052,7450,1091],{"class":1090},[1052,7452,7453],{"class":1367},"initialized",[1052,7455,1879],{"class":1090},[1052,7457,7458],{"class":1434}," True\n",[1052,7460,7461],{"class":1054,"line":1482},[1052,7462,1163],{"emptyLinePlaceholder":1162},[1052,7464,7465],{"class":1054,"line":1502},[1052,7466,7467],{"class":1058},"# Async-safe connection pool\n",[1052,7469,7470,7472,7475],{"class":1054,"line":1527},[1052,7471,2285],{"class":1169},[1052,7473,7474],{"class":2288}," AsyncConnectionPool",[1052,7476,1640],{"class":1090},[1052,7478,7479,7481,7484],{"class":1054,"line":1533},[1052,7480,1194],{"class":1193},[1052,7482,7483],{"class":1197},"Async-safe connection pool.",[1052,7485,1201],{"class":1193},[1052,7487,7488],{"class":1054,"line":1538},[1052,7489,1237],{"class":1069},[1052,7491,7492,7494,7496,7498,7500,7502,7505,7507,7509],{"class":1054,"line":1547},[1052,7493,4871],{"class":1169},[1052,7495,4874],{"class":1804},[1052,7497,1180],{"class":1090},[1052,7499,2325],{"class":2324},[1052,7501,1153],{"class":1090},[1052,7503,7504],{"class":1183}," max_connections",[1052,7506,1357],{"class":1754},[1052,7508,3914],{"class":1227},[1052,7510,1187],{"class":1090},[1052,7512,7513,7515,7517,7520,7522],{"class":1054,"line":1564},[1052,7514,4890],{"class":2378},[1052,7516,1091],{"class":1090},[1052,7518,7519],{"class":1367},"max_connections",[1052,7521,1879],{"class":1090},[1052,7523,7524],{"class":1069}," max_connections\n",[1052,7526,7527,7529,7531,7534,7536,7538,7540,7543,7545,7548,7550,7552],{"class":1054,"line":1579},[1052,7528,4890],{"class":2378},[1052,7530,1091],{"class":1090},[1052,7532,7533],{"class":1367},"connections",[1052,7535,1879],{"class":1090},[1052,7537,1216],{"class":1069},[1052,7539,1091],{"class":1090},[1052,7541,7542],{"class":1221},"Queue",[1052,7544,1180],{"class":1090},[1052,7546,7547],{"class":1428},"maxsize",[1052,7549,1357],{"class":1090},[1052,7551,7519],{"class":1221},[1052,7553,1231],{"class":1090},[1052,7555,7556,7558,7560,7563,7565],{"class":1054,"line":1584},[1052,7557,4890],{"class":2378},[1052,7559,1091],{"class":1090},[1052,7561,7562],{"class":1367},"created_connections",[1052,7564,1879],{"class":1090},[1052,7566,6319],{"class":1227},[1052,7568,7569,7571,7573,7575,7577,7579,7581,7583],{"class":1054,"line":1589},[1052,7570,4890],{"class":2378},[1052,7572,1091],{"class":1090},[1052,7574,6689],{"class":1367},[1052,7576,1879],{"class":1090},[1052,7578,1216],{"class":1069},[1052,7580,1091],{"class":1090},[1052,7582,6417],{"class":1221},[1052,7584,1305],{"class":1090},[1052,7586,7587],{"class":1054,"line":1605},[1052,7588,1237],{"class":1069},[1052,7590,7591,7593,7595,7598,7600,7602],{"class":1054,"line":1615},[1052,7592,1403],{"class":1169},[1052,7594,1173],{"class":1169},[1052,7596,7597],{"class":1176}," get_connection",[1052,7599,1180],{"class":1090},[1052,7601,2325],{"class":2324},[1052,7603,1187],{"class":1090},[1052,7605,7606,7608,7611],{"class":1054,"line":1643},[1052,7607,2353],{"class":1193},[1052,7609,7610],{"class":1197},"Get connection from pool.",[1052,7612,1201],{"class":1193},[1052,7614,7615,7617],{"class":1054,"line":1649},[1052,7616,2581],{"class":1065},[1052,7618,1640],{"class":1090},[1052,7620,7621],{"class":1054,"line":1660},[1052,7622,7623],{"class":1058},"            # Try to get existing connection\n",[1052,7625,7626,7629,7631,7633,7635,7637,7639,7642],{"class":1054,"line":1683},[1052,7627,7628],{"class":1069},"            connection ",[1052,7630,1357],{"class":1090},[1052,7632,2398],{"class":2378},[1052,7634,1091],{"class":1090},[1052,7636,7533],{"class":1367},[1052,7638,1091],{"class":1090},[1052,7640,7641],{"class":1221},"get_nowait",[1052,7643,1305],{"class":1090},[1052,7645,7646,7648],{"class":1054,"line":1703},[1052,7647,2438],{"class":1065},[1052,7649,7650],{"class":1069}," connection\n",[1052,7652,7653,7655,7657,7659,7662],{"class":1054,"line":1723},[1052,7654,2635],{"class":1065},[1052,7656,1216],{"class":1069},[1052,7658,1091],{"class":1090},[1052,7660,7661],{"class":1367},"QueueEmpty",[1052,7663,1640],{"class":1090},[1052,7665,7666],{"class":1054,"line":1729},[1052,7667,7668],{"class":1058},"            # Create new connection if under limit\n",[1052,7670,7671,7673,7675,7677,7679,7681],{"class":1054,"line":1735},[1052,7672,3885],{"class":1065},[1052,7674,1620],{"class":1065},[1052,7676,2398],{"class":2378},[1052,7678,1091],{"class":1090},[1052,7680,6689],{"class":1367},[1052,7682,1640],{"class":1090},[1052,7684,7685,7687,7689,7691,7693,7696,7698,7700,7702],{"class":1054,"line":1772},[1052,7686,6023],{"class":1065},[1052,7688,2398],{"class":2378},[1052,7690,1091],{"class":1090},[1052,7692,7562],{"class":1367},[1052,7694,7695],{"class":1754}," \u003C",[1052,7697,2398],{"class":2378},[1052,7699,1091],{"class":1090},[1052,7701,7519],{"class":1367},[1052,7703,1640],{"class":1090},[1052,7705,7706,7709,7711,7713,7715,7717,7720],{"class":1054,"line":1777},[1052,7707,7708],{"class":1069},"                    connection ",[1052,7710,1357],{"class":1090},[1052,7712,1360],{"class":1065},[1052,7714,2398],{"class":2378},[1052,7716,1091],{"class":1090},[1052,7718,7719],{"class":1221},"create_connection",[1052,7721,1305],{"class":1090},[1052,7723,7724,7727,7729,7731,7734],{"class":1054,"line":1788},[1052,7725,7726],{"class":2378},"                    self",[1052,7728,1091],{"class":1090},[1052,7730,7562],{"class":1367},[1052,7732,7733],{"class":1090}," +=",[1052,7735,6394],{"class":1227},[1052,7737,7738,7741],{"class":1054,"line":1836},[1052,7739,7740],{"class":1065},"                    return",[1052,7742,7650],{"class":1069},[1052,7744,7745],{"class":1054,"line":1865},[1052,7746,2787],{"class":1069},[1052,7748,7749],{"class":1054,"line":1908},[1052,7750,7751],{"class":1058},"            # Wait for available connection\n",[1052,7753,7754,7756,7758,7760,7762,7764,7766,7768],{"class":1054,"line":1916},[1052,7755,2438],{"class":1065},[1052,7757,1360],{"class":1065},[1052,7759,2398],{"class":2378},[1052,7761,1091],{"class":1090},[1052,7763,7533],{"class":1367},[1052,7765,1091],{"class":1090},[1052,7767,2057],{"class":1221},[1052,7769,1305],{"class":1090},[1052,7771,7772],{"class":1054,"line":1939},[1052,7773,1237],{"class":1069},[1052,7775,7776,7778,7780,7783,7785,7787,7789,7792],{"class":1054,"line":1944},[1052,7777,1403],{"class":1169},[1052,7779,1173],{"class":1169},[1052,7781,7782],{"class":1176}," return_connection",[1052,7784,1180],{"class":1090},[1052,7786,2325],{"class":2324},[1052,7788,1153],{"class":1090},[1052,7790,7791],{"class":1183}," connection",[1052,7793,1187],{"class":1090},[1052,7795,7796,7798,7801],{"class":1054,"line":1970},[1052,7797,2353],{"class":1193},[1052,7799,7800],{"class":1197},"Return connection to pool.",[1052,7802,1201],{"class":1193},[1052,7804,7805,7807,7809,7811,7814],{"class":1054,"line":1975},[1052,7806,2419],{"class":1065},[1052,7808,7791],{"class":1069},[1052,7810,1091],{"class":1090},[1052,7812,7813],{"class":1221},"is_healthy",[1052,7815,4099],{"class":1090},[1052,7817,7818,7820,7822,7824,7826,7828,7831,7833,7836],{"class":1054,"line":1996},[1052,7819,3236],{"class":1065},[1052,7821,2398],{"class":2378},[1052,7823,1091],{"class":1090},[1052,7825,7533],{"class":1367},[1052,7827,1091],{"class":1090},[1052,7829,7830],{"class":1221},"put",[1052,7832,1180],{"class":1090},[1052,7834,7835],{"class":1221},"connection",[1052,7837,1231],{"class":1090},[1052,7839,7840,7842],{"class":1054,"line":2006},[1052,7841,2466],{"class":1065},[1052,7843,1640],{"class":1090},[1052,7845,7846],{"class":1054,"line":2032},[1052,7847,7848],{"class":1058},"            # Replace unhealthy connection\n",[1052,7850,7851,7853,7855,7857,7859,7861],{"class":1054,"line":2037},[1052,7852,3885],{"class":1065},[1052,7854,1620],{"class":1065},[1052,7856,2398],{"class":2378},[1052,7858,1091],{"class":1090},[1052,7860,6689],{"class":1367},[1052,7862,1640],{"class":1090},[1052,7864,7865,7868,7870,7872,7875],{"class":1054,"line":2045},[1052,7866,7867],{"class":2378},"                self",[1052,7869,1091],{"class":1090},[1052,7871,7562],{"class":1367},[1052,7873,7874],{"class":1090}," -=",[1052,7876,6394],{"class":1227},[1052,7878,7879],{"class":1054,"line":2075},[1052,7880,1237],{"class":1069},[1052,7882,7883,7885,7887,7890,7892,7894],{"class":1054,"line":2095},[1052,7884,1403],{"class":1169},[1052,7886,1173],{"class":1169},[1052,7888,7889],{"class":1176}," create_connection",[1052,7891,1180],{"class":1090},[1052,7893,2325],{"class":2324},[1052,7895,1187],{"class":1090},[1052,7897,7898,7900,7903],{"class":1054,"line":2112},[1052,7899,2353],{"class":1193},[1052,7901,7902],{"class":1197},"Create new connection.",[1052,7904,1201],{"class":1193},[1052,7906,7907],{"class":1054,"line":2119},[1052,7908,7909],{"class":1058},"        # Simulate connection creation\n",[1052,7911,7912,7914,7916,7918,7920,7922,7924],{"class":1054,"line":2155},[1052,7913,4789],{"class":1065},[1052,7915,1216],{"class":1069},[1052,7917,1091],{"class":1090},[1052,7919,1222],{"class":1221},[1052,7921,1180],{"class":1090},[1052,7923,1228],{"class":1227},[1052,7925,1231],{"class":1090},[1052,7927,7928,7930,7933],{"class":1054,"line":2170},[1052,7929,1947],{"class":1065},[1052,7931,7932],{"class":1221}," MockConnection",[1052,7934,1305],{"class":1090},[1052,7936,7937],{"class":1054,"line":3351},[1052,7938,1163],{"emptyLinePlaceholder":1162},[1052,7940,7941,7943,7945],{"class":1054,"line":3383},[1052,7942,2285],{"class":1169},[1052,7944,7932],{"class":2288},[1052,7946,1640],{"class":1090},[1052,7948,7949,7951,7954],{"class":1054,"line":3393},[1052,7950,1194],{"class":1193},[1052,7952,7953],{"class":1197},"Mock connection for example.",[1052,7955,1201],{"class":1193},[1052,7957,7958],{"class":1054,"line":3402},[1052,7959,1237],{"class":1069},[1052,7961,7962,7964,7966,7968,7970],{"class":1054,"line":3407},[1052,7963,4871],{"class":1169},[1052,7965,4874],{"class":1804},[1052,7967,1180],{"class":1090},[1052,7969,2325],{"class":2324},[1052,7971,1187],{"class":1090},[1052,7973,7974,7976,7978,7981,7983],{"class":1054,"line":3443},[1052,7975,4890],{"class":2378},[1052,7977,1091],{"class":1090},[1052,7979,7980],{"class":1367},"healthy",[1052,7982,1879],{"class":1090},[1052,7984,7458],{"class":1434},[1052,7986,7987],{"class":1054,"line":3453},[1052,7988,1237],{"class":1069},[1052,7990,7991,7993,7996,7998,8000],{"class":1054,"line":3460},[1052,7992,4871],{"class":1169},[1052,7994,7995],{"class":1176}," is_healthy",[1052,7997,1180],{"class":1090},[1052,7999,2325],{"class":2324},[1052,8001,1187],{"class":1090},[1052,8003,8004,8006,8008,8010],{"class":1054,"line":3465},[1052,8005,1947],{"class":1065},[1052,8007,2398],{"class":2378},[1052,8009,1091],{"class":1090},[1052,8011,8012],{"class":1367},"healthy\n",[1052,8014,8015],{"class":1054,"line":3501},[1052,8016,1163],{"emptyLinePlaceholder":1162},[1052,8018,8019],{"class":1054,"line":3511},[1052,8020,8021],{"class":1058},"# Async-safe caching\n",[1052,8023,8024,8026,8029],{"class":1054,"line":3518},[1052,8025,2285],{"class":1169},[1052,8027,8028],{"class":2288}," AsyncSafeCache",[1052,8030,1640],{"class":1090},[1052,8032,8033,8035,8038],{"class":1054,"line":3523},[1052,8034,1194],{"class":1193},[1052,8036,8037],{"class":1197},"Async-safe cache implementation.",[1052,8039,1201],{"class":1193},[1052,8041,8042],{"class":1054,"line":3555},[1052,8043,1237],{"class":1069},[1052,8045,8046,8048,8050,8052,8054],{"class":1054,"line":3565},[1052,8047,4871],{"class":1169},[1052,8049,4874],{"class":1804},[1052,8051,1180],{"class":1090},[1052,8053,2325],{"class":2324},[1052,8055,1187],{"class":1090},[1052,8057,8058,8060,8062,8065,8067],{"class":1054,"line":3572},[1052,8059,4890],{"class":2378},[1052,8061,1091],{"class":1090},[1052,8063,8064],{"class":1367},"_cache",[1052,8066,1879],{"class":1090},[1052,8068,1785],{"class":1090},[1052,8070,8071,8073,8075,8078,8080],{"class":1054,"line":3577},[1052,8072,4890],{"class":2378},[1052,8074,1091],{"class":1090},[1052,8076,8077],{"class":1367},"_locks",[1052,8079,1879],{"class":1090},[1052,8081,1785],{"class":1090},[1052,8083,8084,8086,8088,8091,8093,8095,8097,8099],{"class":1054,"line":3607},[1052,8085,4890],{"class":2378},[1052,8087,1091],{"class":1090},[1052,8089,8090],{"class":1367},"_main_lock",[1052,8092,1879],{"class":1090},[1052,8094,1216],{"class":1069},[1052,8096,1091],{"class":1090},[1052,8098,6417],{"class":1221},[1052,8100,1305],{"class":1090},[1052,8102,8103],{"class":1054,"line":3622},[1052,8104,1237],{"class":1069},[1052,8106,8107,8109,8111,8113,8115,8117,8119,8122],{"class":1054,"line":3632},[1052,8108,1403],{"class":1169},[1052,8110,1173],{"class":1169},[1052,8112,2545],{"class":1176},[1052,8114,1180],{"class":1090},[1052,8116,2325],{"class":2324},[1052,8118,1153],{"class":1090},[1052,8120,8121],{"class":1183}," key",[1052,8123,1187],{"class":1090},[1052,8125,8126,8128,8131],{"class":1054,"line":3637},[1052,8127,2353],{"class":1193},[1052,8129,8130],{"class":1197},"Get value from cache.",[1052,8132,1201],{"class":1193},[1052,8134,8135,8137,8139,8141,8143,8145,8147,8149,8152],{"class":1054,"line":3668},[1052,8136,1947],{"class":1065},[1052,8138,2398],{"class":2378},[1052,8140,1091],{"class":1090},[1052,8142,8064],{"class":1367},[1052,8144,1091],{"class":1090},[1052,8146,2057],{"class":1221},[1052,8148,1180],{"class":1090},[1052,8150,8151],{"class":1221},"key",[1052,8153,1231],{"class":1090},[1052,8155,8156],{"class":1054,"line":3678},[1052,8157,1237],{"class":1069},[1052,8159,8160,8162,8164,8167,8169,8171,8173,8175,8177,8179,8181,8184,8186,8189],{"class":1054,"line":3704},[1052,8161,1403],{"class":1169},[1052,8163,1173],{"class":1169},[1052,8165,8166],{"class":1859}," set",[1052,8168,1180],{"class":1090},[1052,8170,2325],{"class":2324},[1052,8172,1153],{"class":1090},[1052,8174,8121],{"class":1183},[1052,8176,1153],{"class":1090},[1052,8178,7074],{"class":1183},[1052,8180,1153],{"class":1090},[1052,8182,8183],{"class":1183}," ttl",[1052,8185,1357],{"class":1754},[1052,8187,8188],{"class":1434},"None",[1052,8190,1187],{"class":1090},[1052,8192,8193,8195,8198],{"class":1054,"line":3709},[1052,8194,2353],{"class":1193},[1052,8196,8197],{"class":1197},"Set value in cache with async safety.",[1052,8199,1201],{"class":1193},[1052,8201,8202],{"class":1054,"line":3719},[1052,8203,8204],{"class":1058},"        # Get or create lock for this key\n",[1052,8206,8207,8209,8211,8213,8215,8217],{"class":1054,"line":3725},[1052,8208,2048],{"class":1065},[1052,8210,1620],{"class":1065},[1052,8212,2398],{"class":2378},[1052,8214,1091],{"class":1090},[1052,8216,8090],{"class":1367},[1052,8218,1640],{"class":1090},[1052,8220,8221,8223,8226,8228,8230,8232,8234,8236],{"class":1054,"line":3763},[1052,8222,1839],{"class":1065},[1052,8224,8225],{"class":1069}," key ",[1052,8227,6174],{"class":1754},[1052,8229,6177],{"class":1754},[1052,8231,2398],{"class":2378},[1052,8233,1091],{"class":1090},[1052,8235,8077],{"class":1367},[1052,8237,1640],{"class":1090},[1052,8239,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260],{"class":1054,"line":3771},[1052,8241,7867],{"class":2378},[1052,8243,1091],{"class":1090},[1052,8245,8077],{"class":1367},[1052,8247,1850],{"class":1090},[1052,8249,8151],{"class":1367},[1052,8251,1876],{"class":1090},[1052,8253,1879],{"class":1090},[1052,8255,1216],{"class":1069},[1052,8257,1091],{"class":1090},[1052,8259,6417],{"class":1221},[1052,8261,1305],{"class":1090},[1052,8263,8264,8267,8269,8271,8273,8275,8277,8279],{"class":1054,"line":3791},[1052,8265,8266],{"class":1069},"            key_lock ",[1052,8268,1357],{"class":1090},[1052,8270,2398],{"class":2378},[1052,8272,1091],{"class":1090},[1052,8274,8077],{"class":1367},[1052,8276,1850],{"class":1090},[1052,8278,8151],{"class":1367},[1052,8280,1936],{"class":1090},[1052,8282,8283],{"class":1054,"line":3810},[1052,8284,1732],{"class":1069},[1052,8286,8287],{"class":1054,"line":3830},[1052,8288,8289],{"class":1058},"        # Set value with key-specific lock\n",[1052,8291,8292,8294,8296,8299],{"class":1054,"line":3853},[1052,8293,2048],{"class":1065},[1052,8295,1620],{"class":1065},[1052,8297,8298],{"class":1069}," key_lock",[1052,8300,1640],{"class":1090},[1052,8302,8303,8305,8307,8309,8311,8313,8315,8317],{"class":1054,"line":3859},[1052,8304,5979],{"class":2378},[1052,8306,1091],{"class":1090},[1052,8308,8064],{"class":1367},[1052,8310,1850],{"class":1090},[1052,8312,8151],{"class":1367},[1052,8314,1876],{"class":1090},[1052,8316,1879],{"class":1090},[1052,8318,3768],{"class":1090},[1052,8320,8321,8323,8326,8328,8330,8332],{"class":1054,"line":3866},[1052,8322,3774],{"class":1255},[1052,8324,8325],{"class":1259},"value",[1052,8327,1263],{"class":1255},[1052,8329,1266],{"class":1090},[1052,8331,7074],{"class":1069},[1052,8333,1277],{"class":1090},[1052,8335,8336,8338,8341,8343,8345,8347,8349,8351,8353,8356,8359,8362,8364,8366],{"class":1054,"line":3872},[1052,8337,3774],{"class":1255},[1052,8339,8340],{"class":1259},"expires",[1052,8342,1263],{"class":1255},[1052,8344,1266],{"class":1090},[1052,8346,4942],{"class":1069},[1052,8348,1091],{"class":1090},[1052,8350,1302],{"class":1221},[1052,8352,1631],{"class":1090},[1052,8354,8355],{"class":1754}," +",[1052,8357,8358],{"class":1069}," ttl ",[1052,8360,8361],{"class":1065},"if",[1052,8363,8358],{"class":1069},[1052,8365,2780],{"class":1065},[1052,8367,7118],{"class":1434},[1052,8369,8370],{"class":1054,"line":3882},[1052,8371,3856],{"class":1090},[1052,8373,8374],{"class":1054,"line":3919},[1052,8375,1237],{"class":1069},[1052,8377,8378,8380,8382,8385,8387,8389,8391,8393,8395,8398,8400,8402,8404,8406],{"class":1054,"line":3931},[1052,8379,1403],{"class":1169},[1052,8381,1173],{"class":1169},[1052,8383,8384],{"class":1176}," get_or_set",[1052,8386,1180],{"class":1090},[1052,8388,2325],{"class":2324},[1052,8390,1153],{"class":1090},[1052,8392,8121],{"class":1183},[1052,8394,1153],{"class":1090},[1052,8396,8397],{"class":1183}," factory_func",[1052,8399,1153],{"class":1090},[1052,8401,8183],{"class":1183},[1052,8403,1357],{"class":1754},[1052,8405,8188],{"class":1434},[1052,8407,1187],{"class":1090},[1052,8409,8410,8412,8415],{"class":1054,"line":3951},[1052,8411,2353],{"class":1193},[1052,8413,8414],{"class":1197},"Get value or set using factory function.",[1052,8416,1201],{"class":1193},[1052,8418,8419],{"class":1054,"line":3970},[1052,8420,8421],{"class":1058},"        # Check if value exists and is not expired\n",[1052,8423,8424,8427,8429,8431,8433,8435,8437,8439,8441],{"class":1054,"line":3993},[1052,8425,8426],{"class":1069},"        cached ",[1052,8428,1357],{"class":1090},[1052,8430,1360],{"class":1065},[1052,8432,2398],{"class":2378},[1052,8434,1091],{"class":1090},[1052,8436,2057],{"class":1221},[1052,8438,1180],{"class":1090},[1052,8440,8151],{"class":1221},[1052,8442,1231],{"class":1090},[1052,8444,8445,8447,8450,8453,8456,8458,8461,8463,8465,8467,8469,8471,8474,8476,8478,8480,8482,8484,8486,8489,8491,8493,8495],{"class":1054,"line":3999},[1052,8446,2419],{"class":1065},[1052,8448,8449],{"class":1069}," cached ",[1052,8451,8452],{"class":1754},"and",[1052,8454,8455],{"class":1090}," (",[1052,8457,6174],{"class":1754},[1052,8459,8460],{"class":1069}," cached",[1052,8462,1850],{"class":1090},[1052,8464,1263],{"class":1255},[1052,8466,8340],{"class":1259},[1052,8468,1263],{"class":1255},[1052,8470,1876],{"class":1090},[1052,8472,8473],{"class":1754}," or",[1052,8475,8460],{"class":1069},[1052,8477,1850],{"class":1090},[1052,8479,1263],{"class":1255},[1052,8481,8340],{"class":1259},[1052,8483,1263],{"class":1255},[1052,8485,1876],{"class":1090},[1052,8487,8488],{"class":1754}," >",[1052,8490,4942],{"class":1069},[1052,8492,1091],{"class":1090},[1052,8494,1302],{"class":1221},[1052,8496,8497],{"class":1090},"()):\n",[1052,8499,8500,8502,8504,8506,8508,8510,8512],{"class":1054,"line":4004},[1052,8501,2438],{"class":1065},[1052,8503,8460],{"class":1069},[1052,8505,1850],{"class":1090},[1052,8507,1263],{"class":1255},[1052,8509,8325],{"class":1259},[1052,8511,1263],{"class":1255},[1052,8513,1936],{"class":1090},[1052,8515,8516],{"class":1054,"line":4025},[1052,8517,1732],{"class":1069},[1052,8519,8520],{"class":1054,"line":4030},[1052,8521,8204],{"class":1058},[1052,8523,8524,8526,8528,8530,8532,8534],{"class":1054,"line":4065},[1052,8525,2048],{"class":1065},[1052,8527,1620],{"class":1065},[1052,8529,2398],{"class":2378},[1052,8531,1091],{"class":1090},[1052,8533,8090],{"class":1367},[1052,8535,1640],{"class":1090},[1052,8537,8538,8540,8542,8544,8546,8548,8550,8552],{"class":1054,"line":4075},[1052,8539,1839],{"class":1065},[1052,8541,8225],{"class":1069},[1052,8543,6174],{"class":1754},[1052,8545,6177],{"class":1754},[1052,8547,2398],{"class":2378},[1052,8549,1091],{"class":1090},[1052,8551,8077],{"class":1367},[1052,8553,1640],{"class":1090},[1052,8555,8556,8558,8560,8562,8564,8566,8568,8570,8572,8574,8576],{"class":1054,"line":4081},[1052,8557,7867],{"class":2378},[1052,8559,1091],{"class":1090},[1052,8561,8077],{"class":1367},[1052,8563,1850],{"class":1090},[1052,8565,8151],{"class":1367},[1052,8567,1876],{"class":1090},[1052,8569,1879],{"class":1090},[1052,8571,1216],{"class":1069},[1052,8573,1091],{"class":1090},[1052,8575,6417],{"class":1221},[1052,8577,1305],{"class":1090},[1052,8579,8580,8582,8584,8586,8588,8590,8592,8594],{"class":1054,"line":4090},[1052,8581,8266],{"class":1069},[1052,8583,1357],{"class":1090},[1052,8585,2398],{"class":2378},[1052,8587,1091],{"class":1090},[1052,8589,8077],{"class":1367},[1052,8591,1850],{"class":1090},[1052,8593,8151],{"class":1367},[1052,8595,1936],{"class":1090},[1052,8597,8598],{"class":1054,"line":4102},[1052,8599,1732],{"class":1069},[1052,8601,8602],{"class":1054,"line":4121},[1052,8603,8604],{"class":1058},"        # Double-check pattern\n",[1052,8606,8607,8609,8611,8613],{"class":1054,"line":4142},[1052,8608,2048],{"class":1065},[1052,8610,1620],{"class":1065},[1052,8612,8298],{"class":1069},[1052,8614,1640],{"class":1090},[1052,8616,8617,8620,8622,8624,8626,8628,8630,8632,8634],{"class":1054,"line":4162},[1052,8618,8619],{"class":1069},"            cached ",[1052,8621,1357],{"class":1090},[1052,8623,1360],{"class":1065},[1052,8625,2398],{"class":2378},[1052,8627,1091],{"class":1090},[1052,8629,2057],{"class":1221},[1052,8631,1180],{"class":1090},[1052,8633,8151],{"class":1221},[1052,8635,1231],{"class":1090},[1052,8637,8638,8640,8642,8644,8646,8648,8650,8652,8654,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678,8680,8682],{"class":1054,"line":4183},[1052,8639,1839],{"class":1065},[1052,8641,8449],{"class":1069},[1052,8643,8452],{"class":1754},[1052,8645,8455],{"class":1090},[1052,8647,6174],{"class":1754},[1052,8649,8460],{"class":1069},[1052,8651,1850],{"class":1090},[1052,8653,1263],{"class":1255},[1052,8655,8340],{"class":1259},[1052,8657,1263],{"class":1255},[1052,8659,1876],{"class":1090},[1052,8661,8473],{"class":1754},[1052,8663,8460],{"class":1069},[1052,8665,1850],{"class":1090},[1052,8667,1263],{"class":1255},[1052,8669,8340],{"class":1259},[1052,8671,1263],{"class":1255},[1052,8673,1876],{"class":1090},[1052,8675,8488],{"class":1754},[1052,8677,4942],{"class":1069},[1052,8679,1091],{"class":1090},[1052,8681,1302],{"class":1221},[1052,8683,8497],{"class":1090},[1052,8685,8686,8688,8690,8692,8694,8696,8698],{"class":1054,"line":4212},[1052,8687,2098],{"class":1065},[1052,8689,8460],{"class":1069},[1052,8691,1850],{"class":1090},[1052,8693,1263],{"class":1255},[1052,8695,8325],{"class":1259},[1052,8697,1263],{"class":1255},[1052,8699,1936],{"class":1090},[1052,8701,8702],{"class":1054,"line":4218},[1052,8703,2787],{"class":1069},[1052,8705,8706],{"class":1054,"line":4223},[1052,8707,8708],{"class":1058},"            # Generate new value\n",[1052,8710,8711,8713,8715,8717,8719,8721,8724],{"class":1054,"line":4237},[1052,8712,1839],{"class":1065},[1052,8714,1216],{"class":1069},[1052,8716,1091],{"class":1090},[1052,8718,2426],{"class":1221},[1052,8720,1180],{"class":1090},[1052,8722,8723],{"class":1221},"factory_func",[1052,8725,1187],{"class":1090},[1052,8727,8728,8731,8733,8735,8737],{"class":1054,"line":4242},[1052,8729,8730],{"class":1069},"                value ",[1052,8732,1357],{"class":1090},[1052,8734,1360],{"class":1065},[1052,8736,8397],{"class":1221},[1052,8738,1305],{"class":1090},[1052,8740,8741,8743],{"class":1054,"line":4249},[1052,8742,1911],{"class":1065},[1052,8744,1640],{"class":1090},[1052,8746,8747,8749,8751,8753],{"class":1054,"line":4268},[1052,8748,8730],{"class":1069},[1052,8750,1357],{"class":1090},[1052,8752,8397],{"class":1221},[1052,8754,1305],{"class":1090},[1052,8756,8757],{"class":1054,"line":4287},[1052,8758,2787],{"class":1069},[1052,8760,8761,8763,8765,8767,8770,8772,8774,8776,8778,8780,8782],{"class":1054,"line":4306},[1052,8762,3236],{"class":1065},[1052,8764,2398],{"class":2378},[1052,8766,1091],{"class":1090},[1052,8768,8769],{"class":1221},"set",[1052,8771,1180],{"class":1090},[1052,8773,8151],{"class":1221},[1052,8775,1153],{"class":1090},[1052,8777,7074],{"class":1221},[1052,8779,1153],{"class":1090},[1052,8781,8183],{"class":1221},[1052,8783,1231],{"class":1090},[1052,8785,8786,8788],{"class":1054,"line":4312},[1052,8787,2438],{"class":1065},[1052,8789,8790],{"class":1069}," value\n",[1034,8792,8794],{"id":8793},"avoiding-common-async-pitfalls","Avoiding Common Async Pitfalls",[1042,8796,8798],{"className":1044,"code":8797,"language":1046,"meta":1047,"style":1047},"# Common async pitfalls and solutions\nimport asyncio\nfrom django.db import transaction\nfrom asgiref.sync import sync_to_async\n\n# PITFALL 1: Blocking operations in async code\nasync def bad_blocking_example():\n    \"\"\"BAD: Blocking operation in async function.\"\"\"\n    import time\n    time.sleep(1)  # This blocks the entire event loop!\n    return \"Done\"\n\nasync def good_non_blocking_example():\n    \"\"\"GOOD: Non-blocking equivalent.\"\"\"\n    await asyncio.sleep(1)  # This doesn't block other coroutines\n    return \"Done\"\n\n# PITFALL 2: Not awaiting coroutines\nasync def bad_not_awaiting():\n    \"\"\"BAD: Not awaiting coroutines.\"\"\"\n    result = asyncio.sleep(1)  # Returns coroutine object, not result\n    return result  # This returns a coroutine, not \"Done\"\n\nasync def good_awaiting():\n    \"\"\"GOOD: Properly awaiting coroutines.\"\"\"\n    await asyncio.sleep(1)\n    return \"Done\"\n\n# PITFALL 3: Using sync database operations incorrectly\nasync def bad_sync_db_usage():\n    \"\"\"BAD: Sync database operations in async context.\"\"\"\n    # This can cause database connection issues\n    users = User.objects.all()  # Sync operation\n    return list(users)\n\nasync def good_async_db_usage():\n    \"\"\"GOOD: Proper async database usage.\"\"\"\n    # Option 1: Use async ORM methods\n    users = []\n    async for user in User.objects.all():\n        users.append(user)\n    \n    return users\n\nasync def good_sync_to_async_usage():\n    \"\"\"GOOD: Using sync_to_async wrapper.\"\"\"\n    @sync_to_async\n    def get_users():\n        return list(User.objects.all())\n    \n    users = await get_users()\n    return users\n\n# PITFALL 4: Incorrect transaction handling\nasync def bad_transaction_usage():\n    \"\"\"BAD: Incorrect async transaction usage.\"\"\"\n    with transaction.atomic():  # This won't work properly in async\n        user = await sync_to_async(User.objects.create)(username='test')\n        # More operations...\n\nasync def good_transaction_usage():\n    \"\"\"GOOD: Proper async transaction handling.\"\"\"\n    @sync_to_async\n    def create_user_with_transaction():\n        with transaction.atomic():\n            user = User.objects.create(username='test')\n            # More operations...\n            return user\n    \n    user = await create_user_with_transaction()\n    return user\n\n# PITFALL 5: Shared mutable state without protection\nclass BadAsyncCounter:\n    \"\"\"BAD: Unprotected shared state.\"\"\"\n    \n    def __init__(self):\n        self.count = 0\n    \n    async def increment(self):\n        current = self.count\n        await asyncio.sleep(0.001)  # Simulate async work\n        self.count = current + 1  # Race condition!\n\nclass GoodAsyncCounter:\n    \"\"\"GOOD: Protected shared state.\"\"\"\n    \n    def __init__(self):\n        self.count = 0\n        self._lock = asyncio.Lock()\n    \n    async def increment(self):\n        async with self._lock:\n            current = self.count\n            await asyncio.sleep(0.001)\n            self.count = current + 1\n\n# PITFALL 6: Not handling exceptions properly\nasync def bad_exception_handling():\n    \"\"\"BAD: Not handling async exceptions.\"\"\"\n    tasks = [\n        risky_async_operation(i) for i in range(10)\n    ]\n    \n    # If any task fails, all results are lost\n    results = await asyncio.gather(*tasks)\n    return results\n\nasync def good_exception_handling():\n    \"\"\"GOOD: Proper async exception handling.\"\"\"\n    tasks = [\n        risky_async_operation(i) for i in range(10)\n    ]\n    \n    # Handle exceptions gracefully\n    results = await asyncio.gather(*tasks, return_exceptions=True)\n    \n    successful_results = []\n    errors = []\n    \n    for i, result in enumerate(results):\n        if isinstance(result, Exception):\n            errors.append({'index': i, 'error': str(result)})\n        else:\n            successful_results.append(result)\n    \n    return {\n        'successful': successful_results,\n        'errors': errors\n    }\n\nasync def risky_async_operation(value):\n    \"\"\"Simulate risky async operation.\"\"\"\n    await asyncio.sleep(0.1)\n    if value % 3 == 0:\n        raise ValueError(f\"Value {value} is divisible by 3\")\n    return value * 2\n",[1049,8799,8800,8805,8811,8827,8841,8845,8850,8861,8870,8877,8896,8908,8912,8923,8932,8951,8961,8965,8970,8981,8990,9012,9022,9026,9037,9046,9062,9072,9076,9081,9092,9101,9106,9129,9143,9147,9158,9167,9172,9180,9203,9218,9222,9229,9233,9244,9253,9259,9268,9289,9293,9305,9311,9315,9320,9331,9340,9359,9397,9402,9406,9417,9426,9432,9441,9454,9484,9489,9495,9499,9512,9518,9522,9527,9536,9545,9549,9561,9574,9578,9592,9605,9624,9644,9648,9657,9666,9670,9682,9694,9712,9716,9730,9744,9757,9773,9789,9793,9798,9809,9818,9827,9853,9858,9862,9867,9890,9897,9901,9912,9921,9929,9953,9957,9961,9966,9996,10000,10009,10018,10022,10044,10060,10101,10107,10122,10126,10132,10148,10162,10167,10171,10186,10195,10211,10231,10255],{"__ignoreMap":1047},[1052,8801,8802],{"class":1054,"line":1055},[1052,8803,8804],{"class":1058},"# Common async pitfalls and solutions\n",[1052,8806,8807,8809],{"class":1054,"line":1062},[1052,8808,1066],{"class":1065},[1052,8810,1070],{"class":1069},[1052,8812,8813,8815,8817,8819,8822,8824],{"class":1054,"line":1073},[1052,8814,1084],{"class":1065},[1052,8816,1087],{"class":1069},[1052,8818,1091],{"class":1090},[1052,8820,8821],{"class":1069},"db ",[1052,8823,1066],{"class":1065},[1052,8825,8826],{"class":1069}," transaction\n",[1052,8828,8829,8831,8833,8835,8837,8839],{"class":1054,"line":1081},[1052,8830,1084],{"class":1065},[1052,8832,1124],{"class":1069},[1052,8834,1091],{"class":1090},[1052,8836,1129],{"class":1069},[1052,8838,1066],{"class":1065},[1052,8840,1134],{"class":1069},[1052,8842,8843],{"class":1054,"line":1102},[1052,8844,1163],{"emptyLinePlaceholder":1162},[1052,8846,8847],{"class":1054,"line":1119},[1052,8848,8849],{"class":1058},"# PITFALL 1: Blocking operations in async code\n",[1052,8851,8852,8854,8856,8859],{"class":1054,"line":1137},[1052,8853,1170],{"class":1169},[1052,8855,1173],{"class":1169},[1052,8857,8858],{"class":1176}," bad_blocking_example",[1052,8860,4099],{"class":1090},[1052,8862,8863,8865,8868],{"class":1054,"line":1159},[1052,8864,1194],{"class":1193},[1052,8866,8867],{"class":1197},"BAD: Blocking operation in async function.",[1052,8869,1201],{"class":1193},[1052,8871,8872,8875],{"class":1054,"line":1166},[1052,8873,8874],{"class":1065},"    import",[1052,8876,4820],{"class":1069},[1052,8878,8879,8882,8884,8886,8888,8891,8893],{"class":1054,"line":1190},[1052,8880,8881],{"class":1069},"    time",[1052,8883,1091],{"class":1090},[1052,8885,1222],{"class":1221},[1052,8887,1180],{"class":1090},[1052,8889,8890],{"class":1227},"1",[1052,8892,2065],{"class":1090},[1052,8894,8895],{"class":1058},"  # This blocks the entire event loop!\n",[1052,8897,8898,8900,8903,8906],{"class":1054,"line":1204},[1052,8899,1243],{"class":1065},[1052,8901,8902],{"class":1255}," \"",[1052,8904,8905],{"class":1259},"Done",[1052,8907,2029],{"class":1255},[1052,8909,8910],{"class":1054,"line":1210},[1052,8911,1163],{"emptyLinePlaceholder":1162},[1052,8913,8914,8916,8918,8921],{"class":1054,"line":1234},[1052,8915,1170],{"class":1169},[1052,8917,1173],{"class":1169},[1052,8919,8920],{"class":1176}," good_non_blocking_example",[1052,8922,4099],{"class":1090},[1052,8924,8925,8927,8930],{"class":1054,"line":1240},[1052,8926,1194],{"class":1193},[1052,8928,8929],{"class":1197},"GOOD: Non-blocking equivalent.",[1052,8931,1201],{"class":1193},[1052,8933,8934,8936,8938,8940,8942,8944,8946,8948],{"class":1054,"line":1252},[1052,8935,1213],{"class":1065},[1052,8937,1216],{"class":1069},[1052,8939,1091],{"class":1090},[1052,8941,1222],{"class":1221},[1052,8943,1180],{"class":1090},[1052,8945,8890],{"class":1227},[1052,8947,2065],{"class":1090},[1052,8949,8950],{"class":1058},"  # This doesn't block other coroutines\n",[1052,8952,8953,8955,8957,8959],{"class":1054,"line":1280},[1052,8954,1243],{"class":1065},[1052,8956,8902],{"class":1255},[1052,8958,8905],{"class":1259},[1052,8960,2029],{"class":1255},[1052,8962,8963],{"class":1054,"line":1308},[1052,8964,1163],{"emptyLinePlaceholder":1162},[1052,8966,8967],{"class":1054,"line":1314},[1052,8968,8969],{"class":1058},"# PITFALL 2: Not awaiting coroutines\n",[1052,8971,8972,8974,8976,8979],{"class":1054,"line":1319},[1052,8973,1170],{"class":1169},[1052,8975,1173],{"class":1169},[1052,8977,8978],{"class":1176}," bad_not_awaiting",[1052,8980,4099],{"class":1090},[1052,8982,8983,8985,8988],{"class":1054,"line":1335},[1052,8984,1194],{"class":1193},[1052,8986,8987],{"class":1197},"BAD: Not awaiting coroutines.",[1052,8989,1201],{"class":1193},[1052,8991,8992,8995,8997,8999,9001,9003,9005,9007,9009],{"class":1054,"line":1345},[1052,8993,8994],{"class":1069},"    result ",[1052,8996,1357],{"class":1090},[1052,8998,1216],{"class":1069},[1052,9000,1091],{"class":1090},[1052,9002,1222],{"class":1221},[1052,9004,1180],{"class":1090},[1052,9006,8890],{"class":1227},[1052,9008,2065],{"class":1090},[1052,9010,9011],{"class":1058},"  # Returns coroutine object, not result\n",[1052,9013,9014,9016,9019],{"class":1054,"line":1351},[1052,9015,1243],{"class":1065},[1052,9017,9018],{"class":1069}," result  ",[1052,9020,9021],{"class":1058},"# This returns a coroutine, not \"Done\"\n",[1052,9023,9024],{"class":1054,"line":1378},[1052,9025,1163],{"emptyLinePlaceholder":1162},[1052,9027,9028,9030,9032,9035],{"class":1054,"line":1383},[1052,9029,1170],{"class":1169},[1052,9031,1173],{"class":1169},[1052,9033,9034],{"class":1176}," good_awaiting",[1052,9036,4099],{"class":1090},[1052,9038,9039,9041,9044],{"class":1054,"line":1389},[1052,9040,1194],{"class":1193},[1052,9042,9043],{"class":1197},"GOOD: Properly awaiting coroutines.",[1052,9045,1201],{"class":1193},[1052,9047,9048,9050,9052,9054,9056,9058,9060],{"class":1054,"line":1400},[1052,9049,1213],{"class":1065},[1052,9051,1216],{"class":1069},[1052,9053,1091],{"class":1090},[1052,9055,1222],{"class":1221},[1052,9057,1180],{"class":1090},[1052,9059,8890],{"class":1227},[1052,9061,1231],{"class":1090},[1052,9063,9064,9066,9068,9070],{"class":1054,"line":1447},[1052,9065,1243],{"class":1065},[1052,9067,8902],{"class":1255},[1052,9069,8905],{"class":1259},[1052,9071,2029],{"class":1255},[1052,9073,9074],{"class":1054,"line":1460},[1052,9075,1163],{"emptyLinePlaceholder":1162},[1052,9077,9078],{"class":1054,"line":1482},[1052,9079,9080],{"class":1058},"# PITFALL 3: Using sync database operations incorrectly\n",[1052,9082,9083,9085,9087,9090],{"class":1054,"line":1502},[1052,9084,1170],{"class":1169},[1052,9086,1173],{"class":1169},[1052,9088,9089],{"class":1176}," bad_sync_db_usage",[1052,9091,4099],{"class":1090},[1052,9093,9094,9096,9099],{"class":1054,"line":1527},[1052,9095,1194],{"class":1193},[1052,9097,9098],{"class":1197},"BAD: Sync database operations in async context.",[1052,9100,1201],{"class":1193},[1052,9102,9103],{"class":1054,"line":1533},[1052,9104,9105],{"class":1058},"    # This can cause database connection issues\n",[1052,9107,9108,9111,9113,9115,9117,9119,9121,9124,9126],{"class":1054,"line":1538},[1052,9109,9110],{"class":1069},"    users ",[1052,9112,1357],{"class":1090},[1052,9114,6984],{"class":1069},[1052,9116,1091],{"class":1090},[1052,9118,1368],{"class":1367},[1052,9120,1091],{"class":1090},[1052,9122,9123],{"class":1221},"all",[1052,9125,1631],{"class":1090},[1052,9127,9128],{"class":1058},"  # Sync operation\n",[1052,9130,9131,9133,9136,9138,9141],{"class":1054,"line":1547},[1052,9132,1243],{"class":1065},[1052,9134,9135],{"class":1859}," list",[1052,9137,1180],{"class":1090},[1052,9139,9140],{"class":1221},"users",[1052,9142,1231],{"class":1090},[1052,9144,9145],{"class":1054,"line":1564},[1052,9146,1163],{"emptyLinePlaceholder":1162},[1052,9148,9149,9151,9153,9156],{"class":1054,"line":1579},[1052,9150,1170],{"class":1169},[1052,9152,1173],{"class":1169},[1052,9154,9155],{"class":1176}," good_async_db_usage",[1052,9157,4099],{"class":1090},[1052,9159,9160,9162,9165],{"class":1054,"line":1584},[1052,9161,1194],{"class":1193},[1052,9163,9164],{"class":1197},"GOOD: Proper async database usage.",[1052,9166,1201],{"class":1193},[1052,9168,9169],{"class":1054,"line":1589},[1052,9170,9171],{"class":1058},"    # Option 1: Use async ORM methods\n",[1052,9173,9174,9176,9178],{"class":1054,"line":1605},[1052,9175,9110],{"class":1069},[1052,9177,1357],{"class":1090},[1052,9179,1397],{"class":1090},[1052,9181,9182,9184,9186,9189,9191,9193,9195,9197,9199,9201],{"class":1054,"line":1615},[1052,9183,1403],{"class":1065},[1052,9185,1406],{"class":1065},[1052,9187,9188],{"class":1069}," user ",[1052,9190,1412],{"class":1065},[1052,9192,6984],{"class":1069},[1052,9194,1091],{"class":1090},[1052,9196,1368],{"class":1367},[1052,9198,1091],{"class":1090},[1052,9200,9123],{"class":1221},[1052,9202,4099],{"class":1090},[1052,9204,9205,9208,9210,9212,9214,9216],{"class":1054,"line":1643},[1052,9206,9207],{"class":1069},"        users",[1052,9209,1091],{"class":1090},[1052,9211,1455],{"class":1221},[1052,9213,1180],{"class":1090},[1052,9215,7050],{"class":1221},[1052,9217,1231],{"class":1090},[1052,9219,9220],{"class":1054,"line":1649},[1052,9221,1237],{"class":1069},[1052,9223,9224,9226],{"class":1054,"line":1660},[1052,9225,1243],{"class":1065},[1052,9227,9228],{"class":1069}," users\n",[1052,9230,9231],{"class":1054,"line":1683},[1052,9232,1163],{"emptyLinePlaceholder":1162},[1052,9234,9235,9237,9239,9242],{"class":1054,"line":1703},[1052,9236,1170],{"class":1169},[1052,9238,1173],{"class":1169},[1052,9240,9241],{"class":1176}," good_sync_to_async_usage",[1052,9243,4099],{"class":1090},[1052,9245,9246,9248,9251],{"class":1054,"line":1723},[1052,9247,1194],{"class":1193},[1052,9249,9250],{"class":1197},"GOOD: Using sync_to_async wrapper.",[1052,9252,1201],{"class":1193},[1052,9254,9255,9257],{"class":1054,"line":1729},[1052,9256,7275],{"class":1090},[1052,9258,4087],{"class":1176},[1052,9260,9261,9263,9266],{"class":1054,"line":1735},[1052,9262,4871],{"class":1169},[1052,9264,9265],{"class":1176}," get_users",[1052,9267,4099],{"class":1090},[1052,9269,9270,9272,9274,9276,9278,9280,9282,9284,9286],{"class":1054,"line":1772},[1052,9271,1947],{"class":1065},[1052,9273,9135],{"class":1859},[1052,9275,1180],{"class":1090},[1052,9277,6866],{"class":1221},[1052,9279,1091],{"class":1090},[1052,9281,1368],{"class":1367},[1052,9283,1091],{"class":1090},[1052,9285,9123],{"class":1221},[1052,9287,9288],{"class":1090},"())\n",[1052,9290,9291],{"class":1054,"line":1777},[1052,9292,1237],{"class":1069},[1052,9294,9295,9297,9299,9301,9303],{"class":1054,"line":1788},[1052,9296,9110],{"class":1069},[1052,9298,1357],{"class":1090},[1052,9300,1360],{"class":1065},[1052,9302,9265],{"class":1221},[1052,9304,1305],{"class":1090},[1052,9306,9307,9309],{"class":1054,"line":1836},[1052,9308,1243],{"class":1065},[1052,9310,9228],{"class":1069},[1052,9312,9313],{"class":1054,"line":1865},[1052,9314,1163],{"emptyLinePlaceholder":1162},[1052,9316,9317],{"class":1054,"line":1908},[1052,9318,9319],{"class":1058},"# PITFALL 4: Incorrect transaction handling\n",[1052,9321,9322,9324,9326,9329],{"class":1054,"line":1916},[1052,9323,1170],{"class":1169},[1052,9325,1173],{"class":1169},[1052,9327,9328],{"class":1176}," bad_transaction_usage",[1052,9330,4099],{"class":1090},[1052,9332,9333,9335,9338],{"class":1054,"line":1939},[1052,9334,1194],{"class":1193},[1052,9336,9337],{"class":1197},"BAD: Incorrect async transaction usage.",[1052,9339,1201],{"class":1193},[1052,9341,9342,9345,9348,9350,9353,9356],{"class":1054,"line":1944},[1052,9343,9344],{"class":1065},"    with",[1052,9346,9347],{"class":1069}," transaction",[1052,9349,1091],{"class":1090},[1052,9351,9352],{"class":1221},"atomic",[1052,9354,9355],{"class":1090},"():",[1052,9357,9358],{"class":1058},"  # This won't work properly in async\n",[1052,9360,9361,9364,9366,9368,9370,9372,9374,9376,9378,9380,9382,9384,9386,9388,9390,9393,9395],{"class":1054,"line":1970},[1052,9362,9363],{"class":1069},"        user ",[1052,9365,1357],{"class":1090},[1052,9367,1360],{"class":1065},[1052,9369,2482],{"class":1221},[1052,9371,1180],{"class":1090},[1052,9373,6866],{"class":1221},[1052,9375,1091],{"class":1090},[1052,9377,1368],{"class":1367},[1052,9379,1091],{"class":1090},[1052,9381,4115],{"class":1367},[1052,9383,2489],{"class":1090},[1052,9385,6787],{"class":1428},[1052,9387,1357],{"class":1090},[1052,9389,1263],{"class":1255},[1052,9391,9392],{"class":1259},"test",[1052,9394,1263],{"class":1255},[1052,9396,1231],{"class":1090},[1052,9398,9399],{"class":1054,"line":1975},[1052,9400,9401],{"class":1058},"        # More operations...\n",[1052,9403,9404],{"class":1054,"line":1996},[1052,9405,1163],{"emptyLinePlaceholder":1162},[1052,9407,9408,9410,9412,9415],{"class":1054,"line":2006},[1052,9409,1170],{"class":1169},[1052,9411,1173],{"class":1169},[1052,9413,9414],{"class":1176}," good_transaction_usage",[1052,9416,4099],{"class":1090},[1052,9418,9419,9421,9424],{"class":1054,"line":2032},[1052,9420,1194],{"class":1193},[1052,9422,9423],{"class":1197},"GOOD: Proper async transaction handling.",[1052,9425,1201],{"class":1193},[1052,9427,9428,9430],{"class":1054,"line":2037},[1052,9429,7275],{"class":1090},[1052,9431,4087],{"class":1176},[1052,9433,9434,9436,9439],{"class":1054,"line":2045},[1052,9435,4871],{"class":1169},[1052,9437,9438],{"class":1176}," create_user_with_transaction",[1052,9440,4099],{"class":1090},[1052,9442,9443,9446,9448,9450,9452],{"class":1054,"line":2075},[1052,9444,9445],{"class":1065},"        with",[1052,9447,9347],{"class":1069},[1052,9449,1091],{"class":1090},[1052,9451,9352],{"class":1221},[1052,9453,4099],{"class":1090},[1052,9455,9456,9458,9460,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482],{"class":1054,"line":2095},[1052,9457,6855],{"class":1069},[1052,9459,1357],{"class":1090},[1052,9461,6984],{"class":1069},[1052,9463,1091],{"class":1090},[1052,9465,1368],{"class":1367},[1052,9467,1091],{"class":1090},[1052,9469,4115],{"class":1221},[1052,9471,1180],{"class":1090},[1052,9473,6787],{"class":1428},[1052,9475,1357],{"class":1090},[1052,9477,1263],{"class":1255},[1052,9479,9392],{"class":1259},[1052,9481,1263],{"class":1255},[1052,9483,1231],{"class":1090},[1052,9485,9486],{"class":1054,"line":2112},[1052,9487,9488],{"class":1058},"            # More operations...\n",[1052,9490,9491,9493],{"class":1054,"line":2119},[1052,9492,2438],{"class":1065},[1052,9494,6913],{"class":1069},[1052,9496,9497],{"class":1054,"line":2155},[1052,9498,1237],{"class":1069},[1052,9500,9501,9504,9506,9508,9510],{"class":1054,"line":2170},[1052,9502,9503],{"class":1069},"    user ",[1052,9505,1357],{"class":1090},[1052,9507,1360],{"class":1065},[1052,9509,9438],{"class":1221},[1052,9511,1305],{"class":1090},[1052,9513,9514,9516],{"class":1054,"line":3351},[1052,9515,1243],{"class":1065},[1052,9517,6913],{"class":1069},[1052,9519,9520],{"class":1054,"line":3383},[1052,9521,1163],{"emptyLinePlaceholder":1162},[1052,9523,9524],{"class":1054,"line":3393},[1052,9525,9526],{"class":1058},"# PITFALL 5: Shared mutable state without protection\n",[1052,9528,9529,9531,9534],{"class":1054,"line":3402},[1052,9530,2285],{"class":1169},[1052,9532,9533],{"class":2288}," BadAsyncCounter",[1052,9535,1640],{"class":1090},[1052,9537,9538,9540,9543],{"class":1054,"line":3407},[1052,9539,1194],{"class":1193},[1052,9541,9542],{"class":1197},"BAD: Unprotected shared state.",[1052,9544,1201],{"class":1193},[1052,9546,9547],{"class":1054,"line":3443},[1052,9548,1237],{"class":1069},[1052,9550,9551,9553,9555,9557,9559],{"class":1054,"line":3453},[1052,9552,4871],{"class":1169},[1052,9554,4874],{"class":1804},[1052,9556,1180],{"class":1090},[1052,9558,2325],{"class":2324},[1052,9560,1187],{"class":1090},[1052,9562,9563,9565,9567,9570,9572],{"class":1054,"line":3460},[1052,9564,4890],{"class":2378},[1052,9566,1091],{"class":1090},[1052,9568,9569],{"class":1367},"count",[1052,9571,1879],{"class":1090},[1052,9573,6319],{"class":1227},[1052,9575,9576],{"class":1054,"line":3465},[1052,9577,1237],{"class":1069},[1052,9579,9580,9582,9584,9586,9588,9590],{"class":1054,"line":3501},[1052,9581,1403],{"class":1169},[1052,9583,1173],{"class":1169},[1052,9585,6563],{"class":1176},[1052,9587,1180],{"class":1090},[1052,9589,2325],{"class":2324},[1052,9591,1187],{"class":1090},[1052,9593,9594,9596,9598,9600,9602],{"class":1054,"line":3511},[1052,9595,6479],{"class":1069},[1052,9597,1357],{"class":1090},[1052,9599,2398],{"class":2378},[1052,9601,1091],{"class":1090},[1052,9603,9604],{"class":1367},"count\n",[1052,9606,9607,9609,9611,9613,9615,9617,9619,9621],{"class":1054,"line":3518},[1052,9608,4789],{"class":1065},[1052,9610,1216],{"class":1069},[1052,9612,1091],{"class":1090},[1052,9614,1222],{"class":1221},[1052,9616,1180],{"class":1090},[1052,9618,5908],{"class":1227},[1052,9620,2065],{"class":1090},[1052,9622,9623],{"class":1058},"  # Simulate async work\n",[1052,9625,9626,9628,9630,9632,9634,9636,9638,9641],{"class":1054,"line":3523},[1052,9627,4890],{"class":2378},[1052,9629,1091],{"class":1090},[1052,9631,9569],{"class":1367},[1052,9633,1879],{"class":1090},[1052,9635,6388],{"class":1069},[1052,9637,6391],{"class":1754},[1052,9639,9640],{"class":1227}," 1",[1052,9642,9643],{"class":1058},"  # Race condition!\n",[1052,9645,9646],{"class":1054,"line":3555},[1052,9647,1163],{"emptyLinePlaceholder":1162},[1052,9649,9650,9652,9655],{"class":1054,"line":3565},[1052,9651,2285],{"class":1169},[1052,9653,9654],{"class":2288}," GoodAsyncCounter",[1052,9656,1640],{"class":1090},[1052,9658,9659,9661,9664],{"class":1054,"line":3572},[1052,9660,1194],{"class":1193},[1052,9662,9663],{"class":1197},"GOOD: Protected shared state.",[1052,9665,1201],{"class":1193},[1052,9667,9668],{"class":1054,"line":3577},[1052,9669,1237],{"class":1069},[1052,9671,9672,9674,9676,9678,9680],{"class":1054,"line":3607},[1052,9673,4871],{"class":1169},[1052,9675,4874],{"class":1804},[1052,9677,1180],{"class":1090},[1052,9679,2325],{"class":2324},[1052,9681,1187],{"class":1090},[1052,9683,9684,9686,9688,9690,9692],{"class":1054,"line":3622},[1052,9685,4890],{"class":2378},[1052,9687,1091],{"class":1090},[1052,9689,9569],{"class":1367},[1052,9691,1879],{"class":1090},[1052,9693,6319],{"class":1227},[1052,9695,9696,9698,9700,9702,9704,9706,9708,9710],{"class":1054,"line":3632},[1052,9697,4890],{"class":2378},[1052,9699,1091],{"class":1090},[1052,9701,6689],{"class":1367},[1052,9703,1879],{"class":1090},[1052,9705,1216],{"class":1069},[1052,9707,1091],{"class":1090},[1052,9709,6417],{"class":1221},[1052,9711,1305],{"class":1090},[1052,9713,9714],{"class":1054,"line":3637},[1052,9715,1237],{"class":1069},[1052,9717,9718,9720,9722,9724,9726,9728],{"class":1054,"line":3668},[1052,9719,1403],{"class":1169},[1052,9721,1173],{"class":1169},[1052,9723,6563],{"class":1176},[1052,9725,1180],{"class":1090},[1052,9727,2325],{"class":2324},[1052,9729,1187],{"class":1090},[1052,9731,9732,9734,9736,9738,9740,9742],{"class":1054,"line":3678},[1052,9733,2048],{"class":1065},[1052,9735,1620],{"class":1065},[1052,9737,2398],{"class":2378},[1052,9739,1091],{"class":1090},[1052,9741,6689],{"class":1367},[1052,9743,1640],{"class":1090},[1052,9745,9746,9749,9751,9753,9755],{"class":1054,"line":3704},[1052,9747,9748],{"class":1069},"            current ",[1052,9750,1357],{"class":1090},[1052,9752,2398],{"class":2378},[1052,9754,1091],{"class":1090},[1052,9756,9604],{"class":1367},[1052,9758,9759,9761,9763,9765,9767,9769,9771],{"class":1054,"line":3709},[1052,9760,3236],{"class":1065},[1052,9762,1216],{"class":1069},[1052,9764,1091],{"class":1090},[1052,9766,1222],{"class":1221},[1052,9768,1180],{"class":1090},[1052,9770,5908],{"class":1227},[1052,9772,1231],{"class":1090},[1052,9774,9775,9777,9779,9781,9783,9785,9787],{"class":1054,"line":3719},[1052,9776,5979],{"class":2378},[1052,9778,1091],{"class":1090},[1052,9780,9569],{"class":1367},[1052,9782,1879],{"class":1090},[1052,9784,6388],{"class":1069},[1052,9786,6391],{"class":1754},[1052,9788,6394],{"class":1227},[1052,9790,9791],{"class":1054,"line":3725},[1052,9792,1163],{"emptyLinePlaceholder":1162},[1052,9794,9795],{"class":1054,"line":3763},[1052,9796,9797],{"class":1058},"# PITFALL 6: Not handling exceptions properly\n",[1052,9799,9800,9802,9804,9807],{"class":1054,"line":3771},[1052,9801,1170],{"class":1169},[1052,9803,1173],{"class":1169},[1052,9805,9806],{"class":1176}," bad_exception_handling",[1052,9808,4099],{"class":1090},[1052,9810,9811,9813,9816],{"class":1054,"line":3791},[1052,9812,1194],{"class":1193},[1052,9814,9815],{"class":1197},"BAD: Not handling async exceptions.",[1052,9817,1201],{"class":1193},[1052,9819,9820,9823,9825],{"class":1054,"line":3810},[1052,9821,9822],{"class":1069},"    tasks ",[1052,9824,1357],{"class":1090},[1052,9826,1657],{"class":1090},[1052,9828,9829,9832,9834,9836,9838,9840,9843,9845,9847,9849,9851],{"class":1054,"line":3830},[1052,9830,9831],{"class":1221},"        risky_async_operation",[1052,9833,1180],{"class":1090},[1052,9835,1853],{"class":1221},[1052,9837,2065],{"class":1090},[1052,9839,1406],{"class":1065},[1052,9841,9842],{"class":1069}," i ",[1052,9844,1412],{"class":1065},[1052,9846,6623],{"class":1804},[1052,9848,1180],{"class":1090},[1052,9850,3914],{"class":1227},[1052,9852,1231],{"class":1090},[1052,9854,9855],{"class":1054,"line":3853},[1052,9856,9857],{"class":1090},"    ]\n",[1052,9859,9860],{"class":1054,"line":3859},[1052,9861,1237],{"class":1069},[1052,9863,9864],{"class":1054,"line":3866},[1052,9865,9866],{"class":1058},"    # If any task fails, all results are lost\n",[1052,9868,9869,9872,9874,9876,9878,9880,9882,9884,9886,9888],{"class":1054,"line":3872},[1052,9870,9871],{"class":1069},"    results ",[1052,9873,1357],{"class":1090},[1052,9875,1360],{"class":1065},[1052,9877,1216],{"class":1069},[1052,9879,1091],{"class":1090},[1052,9881,1749],{"class":1221},[1052,9883,1180],{"class":1090},[1052,9885,1755],{"class":1754},[1052,9887,1758],{"class":1221},[1052,9889,1231],{"class":1090},[1052,9891,9892,9894],{"class":1054,"line":3882},[1052,9893,1243],{"class":1065},[1052,9895,9896],{"class":1069}," results\n",[1052,9898,9899],{"class":1054,"line":3919},[1052,9900,1163],{"emptyLinePlaceholder":1162},[1052,9902,9903,9905,9907,9910],{"class":1054,"line":3931},[1052,9904,1170],{"class":1169},[1052,9906,1173],{"class":1169},[1052,9908,9909],{"class":1176}," good_exception_handling",[1052,9911,4099],{"class":1090},[1052,9913,9914,9916,9919],{"class":1054,"line":3951},[1052,9915,1194],{"class":1193},[1052,9917,9918],{"class":1197},"GOOD: Proper async exception handling.",[1052,9920,1201],{"class":1193},[1052,9922,9923,9925,9927],{"class":1054,"line":3970},[1052,9924,9822],{"class":1069},[1052,9926,1357],{"class":1090},[1052,9928,1657],{"class":1090},[1052,9930,9931,9933,9935,9937,9939,9941,9943,9945,9947,9949,9951],{"class":1054,"line":3993},[1052,9932,9831],{"class":1221},[1052,9934,1180],{"class":1090},[1052,9936,1853],{"class":1221},[1052,9938,2065],{"class":1090},[1052,9940,1406],{"class":1065},[1052,9942,9842],{"class":1069},[1052,9944,1412],{"class":1065},[1052,9946,6623],{"class":1804},[1052,9948,1180],{"class":1090},[1052,9950,3914],{"class":1227},[1052,9952,1231],{"class":1090},[1052,9954,9955],{"class":1054,"line":3999},[1052,9956,9857],{"class":1090},[1052,9958,9959],{"class":1054,"line":4004},[1052,9960,1237],{"class":1069},[1052,9962,9963],{"class":1054,"line":4025},[1052,9964,9965],{"class":1058},"    # Handle exceptions gracefully\n",[1052,9967,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990,9992,9994],{"class":1054,"line":4030},[1052,9969,9871],{"class":1069},[1052,9971,1357],{"class":1090},[1052,9973,1360],{"class":1065},[1052,9975,1216],{"class":1069},[1052,9977,1091],{"class":1090},[1052,9979,1749],{"class":1221},[1052,9981,1180],{"class":1090},[1052,9983,1755],{"class":1754},[1052,9985,1758],{"class":1221},[1052,9987,1153],{"class":1090},[1052,9989,1763],{"class":1428},[1052,9991,1357],{"class":1090},[1052,9993,1435],{"class":1434},[1052,9995,1231],{"class":1090},[1052,9997,9998],{"class":1054,"line":4065},[1052,9999,1237],{"class":1069},[1052,10001,10002,10005,10007],{"class":1054,"line":4075},[1052,10003,10004],{"class":1069},"    successful_results ",[1052,10006,1357],{"class":1090},[1052,10008,1397],{"class":1090},[1052,10010,10011,10014,10016],{"class":1054,"line":4081},[1052,10012,10013],{"class":1069},"    errors ",[1052,10015,1357],{"class":1090},[1052,10017,1397],{"class":1090},[1052,10019,10020],{"class":1054,"line":4090},[1052,10021,1237],{"class":1069},[1052,10023,10024,10027,10029,10031,10034,10036,10038,10040,10042],{"class":1054,"line":4102},[1052,10025,10026],{"class":1065},"    for",[1052,10028,1794],{"class":1069},[1052,10030,1153],{"class":1090},[1052,10032,10033],{"class":1069}," result ",[1052,10035,1412],{"class":1065},[1052,10037,1805],{"class":1804},[1052,10039,1180],{"class":1090},[1052,10041,1847],{"class":1221},[1052,10043,1187],{"class":1090},[1052,10045,10046,10048,10050,10052,10054,10056,10058],{"class":1054,"line":4121},[1052,10047,2419],{"class":1065},[1052,10049,1842],{"class":1804},[1052,10051,1180],{"class":1090},[1052,10053,2837],{"class":1221},[1052,10055,1153],{"class":1090},[1052,10057,1860],{"class":1859},[1052,10059,1187],{"class":1090},[1052,10061,10062,10065,10067,10069,10071,10073,10076,10078,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098],{"class":1054,"line":4142},[1052,10063,10064],{"class":1069},"            errors",[1052,10066,1091],{"class":1090},[1052,10068,1455],{"class":1221},[1052,10070,1952],{"class":1090},[1052,10072,1263],{"class":1255},[1052,10074,10075],{"class":1259},"index",[1052,10077,1263],{"class":1255},[1052,10079,1266],{"class":1090},[1052,10081,1794],{"class":1221},[1052,10083,1153],{"class":1090},[1052,10085,1269],{"class":1255},[1052,10087,1887],{"class":1259},[1052,10089,1263],{"class":1255},[1052,10091,1266],{"class":1090},[1052,10093,1894],{"class":1859},[1052,10095,1180],{"class":1090},[1052,10097,2837],{"class":1221},[1052,10099,10100],{"class":1090},")})\n",[1052,10102,10103,10105],{"class":1054,"line":4162},[1052,10104,2466],{"class":1065},[1052,10106,1640],{"class":1090},[1052,10108,10109,10112,10114,10116,10118,10120],{"class":1054,"line":4183},[1052,10110,10111],{"class":1069},"            successful_results",[1052,10113,1091],{"class":1090},[1052,10115,1455],{"class":1221},[1052,10117,1180],{"class":1090},[1052,10119,2837],{"class":1221},[1052,10121,1231],{"class":1090},[1052,10123,10124],{"class":1054,"line":4212},[1052,10125,1237],{"class":1069},[1052,10127,10128,10130],{"class":1054,"line":4218},[1052,10129,1243],{"class":1065},[1052,10131,3768],{"class":1090},[1052,10133,10134,10136,10139,10141,10143,10146],{"class":1054,"line":4223},[1052,10135,1256],{"class":1255},[1052,10137,10138],{"class":1259},"successful",[1052,10140,1263],{"class":1255},[1052,10142,1266],{"class":1090},[1052,10144,10145],{"class":1069}," successful_results",[1052,10147,1277],{"class":1090},[1052,10149,10150,10152,10155,10157,10159],{"class":1054,"line":4237},[1052,10151,1256],{"class":1255},[1052,10153,10154],{"class":1259},"errors",[1052,10156,1263],{"class":1255},[1052,10158,1266],{"class":1090},[1052,10160,10161],{"class":1069}," errors\n",[1052,10163,10164],{"class":1054,"line":4242},[1052,10165,10166],{"class":1090},"    }\n",[1052,10168,10169],{"class":1054,"line":4249},[1052,10170,1163],{"emptyLinePlaceholder":1162},[1052,10172,10173,10175,10177,10180,10182,10184],{"class":1054,"line":4268},[1052,10174,1170],{"class":1169},[1052,10176,1173],{"class":1169},[1052,10178,10179],{"class":1176}," risky_async_operation",[1052,10181,1180],{"class":1090},[1052,10183,8325],{"class":1183},[1052,10185,1187],{"class":1090},[1052,10187,10188,10190,10193],{"class":1054,"line":4287},[1052,10189,1194],{"class":1193},[1052,10191,10192],{"class":1197},"Simulate risky async operation.",[1052,10194,1201],{"class":1193},[1052,10196,10197,10199,10201,10203,10205,10207,10209],{"class":1054,"line":4306},[1052,10198,1213],{"class":1065},[1052,10200,1216],{"class":1069},[1052,10202,1091],{"class":1090},[1052,10204,1222],{"class":1221},[1052,10206,1180],{"class":1090},[1052,10208,1228],{"class":1227},[1052,10210,1231],{"class":1090},[1052,10212,10213,10216,10218,10221,10224,10226,10229],{"class":1054,"line":4312},[1052,10214,10215],{"class":1065},"    if",[1052,10217,7026],{"class":1069},[1052,10219,10220],{"class":1754},"%",[1052,10222,10223],{"class":1227}," 3",[1052,10225,2087],{"class":1754},[1052,10227,10228],{"class":1227}," 0",[1052,10230,1640],{"class":1090},[1052,10232,10233,10235,10237,10239,10241,10244,10246,10248,10250,10253],{"class":1054,"line":4317},[1052,10234,3396],{"class":1065},[1052,10236,6823],{"class":1859},[1052,10238,1180],{"class":1090},[1052,10240,5306],{"class":1169},[1052,10242,10243],{"class":1259},"\"Value ",[1052,10245,2021],{"class":2020},[1052,10247,8325],{"class":1221},[1052,10249,2026],{"class":2020},[1052,10251,10252],{"class":1259}," is divisible by 3\"",[1052,10254,1231],{"class":1090},[1052,10256,10257,10259,10261,10263],{"class":1054,"line":4352},[1052,10258,1243],{"class":1065},[1052,10260,7026],{"class":1069},[1052,10262,1755],{"class":1754},[1052,10264,10265],{"class":1227}," 2\n",[1030,10267,10269],{"id":10268},"async-adapter-functions","Async Adapter Functions",[1034,10271,10273],{"id":10272},"sync_to_async-and-async_to_sync","sync_to_async and async_to_sync",[1042,10275,10277],{"className":1044,"code":10276,"language":1046,"meta":1047,"style":1047},"# Using Django's async adapters\nfrom asgiref.sync import sync_to_async, async_to_sync\nfrom django.contrib.auth.models import User\nfrom django.db import transaction\nimport asyncio\n\n# Basic sync_to_async usage\n@sync_to_async\ndef get_user_by_username(username):\n    \"\"\"Convert sync function to async.\"\"\"\n    return User.objects.get(username=username)\n\nasync def async_user_lookup():\n    \"\"\"Use sync function in async context.\"\"\"\n    user = await get_user_by_username('admin')\n    return user\n\n# Method conversion\nclass UserService:\n    \"\"\"Service with both sync and async methods.\"\"\"\n    \n    def get_user_sync(self, user_id):\n        \"\"\"Synchronous user retrieval.\"\"\"\n        return User.objects.get(id=user_id)\n    \n    # Convert method to async\n    async def get_user_async(self, user_id):\n        \"\"\"Asynchronous user retrieval.\"\"\"\n        get_user = sync_to_async(self.get_user_sync)\n        return await get_user(user_id)\n    \n    # Alternative: Direct conversion\n    def __init__(self):\n        self.get_user_async_alt = sync_to_async(self.get_user_sync)\n\n# Complex database operations\nclass AsyncUserManager:\n    \"\"\"Async user manager with complex operations.\"\"\"\n    \n    @sync_to_async\n    def create_user_with_profile(self, username, email, profile_data):\n        \"\"\"Create user with profile in transaction.\"\"\"\n        with transaction.atomic():\n            user = User.objects.create(\n                username=username,\n                email=email\n            )\n            \n            # Create related profile\n            from .models import UserProfile\n            UserProfile.objects.create(\n                user=user,\n                **profile_data\n            )\n            \n            return user\n    \n    @sync_to_async\n    def bulk_update_users(self, user_updates):\n        \"\"\"Bulk update users.\"\"\"\n        users_to_update = []\n        \n        for user_id, updates in user_updates.items():\n            try:\n                user = User.objects.get(id=user_id)\n                for field, value in updates.items():\n                    setattr(user, field, value)\n                users_to_update.append(user)\n            except User.DoesNotExist:\n                continue\n        \n        User.objects.bulk_update(\n            users_to_update,\n            ['email', 'first_name', 'last_name']\n        )\n        \n        return len(users_to_update)\n    \n    async def process_user_batch(self, user_data_list):\n        \"\"\"Process multiple users concurrently.\"\"\"\n        tasks = []\n        \n        for user_data in user_data_list:\n            task = self.create_user_with_profile(\n                user_data['username'],\n                user_data['email'],\n                user_data['profile']\n            )\n            tasks.append(task)\n        \n        results = await asyncio.gather(*tasks, return_exceptions=True)\n        \n        successful = []\n        failed = []\n        \n        for i, result in enumerate(results):\n            if isinstance(result, Exception):\n                failed.append({\n                    'data': user_data_list[i],\n                    'error': str(result)\n                })\n            else:\n                successful.append(result)\n        \n        return {\n            'successful': successful,\n            'failed': failed\n        }\n\n# Using async_to_sync (less common in views)\ndef sync_view_calling_async(request):\n    \"\"\"Sync view that needs to call async function.\"\"\"\n    \n    async def fetch_external_data():\n        \"\"\"Async function to fetch external data.\"\"\"\n        async with aiohttp.ClientSession() as session:\n            async with session.get('https://api.example.com/data') as response:\n                return await response.json()\n    \n    # Convert async function to sync\n    sync_fetch = async_to_sync(fetch_external_data)\n    data = sync_fetch()\n    \n    return JsonResponse(data)\n",[1049,10278,10279,10284,10303,10327,10341,10347,10351,10356,10362,10376,10385,10409,10413,10424,10433,10454,10460,10464,10469,10478,10487,10491,10508,10517,10541,10545,10550,10569,10578,10598,10613,10617,10622,10634,10657,10661,10666,10675,10684,10688,10694,10720,10729,10741,10759,10769,10777,10781,10785,10790,10803,10818,10828,10836,10840,10844,10850,10854,10860,10878,10887,10896,10900,10921,10927,10953,10974,10993,11008,11020,11025,11029,11045,11052,11084,11089,11093,11106,11110,11130,11139,11147,11151,11164,11180,11195,11209,11224,11228,11244,11248,11278,11282,11291,11300,11304,11324,11340,11351,11369,11387,11391,11397,11412,11416,11422,11437,11451,11455,11459,11464,11477,11486,11490,11501,11510,11530,11559,11573,11577,11582,11599,11611,11615],{"__ignoreMap":1047},[1052,10280,10281],{"class":1054,"line":1055},[1052,10282,10283],{"class":1058},"# Using Django's async adapters\n",[1052,10285,10286,10288,10290,10292,10294,10296,10298,10300],{"class":1054,"line":1062},[1052,10287,1084],{"class":1065},[1052,10289,1124],{"class":1069},[1052,10291,1091],{"class":1090},[1052,10293,1129],{"class":1069},[1052,10295,1066],{"class":1065},[1052,10297,2482],{"class":1069},[1052,10299,1153],{"class":1090},[1052,10301,10302],{"class":1069}," async_to_sync\n",[1052,10304,10305,10307,10309,10311,10314,10316,10319,10321,10323,10325],{"class":1054,"line":1073},[1052,10306,1084],{"class":1065},[1052,10308,1087],{"class":1069},[1052,10310,1091],{"class":1090},[1052,10312,10313],{"class":1069},"contrib",[1052,10315,1091],{"class":1090},[1052,10317,10318],{"class":1069},"auth",[1052,10320,1091],{"class":1090},[1052,10322,1145],{"class":1069},[1052,10324,1066],{"class":1065},[1052,10326,1156],{"class":1069},[1052,10328,10329,10331,10333,10335,10337,10339],{"class":1054,"line":1081},[1052,10330,1084],{"class":1065},[1052,10332,1087],{"class":1069},[1052,10334,1091],{"class":1090},[1052,10336,8821],{"class":1069},[1052,10338,1066],{"class":1065},[1052,10340,8826],{"class":1069},[1052,10342,10343,10345],{"class":1054,"line":1102},[1052,10344,1066],{"class":1065},[1052,10346,1070],{"class":1069},[1052,10348,10349],{"class":1054,"line":1119},[1052,10350,1163],{"emptyLinePlaceholder":1162},[1052,10352,10353],{"class":1054,"line":1137},[1052,10354,10355],{"class":1058},"# Basic sync_to_async usage\n",[1052,10357,10358,10360],{"class":1054,"line":1159},[1052,10359,3580],{"class":1090},[1052,10361,4087],{"class":1176},[1052,10363,10364,10367,10370,10372,10374],{"class":1054,"line":1166},[1052,10365,10366],{"class":1169},"def",[1052,10368,10369],{"class":1176}," get_user_by_username",[1052,10371,1180],{"class":1090},[1052,10373,6787],{"class":1183},[1052,10375,1187],{"class":1090},[1052,10377,10378,10380,10383],{"class":1054,"line":1190},[1052,10379,1194],{"class":1193},[1052,10381,10382],{"class":1197},"Convert sync function to async.",[1052,10384,1201],{"class":1193},[1052,10386,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405,10407],{"class":1054,"line":1204},[1052,10388,1243],{"class":1065},[1052,10390,6984],{"class":1069},[1052,10392,1091],{"class":1090},[1052,10394,1368],{"class":1367},[1052,10396,1091],{"class":1090},[1052,10398,2057],{"class":1221},[1052,10400,1180],{"class":1090},[1052,10402,6787],{"class":1428},[1052,10404,1357],{"class":1090},[1052,10406,6787],{"class":1221},[1052,10408,1231],{"class":1090},[1052,10410,10411],{"class":1054,"line":1210},[1052,10412,1163],{"emptyLinePlaceholder":1162},[1052,10414,10415,10417,10419,10422],{"class":1054,"line":1234},[1052,10416,1170],{"class":1169},[1052,10418,1173],{"class":1169},[1052,10420,10421],{"class":1176}," async_user_lookup",[1052,10423,4099],{"class":1090},[1052,10425,10426,10428,10431],{"class":1054,"line":1240},[1052,10427,1194],{"class":1193},[1052,10429,10430],{"class":1197},"Use sync function in async context.",[1052,10432,1201],{"class":1193},[1052,10434,10435,10437,10439,10441,10443,10445,10447,10450,10452],{"class":1054,"line":1252},[1052,10436,9503],{"class":1069},[1052,10438,1357],{"class":1090},[1052,10440,1360],{"class":1065},[1052,10442,10369],{"class":1221},[1052,10444,1180],{"class":1090},[1052,10446,1263],{"class":1255},[1052,10448,10449],{"class":1259},"admin",[1052,10451,1263],{"class":1255},[1052,10453,1231],{"class":1090},[1052,10455,10456,10458],{"class":1054,"line":1280},[1052,10457,1243],{"class":1065},[1052,10459,6913],{"class":1069},[1052,10461,10462],{"class":1054,"line":1308},[1052,10463,1163],{"emptyLinePlaceholder":1162},[1052,10465,10466],{"class":1054,"line":1314},[1052,10467,10468],{"class":1058},"# Method conversion\n",[1052,10470,10471,10473,10476],{"class":1054,"line":1319},[1052,10472,2285],{"class":1169},[1052,10474,10475],{"class":2288}," UserService",[1052,10477,1640],{"class":1090},[1052,10479,10480,10482,10485],{"class":1054,"line":1335},[1052,10481,1194],{"class":1193},[1052,10483,10484],{"class":1197},"Service with both sync and async methods.",[1052,10486,1201],{"class":1193},[1052,10488,10489],{"class":1054,"line":1345},[1052,10490,1237],{"class":1069},[1052,10492,10493,10495,10498,10500,10502,10504,10506],{"class":1054,"line":1351},[1052,10494,4871],{"class":1169},[1052,10496,10497],{"class":1176}," get_user_sync",[1052,10499,1180],{"class":1090},[1052,10501,2325],{"class":2324},[1052,10503,1153],{"class":1090},[1052,10505,6935],{"class":1183},[1052,10507,1187],{"class":1090},[1052,10509,10510,10512,10515],{"class":1054,"line":1378},[1052,10511,2353],{"class":1193},[1052,10513,10514],{"class":1197},"Synchronous user retrieval.",[1052,10516,1201],{"class":1193},[1052,10518,10519,10521,10523,10525,10527,10529,10531,10533,10535,10537,10539],{"class":1054,"line":1383},[1052,10520,1947],{"class":1065},[1052,10522,6984],{"class":1069},[1052,10524,1091],{"class":1090},[1052,10526,1368],{"class":1367},[1052,10528,1091],{"class":1090},[1052,10530,2057],{"class":1221},[1052,10532,1180],{"class":1090},[1052,10534,1466],{"class":1428},[1052,10536,1357],{"class":1090},[1052,10538,7006],{"class":1221},[1052,10540,1231],{"class":1090},[1052,10542,10543],{"class":1054,"line":1389},[1052,10544,1237],{"class":1069},[1052,10546,10547],{"class":1054,"line":1400},[1052,10548,10549],{"class":1058},"    # Convert method to async\n",[1052,10551,10552,10554,10556,10559,10561,10563,10565,10567],{"class":1054,"line":1447},[1052,10553,1403],{"class":1169},[1052,10555,1173],{"class":1169},[1052,10557,10558],{"class":1176}," get_user_async",[1052,10560,1180],{"class":1090},[1052,10562,2325],{"class":2324},[1052,10564,1153],{"class":1090},[1052,10566,6935],{"class":1183},[1052,10568,1187],{"class":1090},[1052,10570,10571,10573,10576],{"class":1054,"line":1460},[1052,10572,2353],{"class":1193},[1052,10574,10575],{"class":1197},"Asynchronous user retrieval.",[1052,10577,1201],{"class":1193},[1052,10579,10580,10583,10585,10587,10589,10591,10593,10596],{"class":1054,"line":1482},[1052,10581,10582],{"class":1069},"        get_user ",[1052,10584,1357],{"class":1090},[1052,10586,2482],{"class":1221},[1052,10588,1180],{"class":1090},[1052,10590,2325],{"class":2378},[1052,10592,1091],{"class":1090},[1052,10594,10595],{"class":1367},"get_user_sync",[1052,10597,1231],{"class":1090},[1052,10599,10600,10602,10604,10607,10609,10611],{"class":1054,"line":1502},[1052,10601,1947],{"class":1065},[1052,10603,1360],{"class":1065},[1052,10605,10606],{"class":1221}," get_user",[1052,10608,1180],{"class":1090},[1052,10610,7006],{"class":1221},[1052,10612,1231],{"class":1090},[1052,10614,10615],{"class":1054,"line":1527},[1052,10616,1237],{"class":1069},[1052,10618,10619],{"class":1054,"line":1533},[1052,10620,10621],{"class":1058},"    # Alternative: Direct conversion\n",[1052,10623,10624,10626,10628,10630,10632],{"class":1054,"line":1538},[1052,10625,4871],{"class":1169},[1052,10627,4874],{"class":1804},[1052,10629,1180],{"class":1090},[1052,10631,2325],{"class":2324},[1052,10633,1187],{"class":1090},[1052,10635,10636,10638,10640,10643,10645,10647,10649,10651,10653,10655],{"class":1054,"line":1547},[1052,10637,4890],{"class":2378},[1052,10639,1091],{"class":1090},[1052,10641,10642],{"class":1367},"get_user_async_alt",[1052,10644,1879],{"class":1090},[1052,10646,2482],{"class":1221},[1052,10648,1180],{"class":1090},[1052,10650,2325],{"class":2378},[1052,10652,1091],{"class":1090},[1052,10654,10595],{"class":1367},[1052,10656,1231],{"class":1090},[1052,10658,10659],{"class":1054,"line":1564},[1052,10660,1163],{"emptyLinePlaceholder":1162},[1052,10662,10663],{"class":1054,"line":1579},[1052,10664,10665],{"class":1058},"# Complex database operations\n",[1052,10667,10668,10670,10673],{"class":1054,"line":1584},[1052,10669,2285],{"class":1169},[1052,10671,10672],{"class":2288}," AsyncUserManager",[1052,10674,1640],{"class":1090},[1052,10676,10677,10679,10682],{"class":1054,"line":1589},[1052,10678,1194],{"class":1193},[1052,10680,10681],{"class":1197},"Async user manager with complex operations.",[1052,10683,1201],{"class":1193},[1052,10685,10686],{"class":1054,"line":1605},[1052,10687,1237],{"class":1069},[1052,10689,10690,10692],{"class":1054,"line":1615},[1052,10691,7275],{"class":1090},[1052,10693,4087],{"class":1176},[1052,10695,10696,10698,10701,10703,10705,10707,10709,10711,10713,10715,10718],{"class":1054,"line":1643},[1052,10697,4871],{"class":1169},[1052,10699,10700],{"class":1176}," create_user_with_profile",[1052,10702,1180],{"class":1090},[1052,10704,2325],{"class":2324},[1052,10706,1153],{"class":1090},[1052,10708,6721],{"class":1183},[1052,10710,1153],{"class":1090},[1052,10712,6726],{"class":1183},[1052,10714,1153],{"class":1090},[1052,10716,10717],{"class":1183}," profile_data",[1052,10719,1187],{"class":1090},[1052,10721,10722,10724,10727],{"class":1054,"line":1649},[1052,10723,2353],{"class":1193},[1052,10725,10726],{"class":1197},"Create user with profile in transaction.",[1052,10728,1201],{"class":1193},[1052,10730,10731,10733,10735,10737,10739],{"class":1054,"line":1660},[1052,10732,9445],{"class":1065},[1052,10734,9347],{"class":1069},[1052,10736,1091],{"class":1090},[1052,10738,9352],{"class":1221},[1052,10740,4099],{"class":1090},[1052,10742,10743,10745,10747,10749,10751,10753,10755,10757],{"class":1054,"line":1683},[1052,10744,6855],{"class":1069},[1052,10746,1357],{"class":1090},[1052,10748,6984],{"class":1069},[1052,10750,1091],{"class":1090},[1052,10752,1368],{"class":1367},[1052,10754,1091],{"class":1090},[1052,10756,4115],{"class":1221},[1052,10758,4118],{"class":1090},[1052,10760,10761,10763,10765,10767],{"class":1054,"line":1703},[1052,10762,6882],{"class":1428},[1052,10764,1357],{"class":1090},[1052,10766,6787],{"class":1221},[1052,10768,1277],{"class":1090},[1052,10770,10771,10773,10775],{"class":1054,"line":1723},[1052,10772,6893],{"class":1428},[1052,10774,1357],{"class":1090},[1052,10776,6898],{"class":1221},[1052,10778,10779],{"class":1054,"line":1729},[1052,10780,4215],{"class":1090},[1052,10782,10783],{"class":1054,"line":1735},[1052,10784,2787],{"class":1069},[1052,10786,10787],{"class":1054,"line":1772},[1052,10788,10789],{"class":1058},"            # Create related profile\n",[1052,10791,10792,10794,10796,10798,10800],{"class":1054,"line":1777},[1052,10793,5613],{"class":1065},[1052,10795,1142],{"class":1090},[1052,10797,1145],{"class":1069},[1052,10799,1066],{"class":1065},[1052,10801,10802],{"class":1069}," UserProfile\n",[1052,10804,10805,10808,10810,10812,10814,10816],{"class":1054,"line":1788},[1052,10806,10807],{"class":1069},"            UserProfile",[1052,10809,1091],{"class":1090},[1052,10811,1368],{"class":1367},[1052,10813,1091],{"class":1090},[1052,10815,4115],{"class":1221},[1052,10817,4118],{"class":1090},[1052,10819,10820,10822,10824,10826],{"class":1054,"line":1836},[1052,10821,7085],{"class":1428},[1052,10823,1357],{"class":1090},[1052,10825,7050],{"class":1221},[1052,10827,1277],{"class":1090},[1052,10829,10830,10833],{"class":1054,"line":1865},[1052,10831,10832],{"class":1754},"                **",[1052,10834,10835],{"class":1221},"profile_data\n",[1052,10837,10838],{"class":1054,"line":1908},[1052,10839,4215],{"class":1090},[1052,10841,10842],{"class":1054,"line":1916},[1052,10843,2787],{"class":1069},[1052,10845,10846,10848],{"class":1054,"line":1939},[1052,10847,2438],{"class":1065},[1052,10849,6913],{"class":1069},[1052,10851,10852],{"class":1054,"line":1944},[1052,10853,1237],{"class":1069},[1052,10855,10856,10858],{"class":1054,"line":1970},[1052,10857,7275],{"class":1090},[1052,10859,4087],{"class":1176},[1052,10861,10862,10864,10867,10869,10871,10873,10876],{"class":1054,"line":1975},[1052,10863,4871],{"class":1169},[1052,10865,10866],{"class":1176}," bulk_update_users",[1052,10868,1180],{"class":1090},[1052,10870,2325],{"class":2324},[1052,10872,1153],{"class":1090},[1052,10874,10875],{"class":1183}," user_updates",[1052,10877,1187],{"class":1090},[1052,10879,10880,10882,10885],{"class":1054,"line":1996},[1052,10881,2353],{"class":1193},[1052,10883,10884],{"class":1197},"Bulk update users.",[1052,10886,1201],{"class":1193},[1052,10888,10889,10892,10894],{"class":1054,"line":2006},[1052,10890,10891],{"class":1069},"        users_to_update ",[1052,10893,1357],{"class":1090},[1052,10895,1397],{"class":1090},[1052,10897,10898],{"class":1054,"line":2032},[1052,10899,1732],{"class":1069},[1052,10901,10902,10904,10906,10908,10911,10913,10915,10917,10919],{"class":1054,"line":2037},[1052,10903,1791],{"class":1065},[1052,10905,6935],{"class":1069},[1052,10907,1153],{"class":1090},[1052,10909,10910],{"class":1069}," updates ",[1052,10912,1412],{"class":1065},[1052,10914,10875],{"class":1069},[1052,10916,1091],{"class":1090},[1052,10918,7035],{"class":1221},[1052,10920,4099],{"class":1090},[1052,10922,10923,10925],{"class":1054,"line":2045},[1052,10924,6972],{"class":1065},[1052,10926,1640],{"class":1090},[1052,10928,10929,10931,10933,10935,10937,10939,10941,10943,10945,10947,10949,10951],{"class":1054,"line":2075},[1052,10930,6979],{"class":1069},[1052,10932,1357],{"class":1090},[1052,10934,6984],{"class":1069},[1052,10936,1091],{"class":1090},[1052,10938,1368],{"class":1367},[1052,10940,1091],{"class":1090},[1052,10942,2057],{"class":1221},[1052,10944,1180],{"class":1090},[1052,10946,1466],{"class":1428},[1052,10948,1357],{"class":1090},[1052,10950,7006],{"class":1221},[1052,10952,1231],{"class":1090},[1052,10954,10955,10957,10959,10961,10963,10965,10968,10970,10972],{"class":1054,"line":2095},[1052,10956,7018],{"class":1065},[1052,10958,7021],{"class":1069},[1052,10960,1153],{"class":1090},[1052,10962,7026],{"class":1069},[1052,10964,1412],{"class":1065},[1052,10966,10967],{"class":1069}," updates",[1052,10969,1091],{"class":1090},[1052,10971,7035],{"class":1221},[1052,10973,4099],{"class":1090},[1052,10975,10976,10979,10981,10983,10985,10987,10989,10991],{"class":1054,"line":2112},[1052,10977,10978],{"class":1804},"                    setattr",[1052,10980,1180],{"class":1090},[1052,10982,7050],{"class":1221},[1052,10984,1153],{"class":1090},[1052,10986,7021],{"class":1221},[1052,10988,1153],{"class":1090},[1052,10990,7074],{"class":1221},[1052,10992,1231],{"class":1090},[1052,10994,10995,10998,11000,11002,11004,11006],{"class":1054,"line":2119},[1052,10996,10997],{"class":1069},"                users_to_update",[1052,10999,1091],{"class":1090},[1052,11001,1455],{"class":1221},[1052,11003,1180],{"class":1090},[1052,11005,7050],{"class":1221},[1052,11007,1231],{"class":1090},[1052,11009,11010,11012,11014,11016,11018],{"class":1054,"line":2155},[1052,11011,7102],{"class":1065},[1052,11013,6984],{"class":1069},[1052,11015,1091],{"class":1090},[1052,11017,7109],{"class":1367},[1052,11019,1640],{"class":1090},[1052,11021,11022],{"class":1054,"line":2170},[1052,11023,11024],{"class":1065},"                continue\n",[1052,11026,11027],{"class":1054,"line":3351},[1052,11028,1732],{"class":1069},[1052,11030,11031,11034,11036,11038,11040,11043],{"class":1054,"line":3383},[1052,11032,11033],{"class":1069},"        User",[1052,11035,1091],{"class":1090},[1052,11037,1368],{"class":1367},[1052,11039,1091],{"class":1090},[1052,11041,11042],{"class":1221},"bulk_update",[1052,11044,4118],{"class":1090},[1052,11046,11047,11050],{"class":1054,"line":3393},[1052,11048,11049],{"class":1221},"            users_to_update",[1052,11051,1277],{"class":1090},[1052,11053,11054,11057,11059,11062,11064,11066,11068,11071,11073,11075,11077,11080,11082],{"class":1054,"line":3402},[1052,11055,11056],{"class":1090},"            [",[1052,11058,1263],{"class":1255},[1052,11060,11061],{"class":1259},"email",[1052,11063,1263],{"class":1255},[1052,11065,1153],{"class":1090},[1052,11067,1269],{"class":1255},[1052,11069,11070],{"class":1259},"first_name",[1052,11072,1263],{"class":1255},[1052,11074,1153],{"class":1090},[1052,11076,1269],{"class":1255},[1052,11078,11079],{"class":1259},"last_name",[1052,11081,1263],{"class":1255},[1052,11083,1936],{"class":1090},[1052,11085,11086],{"class":1054,"line":3407},[1052,11087,11088],{"class":1090},"        )\n",[1052,11090,11091],{"class":1054,"line":3443},[1052,11092,1732],{"class":1069},[1052,11094,11095,11097,11099,11101,11104],{"class":1054,"line":3453},[1052,11096,1947],{"class":1065},[1052,11098,6055],{"class":1804},[1052,11100,1180],{"class":1090},[1052,11102,11103],{"class":1221},"users_to_update",[1052,11105,1231],{"class":1090},[1052,11107,11108],{"class":1054,"line":3460},[1052,11109,1237],{"class":1069},[1052,11111,11112,11114,11116,11119,11121,11123,11125,11128],{"class":1054,"line":3465},[1052,11113,1403],{"class":1169},[1052,11115,1173],{"class":1169},[1052,11117,11118],{"class":1176}," process_user_batch",[1052,11120,1180],{"class":1090},[1052,11122,2325],{"class":2324},[1052,11124,1153],{"class":1090},[1052,11126,11127],{"class":1183}," user_data_list",[1052,11129,1187],{"class":1090},[1052,11131,11132,11134,11137],{"class":1054,"line":3501},[1052,11133,2353],{"class":1193},[1052,11135,11136],{"class":1197},"Process multiple users concurrently.",[1052,11138,1201],{"class":1193},[1052,11140,11141,11143,11145],{"class":1054,"line":3511},[1052,11142,1652],{"class":1069},[1052,11144,1357],{"class":1090},[1052,11146,1397],{"class":1090},[1052,11148,11149],{"class":1054,"line":3518},[1052,11150,1732],{"class":1069},[1052,11152,11153,11155,11158,11160,11162],{"class":1054,"line":3523},[1052,11154,1791],{"class":1065},[1052,11156,11157],{"class":1069}," user_data ",[1052,11159,1412],{"class":1065},[1052,11161,11127],{"class":1069},[1052,11163,1640],{"class":1090},[1052,11165,11166,11169,11171,11173,11175,11178],{"class":1054,"line":3555},[1052,11167,11168],{"class":1069},"            task ",[1052,11170,1357],{"class":1090},[1052,11172,2398],{"class":2378},[1052,11174,1091],{"class":1090},[1052,11176,11177],{"class":1221},"create_user_with_profile",[1052,11179,4118],{"class":1090},[1052,11181,11182,11185,11187,11189,11191,11193],{"class":1054,"line":3565},[1052,11183,11184],{"class":1221},"                user_data",[1052,11186,1850],{"class":1090},[1052,11188,1263],{"class":1255},[1052,11190,6787],{"class":1259},[1052,11192,1263],{"class":1255},[1052,11194,4139],{"class":1090},[1052,11196,11197,11199,11201,11203,11205,11207],{"class":1054,"line":3572},[1052,11198,11184],{"class":1221},[1052,11200,1850],{"class":1090},[1052,11202,1263],{"class":1255},[1052,11204,11061],{"class":1259},[1052,11206,1263],{"class":1255},[1052,11208,4139],{"class":1090},[1052,11210,11211,11213,11215,11217,11220,11222],{"class":1054,"line":3577},[1052,11212,11184],{"class":1221},[1052,11214,1850],{"class":1090},[1052,11216,1263],{"class":1255},[1052,11218,11219],{"class":1259},"profile",[1052,11221,1263],{"class":1255},[1052,11223,1936],{"class":1090},[1052,11225,11226],{"class":1054,"line":3607},[1052,11227,4215],{"class":1090},[1052,11229,11230,11233,11235,11237,11239,11242],{"class":1054,"line":3622},[1052,11231,11232],{"class":1069},"            tasks",[1052,11234,1091],{"class":1090},[1052,11236,1455],{"class":1221},[1052,11238,1180],{"class":1090},[1052,11240,11241],{"class":1221},"task",[1052,11243,1231],{"class":1090},[1052,11245,11246],{"class":1054,"line":3632},[1052,11247,1732],{"class":1069},[1052,11249,11250,11252,11254,11256,11258,11260,11262,11264,11266,11268,11270,11272,11274,11276],{"class":1054,"line":3637},[1052,11251,1738],{"class":1069},[1052,11253,1357],{"class":1090},[1052,11255,1360],{"class":1065},[1052,11257,1216],{"class":1069},[1052,11259,1091],{"class":1090},[1052,11261,1749],{"class":1221},[1052,11263,1180],{"class":1090},[1052,11265,1755],{"class":1754},[1052,11267,1758],{"class":1221},[1052,11269,1153],{"class":1090},[1052,11271,1763],{"class":1428},[1052,11273,1357],{"class":1090},[1052,11275,1435],{"class":1434},[1052,11277,1231],{"class":1090},[1052,11279,11280],{"class":1054,"line":3668},[1052,11281,1732],{"class":1069},[1052,11283,11284,11287,11289],{"class":1054,"line":3678},[1052,11285,11286],{"class":1069},"        successful ",[1052,11288,1357],{"class":1090},[1052,11290,1397],{"class":1090},[1052,11292,11293,11296,11298],{"class":1054,"line":3704},[1052,11294,11295],{"class":1069},"        failed ",[1052,11297,1357],{"class":1090},[1052,11299,1397],{"class":1090},[1052,11301,11302],{"class":1054,"line":3709},[1052,11303,1732],{"class":1069},[1052,11305,11306,11308,11310,11312,11314,11316,11318,11320,11322],{"class":1054,"line":3719},[1052,11307,1791],{"class":1065},[1052,11309,1794],{"class":1069},[1052,11311,1153],{"class":1090},[1052,11313,10033],{"class":1069},[1052,11315,1412],{"class":1065},[1052,11317,1805],{"class":1804},[1052,11319,1180],{"class":1090},[1052,11321,1847],{"class":1221},[1052,11323,1187],{"class":1090},[1052,11325,11326,11328,11330,11332,11334,11336,11338],{"class":1054,"line":3725},[1052,11327,1839],{"class":1065},[1052,11329,1842],{"class":1804},[1052,11331,1180],{"class":1090},[1052,11333,2837],{"class":1221},[1052,11335,1153],{"class":1090},[1052,11337,1860],{"class":1859},[1052,11339,1187],{"class":1090},[1052,11341,11342,11345,11347,11349],{"class":1054,"line":3763},[1052,11343,11344],{"class":1069},"                failed",[1052,11346,1091],{"class":1090},[1052,11348,1455],{"class":1221},[1052,11350,1249],{"class":1090},[1052,11352,11353,11355,11357,11359,11361,11363,11365,11367],{"class":1054,"line":3771},[1052,11354,3934],{"class":1255},[1052,11356,2628],{"class":1259},[1052,11358,1263],{"class":1255},[1052,11360,1266],{"class":1090},[1052,11362,11127],{"class":1221},[1052,11364,1850],{"class":1090},[1052,11366,1853],{"class":1221},[1052,11368,4139],{"class":1090},[1052,11370,11371,11373,11375,11377,11379,11381,11383,11385],{"class":1054,"line":3791},[1052,11372,3934],{"class":1255},[1052,11374,1887],{"class":1259},[1052,11376,1263],{"class":1255},[1052,11378,1266],{"class":1090},[1052,11380,1894],{"class":1859},[1052,11382,1180],{"class":1090},[1052,11384,2837],{"class":1221},[1052,11386,1231],{"class":1090},[1052,11388,11389],{"class":1054,"line":3810},[1052,11390,3996],{"class":1090},[1052,11392,11393,11395],{"class":1054,"line":3830},[1052,11394,1911],{"class":1065},[1052,11396,1640],{"class":1090},[1052,11398,11399,11402,11404,11406,11408,11410],{"class":1054,"line":3853},[1052,11400,11401],{"class":1069},"                successful",[1052,11403,1091],{"class":1090},[1052,11405,1455],{"class":1221},[1052,11407,1180],{"class":1090},[1052,11409,2837],{"class":1221},[1052,11411,1231],{"class":1090},[1052,11413,11414],{"class":1054,"line":3859},[1052,11415,1732],{"class":1069},[1052,11417,11418,11420],{"class":1054,"line":3866},[1052,11419,1947],{"class":1065},[1052,11421,3768],{"class":1090},[1052,11423,11424,11426,11428,11430,11432,11435],{"class":1054,"line":3872},[1052,11425,1463],{"class":1255},[1052,11427,10138],{"class":1259},[1052,11429,1263],{"class":1255},[1052,11431,1266],{"class":1090},[1052,11433,11434],{"class":1069}," successful",[1052,11436,1277],{"class":1090},[1052,11438,11439,11441,11444,11446,11448],{"class":1054,"line":3882},[1052,11440,1463],{"class":1255},[1052,11442,11443],{"class":1259},"failed",[1052,11445,1263],{"class":1255},[1052,11447,1266],{"class":1090},[1052,11449,11450],{"class":1069}," failed\n",[1052,11452,11453],{"class":1054,"line":3919},[1052,11454,4309],{"class":1090},[1052,11456,11457],{"class":1054,"line":3931},[1052,11458,1163],{"emptyLinePlaceholder":1162},[1052,11460,11461],{"class":1054,"line":3951},[1052,11462,11463],{"class":1058},"# Using async_to_sync (less common in views)\n",[1052,11465,11466,11468,11471,11473,11475],{"class":1054,"line":3970},[1052,11467,10366],{"class":1169},[1052,11469,11470],{"class":1176}," sync_view_calling_async",[1052,11472,1180],{"class":1090},[1052,11474,1184],{"class":1183},[1052,11476,1187],{"class":1090},[1052,11478,11479,11481,11484],{"class":1054,"line":3993},[1052,11480,1194],{"class":1193},[1052,11482,11483],{"class":1197},"Sync view that needs to call async function.",[1052,11485,1201],{"class":1193},[1052,11487,11488],{"class":1054,"line":3999},[1052,11489,1237],{"class":1069},[1052,11491,11492,11494,11496,11499],{"class":1054,"line":4004},[1052,11493,1403],{"class":1169},[1052,11495,1173],{"class":1169},[1052,11497,11498],{"class":1176}," fetch_external_data",[1052,11500,4099],{"class":1090},[1052,11502,11503,11505,11508],{"class":1054,"line":4025},[1052,11504,2353],{"class":1193},[1052,11506,11507],{"class":1197},"Async function to fetch external data.",[1052,11509,1201],{"class":1193},[1052,11511,11512,11514,11516,11518,11520,11522,11524,11526,11528],{"class":1054,"line":4030},[1052,11513,2048],{"class":1065},[1052,11515,1620],{"class":1065},[1052,11517,1623],{"class":1069},[1052,11519,1091],{"class":1090},[1052,11521,1628],{"class":1221},[1052,11523,1631],{"class":1090},[1052,11525,1634],{"class":1065},[1052,11527,1637],{"class":1069},[1052,11529,1640],{"class":1090},[1052,11531,11532,11534,11536,11538,11540,11542,11544,11546,11549,11551,11553,11555,11557],{"class":1054,"line":4065},[1052,11533,3885],{"class":1065},[1052,11535,1620],{"class":1065},[1052,11537,1637],{"class":1069},[1052,11539,1091],{"class":1090},[1052,11541,2057],{"class":1221},[1052,11543,1180],{"class":1090},[1052,11545,1263],{"class":1255},[1052,11547,11548],{"class":1259},"https://api.example.com/data",[1052,11550,1263],{"class":1255},[1052,11552,2065],{"class":1090},[1052,11554,1634],{"class":1065},[1052,11556,2070],{"class":1069},[1052,11558,1640],{"class":1090},[1052,11560,11561,11563,11565,11567,11569,11571],{"class":1054,"line":4075},[1052,11562,2098],{"class":1065},[1052,11564,1360],{"class":1065},[1052,11566,2070],{"class":1069},[1052,11568,1091],{"class":1090},[1052,11570,2107],{"class":1221},[1052,11572,1305],{"class":1090},[1052,11574,11575],{"class":1054,"line":4081},[1052,11576,1237],{"class":1069},[1052,11578,11579],{"class":1054,"line":4090},[1052,11580,11581],{"class":1058},"    # Convert async function to sync\n",[1052,11583,11584,11587,11589,11592,11594,11597],{"class":1054,"line":4102},[1052,11585,11586],{"class":1069},"    sync_fetch ",[1052,11588,1357],{"class":1090},[1052,11590,11591],{"class":1221}," async_to_sync",[1052,11593,1180],{"class":1090},[1052,11595,11596],{"class":1221},"fetch_external_data",[1052,11598,1231],{"class":1090},[1052,11600,11601,11604,11606,11609],{"class":1054,"line":4121},[1052,11602,11603],{"class":1069},"    data ",[1052,11605,1357],{"class":1090},[1052,11607,11608],{"class":1221}," sync_fetch",[1052,11610,1305],{"class":1090},[1052,11612,11613],{"class":1054,"line":4142},[1052,11614,1237],{"class":1069},[1052,11616,11617,11619,11621,11623,11625],{"class":1054,"line":4162},[1052,11618,1243],{"class":1065},[1052,11620,1246],{"class":1221},[1052,11622,1180],{"class":1090},[1052,11624,2628],{"class":1221},[1052,11626,1231],{"class":1090},[1034,11628,11630],{"id":11629},"custom-adapter-patterns","Custom Adapter Patterns",[1042,11632,11634],{"className":1044,"code":11633,"language":1046,"meta":1047,"style":1047},"# Custom async adapters and decorators\nimport functools\nfrom typing import Callable, Any\nfrom asgiref.sync import sync_to_async\n\ndef async_method(func: Callable) -> Callable:\n    \"\"\"Decorator to convert sync method to async.\"\"\"\n    @functools.wraps(func)\n    async def wrapper(*args, **kwargs):\n        sync_func = sync_to_async(func)\n        return await sync_func(*args, **kwargs)\n    \n    return wrapper\n\ndef cached_async_method(cache_key_func: Callable = None, ttl: int = 300):\n    \"\"\"Decorator for caching async method results.\"\"\"\n    def decorator(func: Callable) -> Callable:\n        @functools.wraps(func)\n        async def wrapper(*args, **kwargs):\n            # Generate cache key\n            if cache_key_func:\n                cache_key = cache_key_func(*args, **kwargs)\n            else:\n                cache_key = f\"{func.__name__}:{hash(str(args) + str(kwargs))}\"\n            \n            # Try to get from cache\n            from django.core.cache import cache\n            cached_result = await sync_to_async(cache.get)(cache_key)\n            \n            if cached_result is not None:\n                return cached_result\n            \n            # Execute function\n            result = await func(*args, **kwargs)\n            \n            # Cache result\n            await sync_to_async(cache.set)(cache_key, result, ttl)\n            \n            return result\n        \n        return wrapper\n    return decorator\n\nclass AsyncAdapter:\n    \"\"\"Generic async adapter for sync classes.\"\"\"\n    \n    def __init__(self, sync_class):\n        self.sync_class = sync_class\n        self._instance = None\n    \n    async def __aenter__(self):\n        \"\"\"Async context manager entry.\"\"\"\n        create_instance = sync_to_async(self.sync_class)\n        self._instance = await create_instance()\n        return self\n    \n    async def __aexit__(self, exc_type, exc_val, exc_tb):\n        \"\"\"Async context manager exit.\"\"\"\n        if hasattr(self._instance, 'close'):\n            close_method = sync_to_async(self._instance.close)\n            await close_method()\n    \n    def __getattr__(self, name):\n        \"\"\"Convert sync methods to async on demand.\"\"\"\n        if self._instance is None:\n            raise RuntimeError(\"Adapter not initialized. Use async with statement.\")\n        \n        attr = getattr(self._instance, name)\n        \n        if callable(attr):\n            return sync_to_async(attr)\n        else:\n            return attr\n\n# Usage examples\nclass SyncFileProcessor:\n    \"\"\"Sync file processor.\"\"\"\n    \n    def __init__(self, file_path):\n        self.file_path = file_path\n        self.file = open(file_path, 'r')\n    \n    def process_line(self, line):\n        \"\"\"Process a single line.\"\"\"\n        return line.strip().upper()\n    \n    def process_all(self):\n        \"\"\"Process all lines.\"\"\"\n        return [self.process_line(line) for line in self.file]\n    \n    def close(self):\n        \"\"\"Close file.\"\"\"\n        self.file.close()\n\nasync def async_file_processing_example():\n    \"\"\"Example using async adapter.\"\"\"\n    async with AsyncAdapter(lambda: SyncFileProcessor('data.txt')) as processor:\n        # All methods are now async\n        all_lines = await processor.process_all()\n        return all_lines\n\n# Batch async adapter\nclass BatchAsyncAdapter:\n    \"\"\"Adapter for batching sync operations.\"\"\"\n    \n    def __init__(self, sync_func, batch_size=10):\n        self.sync_func = sync_func\n        self.batch_size = batch_size\n    \n    async def process_batch(self, items):\n        \"\"\"Process items in batches asynchronously.\"\"\"\n        results = []\n        \n        for i in range(0, len(items), self.batch_size):\n            batch = items[i:i + self.batch_size]\n            \n            # Process batch synchronously (wrapped in async)\n            batch_processor = sync_to_async(self._process_sync_batch)\n            batch_results = await batch_processor(batch)\n            \n            results.extend(batch_results)\n            \n            # Yield control to event loop between batches\n            await asyncio.sleep(0)\n        \n        return results\n    \n    def _process_sync_batch(self, batch):\n        \"\"\"Process batch synchronously.\"\"\"\n        return [self.sync_func(item) for item in batch]\n\n# Usage\ndef expensive_sync_operation(item):\n    \"\"\"Simulate expensive sync operation.\"\"\"\n    import time\n    time.sleep(0.1)  # Simulate work\n    return item * 2\n\nasync def batch_processing_example():\n    \"\"\"Example of batch processing.\"\"\"\n    items = list(range(100))\n    \n    adapter = BatchAsyncAdapter(expensive_sync_operation, batch_size=10)\n    results = await adapter.process_batch(items)\n    \n    return results\n\n# Retry async adapter\nclass RetryAsyncAdapter:\n    \"\"\"Adapter that adds retry logic to async operations.\"\"\"\n    \n    def __init__(self, max_retries=3, delay=1.0, backoff=2.0):\n        self.max_retries = max_retries\n        self.delay = delay\n        self.backoff = backoff\n    \n    async def execute_with_retry(self, async_func, *args, **kwargs):\n        \"\"\"Execute async function with retry logic.\"\"\"\n        last_exception = None\n        current_delay = self.delay\n        \n        for attempt in range(self.max_retries + 1):\n            try:\n                return await async_func(*args, **kwargs)\n            \n            except Exception as e:\n                last_exception = e\n                \n                if attempt \u003C self.max_retries:\n                    await asyncio.sleep(current_delay)\n                    current_delay *= self.backoff\n                else:\n                    raise last_exception\n\n# Usage\nasync def unreliable_async_operation():\n    \"\"\"Simulate unreliable async operation.\"\"\"\n    import random\n    \n    if random.random() \u003C 0.7:  # 70% chance of failure\n        raise Exception(\"Random failure\")\n    \n    return \"Success!\"\n\nasync def retry_example():\n    \"\"\"Example using retry adapter.\"\"\"\n    retry_adapter = RetryAsyncAdapter(max_retries=5, delay=0.5)\n    \n    try:\n        result = await retry_adapter.execute_with_retry(unreliable_async_operation)\n        return result\n    except Exception as e:\n        return f\"Failed after retries: {e}\"\n",[1049,11635,11636,11641,11648,11665,11679,11683,11708,11717,11735,11758,11773,11796,11800,11807,11811,11848,11857,11880,11896,11918,11923,11932,11955,11961,12016,12020,12025,12043,12070,12074,12091,12098,12102,12107,12132,12136,12141,12170,12174,12181,12185,12191,12198,12202,12211,12220,12224,12241,12255,12267,12271,12286,12295,12314,12331,12338,12342,12372,12381,12406,12429,12438,12442,12459,12468,12484,12503,12507,12530,12534,12548,12560,12566,12573,12577,12582,12591,12600,12604,12621,12635,12664,12668,12686,12695,12713,12717,12730,12739,12774,12778,12791,12800,12814,12818,12829,12838,12873,12878,12896,12903,12907,12912,12921,12930,12934,12959,12973,12987,12991,13011,13020,13028,13032,13065,13093,13097,13102,13122,13141,13145,13162,13166,13171,13187,13191,13197,13201,13219,13228,13258,13262,13267,13280,13289,13295,13312,13322,13326,13337,13346,13367,13371,13395,13417,13421,13427,13431,13436,13445,13454,13458,13500,13514,13528,13542,13546,13578,13587,13596,13610,13614,13639,13645,13667,13671,13683,13694,13699,13717,13735,13751,13759,13768,13773,13778,13790,13800,13808,13813,13838,13856,13861,13873,13878,13890,13900,13929,13934,13941,13966,13973,13986],{"__ignoreMap":1047},[1052,11637,11638],{"class":1054,"line":1055},[1052,11639,11640],{"class":1058},"# Custom async adapters and decorators\n",[1052,11642,11643,11645],{"class":1054,"line":1062},[1052,11644,1066],{"class":1065},[1052,11646,11647],{"class":1069}," functools\n",[1052,11649,11650,11652,11655,11657,11660,11662],{"class":1054,"line":1073},[1052,11651,1084],{"class":1065},[1052,11653,11654],{"class":1069}," typing ",[1052,11656,1066],{"class":1065},[1052,11658,11659],{"class":1069}," Callable",[1052,11661,1153],{"class":1090},[1052,11663,11664],{"class":1069}," Any\n",[1052,11666,11667,11669,11671,11673,11675,11677],{"class":1054,"line":1081},[1052,11668,1084],{"class":1065},[1052,11670,1124],{"class":1069},[1052,11672,1091],{"class":1090},[1052,11674,1129],{"class":1069},[1052,11676,1066],{"class":1065},[1052,11678,1134],{"class":1069},[1052,11680,11681],{"class":1054,"line":1102},[1052,11682,1163],{"emptyLinePlaceholder":1162},[1052,11684,11685,11687,11690,11692,11695,11697,11699,11701,11704,11706],{"class":1054,"line":1119},[1052,11686,10366],{"class":1169},[1052,11688,11689],{"class":1176}," async_method",[1052,11691,1180],{"class":1090},[1052,11693,11694],{"class":1183},"func",[1052,11696,1266],{"class":1090},[1052,11698,11659],{"class":1069},[1052,11700,2065],{"class":1090},[1052,11702,11703],{"class":1090}," ->",[1052,11705,11659],{"class":1069},[1052,11707,1640],{"class":1090},[1052,11709,11710,11712,11715],{"class":1054,"line":1137},[1052,11711,1194],{"class":1193},[1052,11713,11714],{"class":1197},"Decorator to convert sync method to async.",[1052,11716,1201],{"class":1193},[1052,11718,11719,11721,11724,11726,11729,11731,11733],{"class":1054,"line":1159},[1052,11720,7275],{"class":1090},[1052,11722,11723],{"class":1176},"functools",[1052,11725,1091],{"class":1090},[1052,11727,11728],{"class":1176},"wraps",[1052,11730,1180],{"class":1090},[1052,11732,11694],{"class":1221},[1052,11734,1231],{"class":1090},[1052,11736,11737,11739,11741,11744,11746,11748,11750,11752,11754,11756],{"class":1054,"line":1166},[1052,11738,1403],{"class":1169},[1052,11740,1173],{"class":1169},[1052,11742,11743],{"class":1176}," wrapper",[1052,11745,1180],{"class":1090},[1052,11747,1755],{"class":1754},[1052,11749,2338],{"class":1183},[1052,11751,1153],{"class":1090},[1052,11753,2343],{"class":1754},[1052,11755,2346],{"class":1183},[1052,11757,1187],{"class":1090},[1052,11759,11760,11763,11765,11767,11769,11771],{"class":1054,"line":1190},[1052,11761,11762],{"class":1069},"        sync_func ",[1052,11764,1357],{"class":1090},[1052,11766,2482],{"class":1221},[1052,11768,1180],{"class":1090},[1052,11770,11694],{"class":1221},[1052,11772,1231],{"class":1090},[1052,11774,11775,11777,11779,11782,11784,11786,11788,11790,11792,11794],{"class":1054,"line":1204},[1052,11776,1947],{"class":1065},[1052,11778,1360],{"class":1065},[1052,11780,11781],{"class":1221}," sync_func",[1052,11783,1180],{"class":1090},[1052,11785,1755],{"class":1754},[1052,11787,2338],{"class":1221},[1052,11789,1153],{"class":1090},[1052,11791,2343],{"class":1754},[1052,11793,2346],{"class":1221},[1052,11795,1231],{"class":1090},[1052,11797,11798],{"class":1054,"line":1210},[1052,11799,1237],{"class":1069},[1052,11801,11802,11804],{"class":1054,"line":1234},[1052,11803,1243],{"class":1065},[1052,11805,11806],{"class":1069}," wrapper\n",[1052,11808,11809],{"class":1054,"line":1240},[1052,11810,1163],{"emptyLinePlaceholder":1162},[1052,11812,11813,11815,11818,11820,11823,11825,11828,11830,11832,11834,11836,11838,11841,11843,11846],{"class":1054,"line":1252},[1052,11814,10366],{"class":1169},[1052,11816,11817],{"class":1176}," cached_async_method",[1052,11819,1180],{"class":1090},[1052,11821,11822],{"class":1183},"cache_key_func",[1052,11824,1266],{"class":1090},[1052,11826,11827],{"class":1069}," Callable ",[1052,11829,1357],{"class":1090},[1052,11831,7228],{"class":1434},[1052,11833,1153],{"class":1090},[1052,11835,8183],{"class":1183},[1052,11837,1266],{"class":1090},[1052,11839,11840],{"class":1859}," int",[1052,11842,1879],{"class":1090},[1052,11844,11845],{"class":1227}," 300",[1052,11847,1187],{"class":1090},[1052,11849,11850,11852,11855],{"class":1054,"line":1280},[1052,11851,1194],{"class":1193},[1052,11853,11854],{"class":1197},"Decorator for caching async method results.",[1052,11856,1201],{"class":1193},[1052,11858,11859,11861,11864,11866,11868,11870,11872,11874,11876,11878],{"class":1054,"line":1308},[1052,11860,4871],{"class":1169},[1052,11862,11863],{"class":1176}," decorator",[1052,11865,1180],{"class":1090},[1052,11867,11694],{"class":1183},[1052,11869,1266],{"class":1090},[1052,11871,11659],{"class":1069},[1052,11873,2065],{"class":1090},[1052,11875,11703],{"class":1090},[1052,11877,11659],{"class":1069},[1052,11879,1640],{"class":1090},[1052,11881,11882,11884,11886,11888,11890,11892,11894],{"class":1054,"line":1314},[1052,11883,4084],{"class":1090},[1052,11885,11723],{"class":1176},[1052,11887,1091],{"class":1090},[1052,11889,11728],{"class":1176},[1052,11891,1180],{"class":1090},[1052,11893,11694],{"class":1221},[1052,11895,1231],{"class":1090},[1052,11897,11898,11900,11902,11904,11906,11908,11910,11912,11914,11916],{"class":1054,"line":1319},[1052,11899,2048],{"class":1169},[1052,11901,1173],{"class":1169},[1052,11903,11743],{"class":1176},[1052,11905,1180],{"class":1090},[1052,11907,1755],{"class":1754},[1052,11909,2338],{"class":1183},[1052,11911,1153],{"class":1090},[1052,11913,2343],{"class":1754},[1052,11915,2346],{"class":1183},[1052,11917,1187],{"class":1090},[1052,11919,11920],{"class":1054,"line":1335},[1052,11921,11922],{"class":1058},"            # Generate cache key\n",[1052,11924,11925,11927,11930],{"class":1054,"line":1345},[1052,11926,1839],{"class":1065},[1052,11928,11929],{"class":1069}," cache_key_func",[1052,11931,1640],{"class":1090},[1052,11933,11934,11937,11939,11941,11943,11945,11947,11949,11951,11953],{"class":1054,"line":1351},[1052,11935,11936],{"class":1069},"                cache_key ",[1052,11938,1357],{"class":1090},[1052,11940,11929],{"class":1221},[1052,11942,1180],{"class":1090},[1052,11944,1755],{"class":1754},[1052,11946,2338],{"class":1221},[1052,11948,1153],{"class":1090},[1052,11950,2343],{"class":1754},[1052,11952,2346],{"class":1221},[1052,11954,1231],{"class":1090},[1052,11956,11957,11959],{"class":1054,"line":1378},[1052,11958,1911],{"class":1065},[1052,11960,1640],{"class":1090},[1052,11962,11963,11965,11967,11969,11971,11973,11975,11977,11981,11983,11985,11987,11990,11992,11995,11997,11999,12001,12003,12005,12007,12009,12012,12014],{"class":1054,"line":1383},[1052,11964,11936],{"class":1069},[1052,11966,1357],{"class":1090},[1052,11968,2014],{"class":1169},[1052,11970,5040],{"class":1259},[1052,11972,2021],{"class":2020},[1052,11974,11694],{"class":1069},[1052,11976,1091],{"class":1090},[1052,11978,11980],{"class":11979},"s131V","__name__",[1052,11982,2026],{"class":2020},[1052,11984,1266],{"class":1259},[1052,11986,2021],{"class":2020},[1052,11988,11989],{"class":1804},"hash",[1052,11991,1180],{"class":1090},[1052,11993,11994],{"class":1859},"str",[1052,11996,1180],{"class":1090},[1052,11998,2338],{"class":1221},[1052,12000,2065],{"class":1090},[1052,12002,8355],{"class":1754},[1052,12004,1894],{"class":1859},[1052,12006,1180],{"class":1090},[1052,12008,2346],{"class":1221},[1052,12010,12011],{"class":1090},"))",[1052,12013,2026],{"class":2020},[1052,12015,2029],{"class":1259},[1052,12017,12018],{"class":1054,"line":1389},[1052,12019,2787],{"class":1069},[1052,12021,12022],{"class":1054,"line":1400},[1052,12023,12024],{"class":1058},"            # Try to get from cache\n",[1052,12026,12027,12029,12031,12033,12035,12037,12039,12041],{"class":1054,"line":1447},[1052,12028,5613],{"class":1065},[1052,12030,1087],{"class":1069},[1052,12032,1091],{"class":1090},[1052,12034,6276],{"class":1069},[1052,12036,1091],{"class":1090},[1052,12038,6281],{"class":1069},[1052,12040,1066],{"class":1065},[1052,12042,6286],{"class":1069},[1052,12044,12045,12048,12050,12052,12054,12056,12059,12061,12063,12065,12068],{"class":1054,"line":1460},[1052,12046,12047],{"class":1069},"            cached_result ",[1052,12049,1357],{"class":1090},[1052,12051,1360],{"class":1065},[1052,12053,2482],{"class":1221},[1052,12055,1180],{"class":1090},[1052,12057,12058],{"class":1221},"cache",[1052,12060,1091],{"class":1090},[1052,12062,2057],{"class":1367},[1052,12064,2489],{"class":1090},[1052,12066,12067],{"class":1221},"cache_key",[1052,12069,1231],{"class":1090},[1052,12071,12072],{"class":1054,"line":1482},[1052,12073,2787],{"class":1069},[1052,12075,12076,12078,12081,12084,12087,12089],{"class":1054,"line":1502},[1052,12077,1839],{"class":1065},[1052,12079,12080],{"class":1069}," cached_result ",[1052,12082,12083],{"class":1754},"is",[1052,12085,12086],{"class":1754}," not",[1052,12088,7228],{"class":1434},[1052,12090,1640],{"class":1090},[1052,12092,12093,12095],{"class":1054,"line":1527},[1052,12094,2098],{"class":1065},[1052,12096,12097],{"class":1069}," cached_result\n",[1052,12099,12100],{"class":1054,"line":1533},[1052,12101,2787],{"class":1069},[1052,12103,12104],{"class":1054,"line":1538},[1052,12105,12106],{"class":1058},"            # Execute function\n",[1052,12108,12109,12111,12113,12115,12118,12120,12122,12124,12126,12128,12130],{"class":1054,"line":1547},[1052,12110,2792],{"class":1069},[1052,12112,1357],{"class":1090},[1052,12114,1360],{"class":1065},[1052,12116,12117],{"class":1221}," func",[1052,12119,1180],{"class":1090},[1052,12121,1755],{"class":1754},[1052,12123,2338],{"class":1221},[1052,12125,1153],{"class":1090},[1052,12127,2343],{"class":1754},[1052,12129,2346],{"class":1221},[1052,12131,1231],{"class":1090},[1052,12133,12134],{"class":1054,"line":1564},[1052,12135,2787],{"class":1069},[1052,12137,12138],{"class":1054,"line":1579},[1052,12139,12140],{"class":1058},"            # Cache result\n",[1052,12142,12143,12145,12147,12149,12151,12153,12155,12157,12159,12161,12164,12166,12168],{"class":1054,"line":1584},[1052,12144,3236],{"class":1065},[1052,12146,2482],{"class":1221},[1052,12148,1180],{"class":1090},[1052,12150,12058],{"class":1221},[1052,12152,1091],{"class":1090},[1052,12154,8769],{"class":1367},[1052,12156,2489],{"class":1090},[1052,12158,12067],{"class":1221},[1052,12160,1153],{"class":1090},[1052,12162,12163],{"class":1221}," result",[1052,12165,1153],{"class":1090},[1052,12167,8183],{"class":1221},[1052,12169,1231],{"class":1090},[1052,12171,12172],{"class":1054,"line":1589},[1052,12173,2787],{"class":1069},[1052,12175,12176,12178],{"class":1054,"line":1605},[1052,12177,2438],{"class":1065},[1052,12179,12180],{"class":1069}," result\n",[1052,12182,12183],{"class":1054,"line":1615},[1052,12184,1732],{"class":1069},[1052,12186,12187,12189],{"class":1054,"line":1643},[1052,12188,1947],{"class":1065},[1052,12190,11806],{"class":1069},[1052,12192,12193,12195],{"class":1054,"line":1649},[1052,12194,1243],{"class":1065},[1052,12196,12197],{"class":1069}," decorator\n",[1052,12199,12200],{"class":1054,"line":1660},[1052,12201,1163],{"emptyLinePlaceholder":1162},[1052,12203,12204,12206,12209],{"class":1054,"line":1683},[1052,12205,2285],{"class":1169},[1052,12207,12208],{"class":2288}," AsyncAdapter",[1052,12210,1640],{"class":1090},[1052,12212,12213,12215,12218],{"class":1054,"line":1703},[1052,12214,1194],{"class":1193},[1052,12216,12217],{"class":1197},"Generic async adapter for sync classes.",[1052,12219,1201],{"class":1193},[1052,12221,12222],{"class":1054,"line":1723},[1052,12223,1237],{"class":1069},[1052,12225,12226,12228,12230,12232,12234,12236,12239],{"class":1054,"line":1729},[1052,12227,4871],{"class":1169},[1052,12229,4874],{"class":1804},[1052,12231,1180],{"class":1090},[1052,12233,2325],{"class":2324},[1052,12235,1153],{"class":1090},[1052,12237,12238],{"class":1183}," sync_class",[1052,12240,1187],{"class":1090},[1052,12242,12243,12245,12247,12250,12252],{"class":1054,"line":1735},[1052,12244,4890],{"class":2378},[1052,12246,1091],{"class":1090},[1052,12248,12249],{"class":1367},"sync_class",[1052,12251,1879],{"class":1090},[1052,12253,12254],{"class":1069}," sync_class\n",[1052,12256,12257,12259,12261,12263,12265],{"class":1054,"line":1772},[1052,12258,4890],{"class":2378},[1052,12260,1091],{"class":1090},[1052,12262,7222],{"class":1367},[1052,12264,1879],{"class":1090},[1052,12266,7118],{"class":1434},[1052,12268,12269],{"class":1054,"line":1777},[1052,12270,1237],{"class":1069},[1052,12272,12273,12275,12277,12280,12282,12284],{"class":1054,"line":1788},[1052,12274,1403],{"class":1169},[1052,12276,1173],{"class":1169},[1052,12278,12279],{"class":1804}," __aenter__",[1052,12281,1180],{"class":1090},[1052,12283,2325],{"class":2324},[1052,12285,1187],{"class":1090},[1052,12287,12288,12290,12293],{"class":1054,"line":1836},[1052,12289,2353],{"class":1193},[1052,12291,12292],{"class":1197},"Async context manager entry.",[1052,12294,1201],{"class":1193},[1052,12296,12297,12300,12302,12304,12306,12308,12310,12312],{"class":1054,"line":1865},[1052,12298,12299],{"class":1069},"        create_instance ",[1052,12301,1357],{"class":1090},[1052,12303,2482],{"class":1221},[1052,12305,1180],{"class":1090},[1052,12307,2325],{"class":2378},[1052,12309,1091],{"class":1090},[1052,12311,12249],{"class":1367},[1052,12313,1231],{"class":1090},[1052,12315,12316,12318,12320,12322,12324,12326,12329],{"class":1054,"line":1908},[1052,12317,4890],{"class":2378},[1052,12319,1091],{"class":1090},[1052,12321,7222],{"class":1367},[1052,12323,1879],{"class":1090},[1052,12325,1360],{"class":1065},[1052,12327,12328],{"class":1221}," create_instance",[1052,12330,1305],{"class":1090},[1052,12332,12333,12335],{"class":1054,"line":1916},[1052,12334,1947],{"class":1065},[1052,12336,12337],{"class":2378}," self\n",[1052,12339,12340],{"class":1054,"line":1939},[1052,12341,1237],{"class":1069},[1052,12343,12344,12346,12348,12351,12353,12355,12357,12360,12362,12365,12367,12370],{"class":1054,"line":1944},[1052,12345,1403],{"class":1169},[1052,12347,1173],{"class":1169},[1052,12349,12350],{"class":1804}," __aexit__",[1052,12352,1180],{"class":1090},[1052,12354,2325],{"class":2324},[1052,12356,1153],{"class":1090},[1052,12358,12359],{"class":1183}," exc_type",[1052,12361,1153],{"class":1090},[1052,12363,12364],{"class":1183}," exc_val",[1052,12366,1153],{"class":1090},[1052,12368,12369],{"class":1183}," exc_tb",[1052,12371,1187],{"class":1090},[1052,12373,12374,12376,12379],{"class":1054,"line":1970},[1052,12375,2353],{"class":1193},[1052,12377,12378],{"class":1197},"Async context manager exit.",[1052,12380,1201],{"class":1193},[1052,12382,12383,12385,12387,12389,12391,12393,12395,12397,12399,12402,12404],{"class":1054,"line":1975},[1052,12384,2419],{"class":1065},[1052,12386,7045],{"class":1804},[1052,12388,1180],{"class":1090},[1052,12390,2325],{"class":2378},[1052,12392,1091],{"class":1090},[1052,12394,7222],{"class":1367},[1052,12396,1153],{"class":1090},[1052,12398,1269],{"class":1255},[1052,12400,12401],{"class":1259},"close",[1052,12403,1263],{"class":1255},[1052,12405,1187],{"class":1090},[1052,12407,12408,12411,12413,12415,12417,12419,12421,12423,12425,12427],{"class":1054,"line":1996},[1052,12409,12410],{"class":1069},"            close_method ",[1052,12412,1357],{"class":1090},[1052,12414,2482],{"class":1221},[1052,12416,1180],{"class":1090},[1052,12418,2325],{"class":2378},[1052,12420,1091],{"class":1090},[1052,12422,7222],{"class":1367},[1052,12424,1091],{"class":1090},[1052,12426,12401],{"class":1367},[1052,12428,1231],{"class":1090},[1052,12430,12431,12433,12436],{"class":1054,"line":2006},[1052,12432,3236],{"class":1065},[1052,12434,12435],{"class":1221}," close_method",[1052,12437,1305],{"class":1090},[1052,12439,12440],{"class":1054,"line":2032},[1052,12441,1237],{"class":1069},[1052,12443,12444,12446,12449,12451,12453,12455,12457],{"class":1054,"line":2037},[1052,12445,4871],{"class":1169},[1052,12447,12448],{"class":1804}," __getattr__",[1052,12450,1180],{"class":1090},[1052,12452,2325],{"class":2324},[1052,12454,1153],{"class":1090},[1052,12456,3593],{"class":1183},[1052,12458,1187],{"class":1090},[1052,12460,12461,12463,12466],{"class":1054,"line":2045},[1052,12462,2353],{"class":1193},[1052,12464,12465],{"class":1197},"Convert sync methods to async on demand.",[1052,12467,1201],{"class":1193},[1052,12469,12470,12472,12474,12476,12478,12480,12482],{"class":1054,"line":2075},[1052,12471,2419],{"class":1065},[1052,12473,2398],{"class":2378},[1052,12475,1091],{"class":1090},[1052,12477,7222],{"class":1367},[1052,12479,7225],{"class":1754},[1052,12481,7228],{"class":1434},[1052,12483,1640],{"class":1090},[1052,12485,12486,12489,12492,12494,12496,12499,12501],{"class":1054,"line":2095},[1052,12487,12488],{"class":1065},"            raise",[1052,12490,12491],{"class":1859}," RuntimeError",[1052,12493,1180],{"class":1090},[1052,12495,5040],{"class":1255},[1052,12497,12498],{"class":1259},"Adapter not initialized. Use async with statement.",[1052,12500,5040],{"class":1255},[1052,12502,1231],{"class":1090},[1052,12504,12505],{"class":1054,"line":2112},[1052,12506,1732],{"class":1069},[1052,12508,12509,12512,12514,12516,12518,12520,12522,12524,12526,12528],{"class":1054,"line":2119},[1052,12510,12511],{"class":1069},"        attr ",[1052,12513,1357],{"class":1090},[1052,12515,2373],{"class":1804},[1052,12517,1180],{"class":1090},[1052,12519,2325],{"class":2378},[1052,12521,1091],{"class":1090},[1052,12523,7222],{"class":1367},[1052,12525,1153],{"class":1090},[1052,12527,3593],{"class":1221},[1052,12529,1231],{"class":1090},[1052,12531,12532],{"class":1054,"line":2155},[1052,12533,1732],{"class":1069},[1052,12535,12536,12538,12541,12543,12546],{"class":1054,"line":2170},[1052,12537,2419],{"class":1065},[1052,12539,12540],{"class":1804}," callable",[1052,12542,1180],{"class":1090},[1052,12544,12545],{"class":1221},"attr",[1052,12547,1187],{"class":1090},[1052,12549,12550,12552,12554,12556,12558],{"class":1054,"line":3351},[1052,12551,2438],{"class":1065},[1052,12553,2482],{"class":1221},[1052,12555,1180],{"class":1090},[1052,12557,12545],{"class":1221},[1052,12559,1231],{"class":1090},[1052,12561,12562,12564],{"class":1054,"line":3383},[1052,12563,2466],{"class":1065},[1052,12565,1640],{"class":1090},[1052,12567,12568,12570],{"class":1054,"line":3393},[1052,12569,2438],{"class":1065},[1052,12571,12572],{"class":1069}," attr\n",[1052,12574,12575],{"class":1054,"line":3402},[1052,12576,1163],{"emptyLinePlaceholder":1162},[1052,12578,12579],{"class":1054,"line":3407},[1052,12580,12581],{"class":1058},"# Usage examples\n",[1052,12583,12584,12586,12589],{"class":1054,"line":3443},[1052,12585,2285],{"class":1169},[1052,12587,12588],{"class":2288}," SyncFileProcessor",[1052,12590,1640],{"class":1090},[1052,12592,12593,12595,12598],{"class":1054,"line":3453},[1052,12594,1194],{"class":1193},[1052,12596,12597],{"class":1197},"Sync file processor.",[1052,12599,1201],{"class":1193},[1052,12601,12602],{"class":1054,"line":3460},[1052,12603,1237],{"class":1069},[1052,12605,12606,12608,12610,12612,12614,12616,12619],{"class":1054,"line":3465},[1052,12607,4871],{"class":1169},[1052,12609,4874],{"class":1804},[1052,12611,1180],{"class":1090},[1052,12613,2325],{"class":2324},[1052,12615,1153],{"class":1090},[1052,12617,12618],{"class":1183}," file_path",[1052,12620,1187],{"class":1090},[1052,12622,12623,12625,12627,12630,12632],{"class":1054,"line":3501},[1052,12624,4890],{"class":2378},[1052,12626,1091],{"class":1090},[1052,12628,12629],{"class":1367},"file_path",[1052,12631,1879],{"class":1090},[1052,12633,12634],{"class":1069}," file_path\n",[1052,12636,12637,12639,12641,12644,12646,12649,12651,12653,12655,12657,12660,12662],{"class":1054,"line":3511},[1052,12638,4890],{"class":2378},[1052,12640,1091],{"class":1090},[1052,12642,12643],{"class":1367},"file",[1052,12645,1879],{"class":1090},[1052,12647,12648],{"class":1804}," open",[1052,12650,1180],{"class":1090},[1052,12652,12629],{"class":1221},[1052,12654,1153],{"class":1090},[1052,12656,1269],{"class":1255},[1052,12658,12659],{"class":1259},"r",[1052,12661,1263],{"class":1255},[1052,12663,1231],{"class":1090},[1052,12665,12666],{"class":1054,"line":3518},[1052,12667,1237],{"class":1069},[1052,12669,12670,12672,12675,12677,12679,12681,12684],{"class":1054,"line":3523},[1052,12671,4871],{"class":1169},[1052,12673,12674],{"class":1176}," process_line",[1052,12676,1180],{"class":1090},[1052,12678,2325],{"class":2324},[1052,12680,1153],{"class":1090},[1052,12682,12683],{"class":1183}," line",[1052,12685,1187],{"class":1090},[1052,12687,12688,12690,12693],{"class":1054,"line":3555},[1052,12689,2353],{"class":1193},[1052,12691,12692],{"class":1197},"Process a single line.",[1052,12694,1201],{"class":1193},[1052,12696,12697,12699,12701,12703,12706,12708,12711],{"class":1054,"line":3565},[1052,12698,1947],{"class":1065},[1052,12700,12683],{"class":1069},[1052,12702,1091],{"class":1090},[1052,12704,12705],{"class":1221},"strip",[1052,12707,1299],{"class":1090},[1052,12709,12710],{"class":1221},"upper",[1052,12712,1305],{"class":1090},[1052,12714,12715],{"class":1054,"line":3572},[1052,12716,1237],{"class":1069},[1052,12718,12719,12721,12724,12726,12728],{"class":1054,"line":3577},[1052,12720,4871],{"class":1169},[1052,12722,12723],{"class":1176}," process_all",[1052,12725,1180],{"class":1090},[1052,12727,2325],{"class":2324},[1052,12729,1187],{"class":1090},[1052,12731,12732,12734,12737],{"class":1054,"line":3607},[1052,12733,2353],{"class":1193},[1052,12735,12736],{"class":1197},"Process all lines.",[1052,12738,1201],{"class":1193},[1052,12740,12741,12743,12746,12748,12750,12753,12755,12757,12759,12761,12764,12766,12768,12770,12772],{"class":1054,"line":3622},[1052,12742,1947],{"class":1065},[1052,12744,12745],{"class":1090}," [",[1052,12747,2325],{"class":2378},[1052,12749,1091],{"class":1090},[1052,12751,12752],{"class":1221},"process_line",[1052,12754,1180],{"class":1090},[1052,12756,1054],{"class":1221},[1052,12758,2065],{"class":1090},[1052,12760,1406],{"class":1065},[1052,12762,12763],{"class":1069}," line ",[1052,12765,1412],{"class":1065},[1052,12767,2398],{"class":2378},[1052,12769,1091],{"class":1090},[1052,12771,12643],{"class":1367},[1052,12773,1936],{"class":1090},[1052,12775,12776],{"class":1054,"line":3632},[1052,12777,1237],{"class":1069},[1052,12779,12780,12782,12785,12787,12789],{"class":1054,"line":3637},[1052,12781,4871],{"class":1169},[1052,12783,12784],{"class":1176}," close",[1052,12786,1180],{"class":1090},[1052,12788,2325],{"class":2324},[1052,12790,1187],{"class":1090},[1052,12792,12793,12795,12798],{"class":1054,"line":3668},[1052,12794,2353],{"class":1193},[1052,12796,12797],{"class":1197},"Close file.",[1052,12799,1201],{"class":1193},[1052,12801,12802,12804,12806,12808,12810,12812],{"class":1054,"line":3678},[1052,12803,4890],{"class":2378},[1052,12805,1091],{"class":1090},[1052,12807,12643],{"class":1367},[1052,12809,1091],{"class":1090},[1052,12811,12401],{"class":1221},[1052,12813,1305],{"class":1090},[1052,12815,12816],{"class":1054,"line":3704},[1052,12817,1163],{"emptyLinePlaceholder":1162},[1052,12819,12820,12822,12824,12827],{"class":1054,"line":3709},[1052,12821,1170],{"class":1169},[1052,12823,1173],{"class":1169},[1052,12825,12826],{"class":1176}," async_file_processing_example",[1052,12828,4099],{"class":1090},[1052,12830,12831,12833,12836],{"class":1054,"line":3719},[1052,12832,1194],{"class":1193},[1052,12834,12835],{"class":1197},"Example using async adapter.",[1052,12837,1201],{"class":1193},[1052,12839,12840,12842,12844,12846,12848,12851,12853,12855,12857,12859,12862,12864,12866,12868,12871],{"class":1054,"line":3725},[1052,12841,1403],{"class":1065},[1052,12843,1620],{"class":1065},[1052,12845,12208],{"class":1221},[1052,12847,1180],{"class":1090},[1052,12849,12850],{"class":1169},"lambda",[1052,12852,1266],{"class":1090},[1052,12854,12588],{"class":1221},[1052,12856,1180],{"class":1090},[1052,12858,1263],{"class":1255},[1052,12860,12861],{"class":1259},"data.txt",[1052,12863,1263],{"class":1255},[1052,12865,12011],{"class":1090},[1052,12867,1634],{"class":1065},[1052,12869,12870],{"class":1069}," processor",[1052,12872,1640],{"class":1090},[1052,12874,12875],{"class":1054,"line":3763},[1052,12876,12877],{"class":1058},"        # All methods are now async\n",[1052,12879,12880,12883,12885,12887,12889,12891,12894],{"class":1054,"line":3771},[1052,12881,12882],{"class":1069},"        all_lines ",[1052,12884,1357],{"class":1090},[1052,12886,1360],{"class":1065},[1052,12888,12870],{"class":1069},[1052,12890,1091],{"class":1090},[1052,12892,12893],{"class":1221},"process_all",[1052,12895,1305],{"class":1090},[1052,12897,12898,12900],{"class":1054,"line":3791},[1052,12899,1947],{"class":1065},[1052,12901,12902],{"class":1069}," all_lines\n",[1052,12904,12905],{"class":1054,"line":3810},[1052,12906,1163],{"emptyLinePlaceholder":1162},[1052,12908,12909],{"class":1054,"line":3830},[1052,12910,12911],{"class":1058},"# Batch async adapter\n",[1052,12913,12914,12916,12919],{"class":1054,"line":3853},[1052,12915,2285],{"class":1169},[1052,12917,12918],{"class":2288}," BatchAsyncAdapter",[1052,12920,1640],{"class":1090},[1052,12922,12923,12925,12928],{"class":1054,"line":3859},[1052,12924,1194],{"class":1193},[1052,12926,12927],{"class":1197},"Adapter for batching sync operations.",[1052,12929,1201],{"class":1193},[1052,12931,12932],{"class":1054,"line":3866},[1052,12933,1237],{"class":1069},[1052,12935,12936,12938,12940,12942,12944,12946,12948,12950,12953,12955,12957],{"class":1054,"line":3872},[1052,12937,4871],{"class":1169},[1052,12939,4874],{"class":1804},[1052,12941,1180],{"class":1090},[1052,12943,2325],{"class":2324},[1052,12945,1153],{"class":1090},[1052,12947,11781],{"class":1183},[1052,12949,1153],{"class":1090},[1052,12951,12952],{"class":1183}," batch_size",[1052,12954,1357],{"class":1754},[1052,12956,3914],{"class":1227},[1052,12958,1187],{"class":1090},[1052,12960,12961,12963,12965,12968,12970],{"class":1054,"line":3882},[1052,12962,4890],{"class":2378},[1052,12964,1091],{"class":1090},[1052,12966,12967],{"class":1367},"sync_func",[1052,12969,1879],{"class":1090},[1052,12971,12972],{"class":1069}," sync_func\n",[1052,12974,12975,12977,12979,12982,12984],{"class":1054,"line":3919},[1052,12976,4890],{"class":2378},[1052,12978,1091],{"class":1090},[1052,12980,12981],{"class":1367},"batch_size",[1052,12983,1879],{"class":1090},[1052,12985,12986],{"class":1069}," batch_size\n",[1052,12988,12989],{"class":1054,"line":3931},[1052,12990,1237],{"class":1069},[1052,12992,12993,12995,12997,13000,13002,13004,13006,13009],{"class":1054,"line":3951},[1052,12994,1403],{"class":1169},[1052,12996,1173],{"class":1169},[1052,12998,12999],{"class":1176}," process_batch",[1052,13001,1180],{"class":1090},[1052,13003,2325],{"class":2324},[1052,13005,1153],{"class":1090},[1052,13007,13008],{"class":1183}," items",[1052,13010,1187],{"class":1090},[1052,13012,13013,13015,13018],{"class":1054,"line":3970},[1052,13014,2353],{"class":1193},[1052,13016,13017],{"class":1197},"Process items in batches asynchronously.",[1052,13019,1201],{"class":1193},[1052,13021,13022,13024,13026],{"class":1054,"line":3993},[1052,13023,1738],{"class":1069},[1052,13025,1357],{"class":1090},[1052,13027,1397],{"class":1090},[1052,13029,13030],{"class":1054,"line":3999},[1052,13031,1732],{"class":1069},[1052,13033,13034,13036,13038,13040,13042,13044,13046,13048,13050,13052,13054,13057,13059,13061,13063],{"class":1054,"line":4004},[1052,13035,1791],{"class":1065},[1052,13037,9842],{"class":1069},[1052,13039,1412],{"class":1065},[1052,13041,6623],{"class":1804},[1052,13043,1180],{"class":1090},[1052,13045,5828],{"class":1227},[1052,13047,1153],{"class":1090},[1052,13049,6055],{"class":1804},[1052,13051,1180],{"class":1090},[1052,13053,7035],{"class":1221},[1052,13055,13056],{"class":1090},"),",[1052,13058,2398],{"class":2378},[1052,13060,1091],{"class":1090},[1052,13062,12981],{"class":1367},[1052,13064,1187],{"class":1090},[1052,13066,13067,13070,13072,13074,13076,13078,13080,13083,13085,13087,13089,13091],{"class":1054,"line":4025},[1052,13068,13069],{"class":1069},"            batch ",[1052,13071,1357],{"class":1090},[1052,13073,13008],{"class":1069},[1052,13075,1850],{"class":1090},[1052,13077,1853],{"class":1069},[1052,13079,1266],{"class":1090},[1052,13081,13082],{"class":1069},"i ",[1052,13084,6391],{"class":1754},[1052,13086,2398],{"class":2378},[1052,13088,1091],{"class":1090},[1052,13090,12981],{"class":1367},[1052,13092,1936],{"class":1090},[1052,13094,13095],{"class":1054,"line":4030},[1052,13096,2787],{"class":1069},[1052,13098,13099],{"class":1054,"line":4065},[1052,13100,13101],{"class":1058},"            # Process batch synchronously (wrapped in async)\n",[1052,13103,13104,13107,13109,13111,13113,13115,13117,13120],{"class":1054,"line":4075},[1052,13105,13106],{"class":1069},"            batch_processor ",[1052,13108,1357],{"class":1090},[1052,13110,2482],{"class":1221},[1052,13112,1180],{"class":1090},[1052,13114,2325],{"class":2378},[1052,13116,1091],{"class":1090},[1052,13118,13119],{"class":1367},"_process_sync_batch",[1052,13121,1231],{"class":1090},[1052,13123,13124,13127,13129,13131,13134,13136,13139],{"class":1054,"line":4081},[1052,13125,13126],{"class":1069},"            batch_results ",[1052,13128,1357],{"class":1090},[1052,13130,1360],{"class":1065},[1052,13132,13133],{"class":1221}," batch_processor",[1052,13135,1180],{"class":1090},[1052,13137,13138],{"class":1221},"batch",[1052,13140,1231],{"class":1090},[1052,13142,13143],{"class":1054,"line":4090},[1052,13144,2787],{"class":1069},[1052,13146,13147,13150,13152,13155,13157,13160],{"class":1054,"line":4102},[1052,13148,13149],{"class":1069},"            results",[1052,13151,1091],{"class":1090},[1052,13153,13154],{"class":1221},"extend",[1052,13156,1180],{"class":1090},[1052,13158,13159],{"class":1221},"batch_results",[1052,13161,1231],{"class":1090},[1052,13163,13164],{"class":1054,"line":4121},[1052,13165,2787],{"class":1069},[1052,13167,13168],{"class":1054,"line":4142},[1052,13169,13170],{"class":1058},"            # Yield control to event loop between batches\n",[1052,13172,13173,13175,13177,13179,13181,13183,13185],{"class":1054,"line":4162},[1052,13174,3236],{"class":1065},[1052,13176,1216],{"class":1069},[1052,13178,1091],{"class":1090},[1052,13180,1222],{"class":1221},[1052,13182,1180],{"class":1090},[1052,13184,5828],{"class":1227},[1052,13186,1231],{"class":1090},[1052,13188,13189],{"class":1054,"line":4183},[1052,13190,1732],{"class":1069},[1052,13192,13193,13195],{"class":1054,"line":4212},[1052,13194,1947],{"class":1065},[1052,13196,9896],{"class":1069},[1052,13198,13199],{"class":1054,"line":4218},[1052,13200,1237],{"class":1069},[1052,13202,13203,13205,13208,13210,13212,13214,13217],{"class":1054,"line":4223},[1052,13204,4871],{"class":1169},[1052,13206,13207],{"class":1176}," _process_sync_batch",[1052,13209,1180],{"class":1090},[1052,13211,2325],{"class":2324},[1052,13213,1153],{"class":1090},[1052,13215,13216],{"class":1183}," batch",[1052,13218,1187],{"class":1090},[1052,13220,13221,13223,13226],{"class":1054,"line":4237},[1052,13222,2353],{"class":1193},[1052,13224,13225],{"class":1197},"Process batch synchronously.",[1052,13227,1201],{"class":1193},[1052,13229,13230,13232,13234,13236,13238,13240,13242,13245,13247,13249,13252,13254,13256],{"class":1054,"line":4242},[1052,13231,1947],{"class":1065},[1052,13233,12745],{"class":1090},[1052,13235,2325],{"class":2378},[1052,13237,1091],{"class":1090},[1052,13239,12967],{"class":1221},[1052,13241,1180],{"class":1090},[1052,13243,13244],{"class":1221},"item",[1052,13246,2065],{"class":1090},[1052,13248,1406],{"class":1065},[1052,13250,13251],{"class":1069}," item ",[1052,13253,1412],{"class":1065},[1052,13255,13216],{"class":1069},[1052,13257,1936],{"class":1090},[1052,13259,13260],{"class":1054,"line":4249},[1052,13261,1163],{"emptyLinePlaceholder":1162},[1052,13263,13264],{"class":1054,"line":4268},[1052,13265,13266],{"class":1058},"# Usage\n",[1052,13268,13269,13271,13274,13276,13278],{"class":1054,"line":4287},[1052,13270,10366],{"class":1169},[1052,13272,13273],{"class":1176}," expensive_sync_operation",[1052,13275,1180],{"class":1090},[1052,13277,13244],{"class":1183},[1052,13279,1187],{"class":1090},[1052,13281,13282,13284,13287],{"class":1054,"line":4306},[1052,13283,1194],{"class":1193},[1052,13285,13286],{"class":1197},"Simulate expensive sync operation.",[1052,13288,1201],{"class":1193},[1052,13290,13291,13293],{"class":1054,"line":4312},[1052,13292,8874],{"class":1065},[1052,13294,4820],{"class":1069},[1052,13296,13297,13299,13301,13303,13305,13307,13309],{"class":1054,"line":4317},[1052,13298,8881],{"class":1069},[1052,13300,1091],{"class":1090},[1052,13302,1222],{"class":1221},[1052,13304,1180],{"class":1090},[1052,13306,1228],{"class":1227},[1052,13308,2065],{"class":1090},[1052,13310,13311],{"class":1058},"  # Simulate work\n",[1052,13313,13314,13316,13318,13320],{"class":1054,"line":4352},[1052,13315,1243],{"class":1065},[1052,13317,13251],{"class":1069},[1052,13319,1755],{"class":1754},[1052,13321,10265],{"class":1227},[1052,13323,13324],{"class":1054,"line":4362},[1052,13325,1163],{"emptyLinePlaceholder":1162},[1052,13327,13328,13330,13332,13335],{"class":1054,"line":4385},[1052,13329,1170],{"class":1169},[1052,13331,1173],{"class":1169},[1052,13333,13334],{"class":1176}," batch_processing_example",[1052,13336,4099],{"class":1090},[1052,13338,13339,13341,13344],{"class":1054,"line":4390},[1052,13340,1194],{"class":1193},[1052,13342,13343],{"class":1197},"Example of batch processing.",[1052,13345,1201],{"class":1193},[1052,13347,13348,13351,13353,13355,13357,13360,13362,13364],{"class":1054,"line":4397},[1052,13349,13350],{"class":1069},"    items ",[1052,13352,1357],{"class":1090},[1052,13354,9135],{"class":1859},[1052,13356,1180],{"class":1090},[1052,13358,13359],{"class":1804},"range",[1052,13361,1180],{"class":1090},[1052,13363,6628],{"class":1227},[1052,13365,13366],{"class":1090},"))\n",[1052,13368,13369],{"class":1054,"line":4407},[1052,13370,1237],{"class":1069},[1052,13372,13373,13376,13378,13380,13382,13385,13387,13389,13391,13393],{"class":1054,"line":4434},[1052,13374,13375],{"class":1069},"    adapter ",[1052,13377,1357],{"class":1090},[1052,13379,12918],{"class":1221},[1052,13381,1180],{"class":1090},[1052,13383,13384],{"class":1221},"expensive_sync_operation",[1052,13386,1153],{"class":1090},[1052,13388,12952],{"class":1428},[1052,13390,1357],{"class":1090},[1052,13392,3914],{"class":1227},[1052,13394,1231],{"class":1090},[1052,13396,13397,13399,13401,13403,13406,13408,13411,13413,13415],{"class":1054,"line":4470},[1052,13398,9871],{"class":1069},[1052,13400,1357],{"class":1090},[1052,13402,1360],{"class":1065},[1052,13404,13405],{"class":1069}," adapter",[1052,13407,1091],{"class":1090},[1052,13409,13410],{"class":1221},"process_batch",[1052,13412,1180],{"class":1090},[1052,13414,7035],{"class":1221},[1052,13416,1231],{"class":1090},[1052,13418,13419],{"class":1054,"line":4505},[1052,13420,1237],{"class":1069},[1052,13422,13423,13425],{"class":1054,"line":4540},[1052,13424,1243],{"class":1065},[1052,13426,9896],{"class":1069},[1052,13428,13429],{"class":1054,"line":4552},[1052,13430,1163],{"emptyLinePlaceholder":1162},[1052,13432,13433],{"class":1054,"line":4560},[1052,13434,13435],{"class":1058},"# Retry async adapter\n",[1052,13437,13438,13440,13443],{"class":1054,"line":4565},[1052,13439,2285],{"class":1169},[1052,13441,13442],{"class":2288}," RetryAsyncAdapter",[1052,13444,1640],{"class":1090},[1052,13446,13447,13449,13452],{"class":1054,"line":4578},[1052,13448,1194],{"class":1193},[1052,13450,13451],{"class":1197},"Adapter that adds retry logic to async operations.",[1052,13453,1201],{"class":1193},[1052,13455,13456],{"class":1054,"line":4583},[1052,13457,1237],{"class":1069},[1052,13459,13460,13462,13464,13466,13468,13470,13473,13475,13478,13480,13483,13485,13488,13490,13493,13495,13498],{"class":1054,"line":4590},[1052,13461,4871],{"class":1169},[1052,13463,4874],{"class":1804},[1052,13465,1180],{"class":1090},[1052,13467,2325],{"class":2324},[1052,13469,1153],{"class":1090},[1052,13471,13472],{"class":1183}," max_retries",[1052,13474,1357],{"class":1754},[1052,13476,13477],{"class":1227},"3",[1052,13479,1153],{"class":1090},[1052,13481,13482],{"class":1183}," delay",[1052,13484,1357],{"class":1754},[1052,13486,13487],{"class":1227},"1.0",[1052,13489,1153],{"class":1090},[1052,13491,13492],{"class":1183}," backoff",[1052,13494,1357],{"class":1754},[1052,13496,13497],{"class":1227},"2.0",[1052,13499,1187],{"class":1090},[1052,13501,13502,13504,13506,13509,13511],{"class":1054,"line":4609},[1052,13503,4890],{"class":2378},[1052,13505,1091],{"class":1090},[1052,13507,13508],{"class":1367},"max_retries",[1052,13510,1879],{"class":1090},[1052,13512,13513],{"class":1069}," max_retries\n",[1052,13515,13516,13518,13520,13523,13525],{"class":1054,"line":4628},[1052,13517,4890],{"class":2378},[1052,13519,1091],{"class":1090},[1052,13521,13522],{"class":1367},"delay",[1052,13524,1879],{"class":1090},[1052,13526,13527],{"class":1069}," delay\n",[1052,13529,13530,13532,13534,13537,13539],{"class":1054,"line":4646},[1052,13531,4890],{"class":2378},[1052,13533,1091],{"class":1090},[1052,13535,13536],{"class":1367},"backoff",[1052,13538,1879],{"class":1090},[1052,13540,13541],{"class":1069}," backoff\n",[1052,13543,13544],{"class":1054,"line":4651},[1052,13545,1237],{"class":1069},[1052,13547,13548,13550,13552,13555,13557,13559,13561,13564,13566,13568,13570,13572,13574,13576],{"class":1054,"line":4656},[1052,13549,1403],{"class":1169},[1052,13551,1173],{"class":1169},[1052,13553,13554],{"class":1176}," execute_with_retry",[1052,13556,1180],{"class":1090},[1052,13558,2325],{"class":2324},[1052,13560,1153],{"class":1090},[1052,13562,13563],{"class":1183}," async_func",[1052,13565,1153],{"class":1090},[1052,13567,2335],{"class":1754},[1052,13569,2338],{"class":1183},[1052,13571,1153],{"class":1090},[1052,13573,2343],{"class":1754},[1052,13575,2346],{"class":1183},[1052,13577,1187],{"class":1090},[1052,13579,13580,13582,13585],{"class":1054,"line":4687},[1052,13581,2353],{"class":1193},[1052,13583,13584],{"class":1197},"Execute async function with retry logic.",[1052,13586,1201],{"class":1193},[1052,13588,13589,13592,13594],{"class":1054,"line":4697},[1052,13590,13591],{"class":1069},"        last_exception ",[1052,13593,1357],{"class":1090},[1052,13595,7118],{"class":1434},[1052,13597,13598,13601,13603,13605,13607],{"class":1054,"line":4720},[1052,13599,13600],{"class":1069},"        current_delay ",[1052,13602,1357],{"class":1090},[1052,13604,2398],{"class":2378},[1052,13606,1091],{"class":1090},[1052,13608,13609],{"class":1367},"delay\n",[1052,13611,13612],{"class":1054,"line":4725},[1052,13613,1732],{"class":1069},[1052,13615,13616,13618,13621,13623,13625,13627,13629,13631,13633,13635,13637],{"class":1054,"line":4732},[1052,13617,1791],{"class":1065},[1052,13619,13620],{"class":1069}," attempt ",[1052,13622,1412],{"class":1065},[1052,13624,6623],{"class":1804},[1052,13626,1180],{"class":1090},[1052,13628,2325],{"class":2378},[1052,13630,1091],{"class":1090},[1052,13632,13508],{"class":1367},[1052,13634,8355],{"class":1754},[1052,13636,9640],{"class":1227},[1052,13638,1187],{"class":1090},[1052,13640,13641,13643],{"class":1054,"line":4742},[1052,13642,6972],{"class":1065},[1052,13644,1640],{"class":1090},[1052,13646,13647,13649,13651,13653,13655,13657,13659,13661,13663,13665],{"class":1054,"line":4769},[1052,13648,2098],{"class":1065},[1052,13650,1360],{"class":1065},[1052,13652,13563],{"class":1221},[1052,13654,1180],{"class":1090},[1052,13656,1755],{"class":1754},[1052,13658,2338],{"class":1221},[1052,13660,1153],{"class":1090},[1052,13662,2343],{"class":1754},[1052,13664,2346],{"class":1221},[1052,13666,1231],{"class":1090},[1052,13668,13669],{"class":1054,"line":4781},[1052,13670,2787],{"class":1069},[1052,13672,13673,13675,13677,13679,13681],{"class":1054,"line":4786},[1052,13674,7102],{"class":1065},[1052,13676,1860],{"class":1859},[1052,13678,1634],{"class":1065},[1052,13680,2165],{"class":1069},[1052,13682,1640],{"class":1090},[1052,13684,13686,13689,13691],{"class":1054,"line":13685},167,[1052,13687,13688],{"class":1069},"                last_exception ",[1052,13690,1357],{"class":1090},[1052,13692,13693],{"class":1069}," e\n",[1052,13695,13697],{"class":1054,"line":13696},168,[1052,13698,7013],{"class":1069},[1052,13700,13702,13704,13706,13709,13711,13713,13715],{"class":1054,"line":13701},169,[1052,13703,6023],{"class":1065},[1052,13705,13620],{"class":1069},[1052,13707,13708],{"class":1754},"\u003C",[1052,13710,2398],{"class":2378},[1052,13712,1091],{"class":1090},[1052,13714,13508],{"class":1367},[1052,13716,1640],{"class":1090},[1052,13718,13720,13722,13724,13726,13728,13730,13733],{"class":1054,"line":13719},170,[1052,13721,7368],{"class":1065},[1052,13723,1216],{"class":1069},[1052,13725,1091],{"class":1090},[1052,13727,1222],{"class":1221},[1052,13729,1180],{"class":1090},[1052,13731,13732],{"class":1221},"current_delay",[1052,13734,1231],{"class":1090},[1052,13736,13738,13741,13744,13746,13748],{"class":1054,"line":13737},171,[1052,13739,13740],{"class":1069},"                    current_delay ",[1052,13742,13743],{"class":1090},"*=",[1052,13745,2398],{"class":2378},[1052,13747,1091],{"class":1090},[1052,13749,13750],{"class":1367},"backoff\n",[1052,13752,13754,13757],{"class":1054,"line":13753},172,[1052,13755,13756],{"class":1065},"                else",[1052,13758,1640],{"class":1090},[1052,13760,13762,13765],{"class":1054,"line":13761},173,[1052,13763,13764],{"class":1065},"                    raise",[1052,13766,13767],{"class":1069}," last_exception\n",[1052,13769,13771],{"class":1054,"line":13770},174,[1052,13772,1163],{"emptyLinePlaceholder":1162},[1052,13774,13776],{"class":1054,"line":13775},175,[1052,13777,13266],{"class":1058},[1052,13779,13781,13783,13785,13788],{"class":1054,"line":13780},176,[1052,13782,1170],{"class":1169},[1052,13784,1173],{"class":1169},[1052,13786,13787],{"class":1176}," unreliable_async_operation",[1052,13789,4099],{"class":1090},[1052,13791,13793,13795,13798],{"class":1054,"line":13792},177,[1052,13794,1194],{"class":1193},[1052,13796,13797],{"class":1197},"Simulate unreliable async operation.",[1052,13799,1201],{"class":1193},[1052,13801,13803,13805],{"class":1054,"line":13802},178,[1052,13804,8874],{"class":1065},[1052,13806,13807],{"class":1069}," random\n",[1052,13809,13811],{"class":1054,"line":13810},179,[1052,13812,1237],{"class":1069},[1052,13814,13816,13818,13821,13823,13826,13828,13830,13833,13835],{"class":1054,"line":13815},180,[1052,13817,10215],{"class":1065},[1052,13819,13820],{"class":1069}," random",[1052,13822,1091],{"class":1090},[1052,13824,13825],{"class":1221},"random",[1052,13827,1631],{"class":1090},[1052,13829,7695],{"class":1754},[1052,13831,13832],{"class":1227}," 0.7",[1052,13834,1266],{"class":1090},[1052,13836,13837],{"class":1058},"  # 70% chance of failure\n",[1052,13839,13841,13843,13845,13847,13849,13852,13854],{"class":1054,"line":13840},181,[1052,13842,3396],{"class":1065},[1052,13844,1860],{"class":1859},[1052,13846,1180],{"class":1090},[1052,13848,5040],{"class":1255},[1052,13850,13851],{"class":1259},"Random failure",[1052,13853,5040],{"class":1255},[1052,13855,1231],{"class":1090},[1052,13857,13859],{"class":1054,"line":13858},182,[1052,13860,1237],{"class":1069},[1052,13862,13864,13866,13868,13871],{"class":1054,"line":13863},183,[1052,13865,1243],{"class":1065},[1052,13867,8902],{"class":1255},[1052,13869,13870],{"class":1259},"Success!",[1052,13872,2029],{"class":1255},[1052,13874,13876],{"class":1054,"line":13875},184,[1052,13877,1163],{"emptyLinePlaceholder":1162},[1052,13879,13881,13883,13885,13888],{"class":1054,"line":13880},185,[1052,13882,1170],{"class":1169},[1052,13884,1173],{"class":1169},[1052,13886,13887],{"class":1176}," retry_example",[1052,13889,4099],{"class":1090},[1052,13891,13893,13895,13898],{"class":1054,"line":13892},186,[1052,13894,1194],{"class":1193},[1052,13896,13897],{"class":1197},"Example using retry adapter.",[1052,13899,1201],{"class":1193},[1052,13901,13903,13906,13908,13910,13912,13914,13916,13918,13920,13922,13924,13927],{"class":1054,"line":13902},187,[1052,13904,13905],{"class":1069},"    retry_adapter ",[1052,13907,1357],{"class":1090},[1052,13909,13442],{"class":1221},[1052,13911,1180],{"class":1090},[1052,13913,13508],{"class":1428},[1052,13915,1357],{"class":1090},[1052,13917,1441],{"class":1227},[1052,13919,1153],{"class":1090},[1052,13921,13482],{"class":1428},[1052,13923,1357],{"class":1090},[1052,13925,13926],{"class":1227},"0.5",[1052,13928,1231],{"class":1090},[1052,13930,13932],{"class":1054,"line":13931},188,[1052,13933,1237],{"class":1069},[1052,13935,13937,13939],{"class":1054,"line":13936},189,[1052,13938,2040],{"class":1065},[1052,13940,1640],{"class":1090},[1052,13942,13944,13947,13949,13951,13954,13956,13959,13961,13964],{"class":1054,"line":13943},190,[1052,13945,13946],{"class":1069},"        result ",[1052,13948,1357],{"class":1090},[1052,13950,1360],{"class":1065},[1052,13952,13953],{"class":1069}," retry_adapter",[1052,13955,1091],{"class":1090},[1052,13957,13958],{"class":1221},"execute_with_retry",[1052,13960,1180],{"class":1090},[1052,13962,13963],{"class":1221},"unreliable_async_operation",[1052,13965,1231],{"class":1090},[1052,13967,13969,13971],{"class":1054,"line":13968},191,[1052,13970,1947],{"class":1065},[1052,13972,12180],{"class":1069},[1052,13974,13976,13978,13980,13982,13984],{"class":1054,"line":13975},192,[1052,13977,2158],{"class":1065},[1052,13979,1860],{"class":1859},[1052,13981,1634],{"class":1065},[1052,13983,2165],{"class":1069},[1052,13985,1640],{"class":1090},[1052,13987,13989,13991,13993,13996,13998,14000,14002],{"class":1054,"line":13988},193,[1052,13990,1947],{"class":1065},[1052,13992,2014],{"class":1169},[1052,13994,13995],{"class":1259},"\"Failed after retries: ",[1052,13997,2021],{"class":2020},[1052,13999,2189],{"class":1069},[1052,14001,2026],{"class":2020},[1052,14003,2029],{"class":1259},[1034,14005,14007],{"id":14006},"performance-optimization-with-adapters","Performance Optimization with Adapters",[1042,14009,14011],{"className":1044,"code":14010,"language":1046,"meta":1047,"style":1047},"# Performance-optimized async adapters\nimport asyncio\nfrom concurrent.futures import ThreadPoolExecutor\nfrom asgiref.sync import sync_to_async\n\nclass ThreadPoolAsyncAdapter:\n    \"\"\"Adapter using thread pool for CPU-intensive sync operations.\"\"\"\n    \n    def __init__(self, max_workers=None):\n        self.executor = ThreadPoolExecutor(max_workers=max_workers)\n    \n    async def run_in_thread(self, sync_func, *args, **kwargs):\n        \"\"\"Run sync function in thread pool.\"\"\"\n        loop = asyncio.get_event_loop()\n        return await loop.run_in_executor(\n            self.executor,\n            lambda: sync_func(*args, **kwargs)\n        )\n    \n    async def close(self):\n        \"\"\"Close thread pool.\"\"\"\n        self.executor.shutdown(wait=True)\n\n# CPU-intensive operations\ndef cpu_intensive_task(n):\n    \"\"\"Simulate CPU-intensive task.\"\"\"\n    result = 0\n    for i in range(n):\n        result += i ** 2\n    return result\n\nasync def optimized_cpu_task_example():\n    \"\"\"Example using thread pool adapter.\"\"\"\n    adapter = ThreadPoolAsyncAdapter(max_workers=4)\n    \n    try:\n        # Run multiple CPU-intensive tasks concurrently\n        tasks = [\n            adapter.run_in_thread(cpu_intensive_task, 100000)\n            for _ in range(10)\n        ]\n        \n        results = await asyncio.gather(*tasks)\n        return sum(results)\n    \n    finally:\n        await adapter.close()\n\n# Connection pooling adapter\nclass AsyncConnectionPoolAdapter:\n    \"\"\"Adapter with connection pooling for database operations.\"\"\"\n    \n    def __init__(self, pool_size=10):\n        self.pool_size = pool_size\n        self.semaphore = asyncio.Semaphore(pool_size)\n    \n    async def execute_with_pool(self, db_operation, *args, **kwargs):\n        \"\"\"Execute database operation with connection pooling.\"\"\"\n        async with self.semaphore:\n            # Convert sync DB operation to async\n            async_operation = sync_to_async(db_operation)\n            return await async_operation(*args, **kwargs)\n\n# Usage\ndef complex_db_query():\n    \"\"\"Complex database query.\"\"\"\n    from django.db import connection\n    \n    with connection.cursor() as cursor:\n        cursor.execute(\"\"\"\n            SELECT u.username, COUNT(p.id) as post_count\n            FROM auth_user u\n            LEFT JOIN blog_post p ON u.id = p.author_id\n            GROUP BY u.id, u.username\n            ORDER BY post_count DESC\n            LIMIT 10\n        \"\"\")\n        return cursor.fetchall()\n\nasync def pooled_db_example():\n    \"\"\"Example using connection pool adapter.\"\"\"\n    adapter = AsyncConnectionPoolAdapter(pool_size=5)\n    \n    # Execute multiple queries concurrently with pooling\n    tasks = [\n        adapter.execute_with_pool(complex_db_query)\n        for _ in range(20)\n    ]\n    \n    results = await asyncio.gather(*tasks)\n    return results[0]  # Return first result\n\n# Caching adapter with async support\nclass AsyncCachingAdapter:\n    \"\"\"Adapter that adds caching to async operations.\"\"\"\n    \n    def __init__(self):\n        self.cache = {}\n        self.locks = {}\n        self.main_lock = asyncio.Lock()\n    \n    async def cached_execute(self, cache_key, async_func, *args, **kwargs):\n        \"\"\"Execute function with caching.\"\"\"\n        # Check cache first\n        if cache_key in self.cache:\n            return self.cache[cache_key]\n        \n        # Get or create lock for this cache key\n        async with self.main_lock:\n            if cache_key not in self.locks:\n                self.locks[cache_key] = asyncio.Lock()\n            key_lock = self.locks[cache_key]\n        \n        # Execute with key-specific lock (prevents duplicate work)\n        async with key_lock:\n            # Double-check cache\n            if cache_key in self.cache:\n                return self.cache[cache_key]\n            \n            # Execute function\n            result = await async_func(*args, **kwargs)\n            \n            # Cache result\n            self.cache[cache_key] = result\n            \n            return result\n    \n    def clear_cache(self, pattern=None):\n        \"\"\"Clear cache entries.\"\"\"\n        if pattern:\n            keys_to_remove = [\n                key for key in self.cache.keys()\n                if pattern in key\n            ]\n            for key in keys_to_remove:\n                del self.cache[key]\n        else:\n            self.cache.clear()\n\nasync def cached_operation_example():\n    \"\"\"Example using caching adapter.\"\"\"\n    cache_adapter = AsyncCachingAdapter()\n    \n    async def expensive_operation(value):\n        \"\"\"Simulate expensive async operation.\"\"\"\n        await asyncio.sleep(1)\n        return value * 2\n    \n    # First call - will execute function\n    result1 = await cache_adapter.cached_execute(\n        'expensive_op_5',\n        expensive_operation,\n        5\n    )\n    \n    # Second call - will use cached result\n    result2 = await cache_adapter.cached_execute(\n        'expensive_op_5',\n        expensive_operation,\n        5\n    )\n    \n    return result1, result2  # Both should be 10\n",[1049,14012,14013,14018,14024,14041,14055,14059,14068,14077,14081,14102,14127,14131,14162,14171,14186,14202,14212,14235,14239,14243,14257,14266,14290,14294,14299,14313,14322,14330,14346,14359,14365,14369,14380,14389,14408,14412,14418,14423,14431,14453,14470,14474,14478,14500,14513,14517,14524,14536,14540,14545,14554,14563,14567,14588,14602,14626,14630,14662,14671,14685,14690,14706,14729,14733,14737,14746,14755,14770,14774,14794,14808,14813,14818,14823,14828,14833,14838,14844,14857,14861,14872,14881,14899,14903,14908,14916,14933,14950,14954,14958,14980,14995,14999,15004,15013,15022,15026,15038,15050,15063,15082,15086,15122,15131,15136,15153,15169,15173,15178,15192,15210,15234,15252,15256,15261,15271,15276,15292,15308,15312,15316,15340,15344,15348,15366,15370,15376,15380,15402,15411,15419,15428,15452,15464,15468,15481,15498,15504,15519,15523,15534,15543,15554,15558,15573,15582,15598,15608,15612,15617,15636,15647,15654,15659,15664,15668,15673,15690,15700,15706,15710,15714,15718],{"__ignoreMap":1047},[1052,14014,14015],{"class":1054,"line":1055},[1052,14016,14017],{"class":1058},"# Performance-optimized async adapters\n",[1052,14019,14020,14022],{"class":1054,"line":1062},[1052,14021,1066],{"class":1065},[1052,14023,1070],{"class":1069},[1052,14025,14026,14028,14031,14033,14036,14038],{"class":1054,"line":1073},[1052,14027,1084],{"class":1065},[1052,14029,14030],{"class":1069}," concurrent",[1052,14032,1091],{"class":1090},[1052,14034,14035],{"class":1069},"futures ",[1052,14037,1066],{"class":1065},[1052,14039,14040],{"class":1069}," ThreadPoolExecutor\n",[1052,14042,14043,14045,14047,14049,14051,14053],{"class":1054,"line":1081},[1052,14044,1084],{"class":1065},[1052,14046,1124],{"class":1069},[1052,14048,1091],{"class":1090},[1052,14050,1129],{"class":1069},[1052,14052,1066],{"class":1065},[1052,14054,1134],{"class":1069},[1052,14056,14057],{"class":1054,"line":1102},[1052,14058,1163],{"emptyLinePlaceholder":1162},[1052,14060,14061,14063,14066],{"class":1054,"line":1119},[1052,14062,2285],{"class":1169},[1052,14064,14065],{"class":2288}," ThreadPoolAsyncAdapter",[1052,14067,1640],{"class":1090},[1052,14069,14070,14072,14075],{"class":1054,"line":1137},[1052,14071,1194],{"class":1193},[1052,14073,14074],{"class":1197},"Adapter using thread pool for CPU-intensive sync operations.",[1052,14076,1201],{"class":1193},[1052,14078,14079],{"class":1054,"line":1159},[1052,14080,1237],{"class":1069},[1052,14082,14083,14085,14087,14089,14091,14093,14096,14098,14100],{"class":1054,"line":1166},[1052,14084,4871],{"class":1169},[1052,14086,4874],{"class":1804},[1052,14088,1180],{"class":1090},[1052,14090,2325],{"class":2324},[1052,14092,1153],{"class":1090},[1052,14094,14095],{"class":1183}," max_workers",[1052,14097,1357],{"class":1754},[1052,14099,8188],{"class":1434},[1052,14101,1187],{"class":1090},[1052,14103,14104,14106,14108,14111,14113,14116,14118,14121,14123,14125],{"class":1054,"line":1190},[1052,14105,4890],{"class":2378},[1052,14107,1091],{"class":1090},[1052,14109,14110],{"class":1367},"executor",[1052,14112,1879],{"class":1090},[1052,14114,14115],{"class":1221}," ThreadPoolExecutor",[1052,14117,1180],{"class":1090},[1052,14119,14120],{"class":1428},"max_workers",[1052,14122,1357],{"class":1090},[1052,14124,14120],{"class":1221},[1052,14126,1231],{"class":1090},[1052,14128,14129],{"class":1054,"line":1204},[1052,14130,1237],{"class":1069},[1052,14132,14133,14135,14137,14140,14142,14144,14146,14148,14150,14152,14154,14156,14158,14160],{"class":1054,"line":1210},[1052,14134,1403],{"class":1169},[1052,14136,1173],{"class":1169},[1052,14138,14139],{"class":1176}," run_in_thread",[1052,14141,1180],{"class":1090},[1052,14143,2325],{"class":2324},[1052,14145,1153],{"class":1090},[1052,14147,11781],{"class":1183},[1052,14149,1153],{"class":1090},[1052,14151,2335],{"class":1754},[1052,14153,2338],{"class":1183},[1052,14155,1153],{"class":1090},[1052,14157,2343],{"class":1754},[1052,14159,2346],{"class":1183},[1052,14161,1187],{"class":1090},[1052,14163,14164,14166,14169],{"class":1054,"line":1234},[1052,14165,2353],{"class":1193},[1052,14167,14168],{"class":1197},"Run sync function in thread pool.",[1052,14170,1201],{"class":1193},[1052,14172,14173,14176,14178,14180,14182,14184],{"class":1054,"line":1240},[1052,14174,14175],{"class":1069},"        loop ",[1052,14177,1357],{"class":1090},[1052,14179,1216],{"class":1069},[1052,14181,1091],{"class":1090},[1052,14183,1296],{"class":1221},[1052,14185,1305],{"class":1090},[1052,14187,14188,14190,14192,14195,14197,14200],{"class":1054,"line":1252},[1052,14189,1947],{"class":1065},[1052,14191,1360],{"class":1065},[1052,14193,14194],{"class":1069}," loop",[1052,14196,1091],{"class":1090},[1052,14198,14199],{"class":1221},"run_in_executor",[1052,14201,4118],{"class":1090},[1052,14203,14204,14206,14208,14210],{"class":1054,"line":1280},[1052,14205,5979],{"class":2378},[1052,14207,1091],{"class":1090},[1052,14209,14110],{"class":1367},[1052,14211,1277],{"class":1090},[1052,14213,14214,14217,14219,14221,14223,14225,14227,14229,14231,14233],{"class":1054,"line":1308},[1052,14215,14216],{"class":1169},"            lambda",[1052,14218,1266],{"class":1090},[1052,14220,11781],{"class":1221},[1052,14222,1180],{"class":1090},[1052,14224,1755],{"class":1754},[1052,14226,2338],{"class":1221},[1052,14228,1153],{"class":1090},[1052,14230,2343],{"class":1754},[1052,14232,2346],{"class":1221},[1052,14234,1231],{"class":1090},[1052,14236,14237],{"class":1054,"line":1314},[1052,14238,11088],{"class":1090},[1052,14240,14241],{"class":1054,"line":1319},[1052,14242,1237],{"class":1069},[1052,14244,14245,14247,14249,14251,14253,14255],{"class":1054,"line":1335},[1052,14246,1403],{"class":1169},[1052,14248,1173],{"class":1169},[1052,14250,12784],{"class":1176},[1052,14252,1180],{"class":1090},[1052,14254,2325],{"class":2324},[1052,14256,1187],{"class":1090},[1052,14258,14259,14261,14264],{"class":1054,"line":1345},[1052,14260,2353],{"class":1193},[1052,14262,14263],{"class":1197},"Close thread pool.",[1052,14265,1201],{"class":1193},[1052,14267,14268,14270,14272,14274,14276,14279,14281,14284,14286,14288],{"class":1054,"line":1351},[1052,14269,4890],{"class":2378},[1052,14271,1091],{"class":1090},[1052,14273,14110],{"class":1367},[1052,14275,1091],{"class":1090},[1052,14277,14278],{"class":1221},"shutdown",[1052,14280,1180],{"class":1090},[1052,14282,14283],{"class":1428},"wait",[1052,14285,1357],{"class":1090},[1052,14287,1435],{"class":1434},[1052,14289,1231],{"class":1090},[1052,14291,14292],{"class":1054,"line":1378},[1052,14293,1163],{"emptyLinePlaceholder":1162},[1052,14295,14296],{"class":1054,"line":1383},[1052,14297,14298],{"class":1058},"# CPU-intensive operations\n",[1052,14300,14301,14303,14306,14308,14311],{"class":1054,"line":1389},[1052,14302,10366],{"class":1169},[1052,14304,14305],{"class":1176}," cpu_intensive_task",[1052,14307,1180],{"class":1090},[1052,14309,14310],{"class":1183},"n",[1052,14312,1187],{"class":1090},[1052,14314,14315,14317,14320],{"class":1054,"line":1400},[1052,14316,1194],{"class":1193},[1052,14318,14319],{"class":1197},"Simulate CPU-intensive task.",[1052,14321,1201],{"class":1193},[1052,14323,14324,14326,14328],{"class":1054,"line":1447},[1052,14325,8994],{"class":1069},[1052,14327,1357],{"class":1090},[1052,14329,6319],{"class":1227},[1052,14331,14332,14334,14336,14338,14340,14342,14344],{"class":1054,"line":1460},[1052,14333,10026],{"class":1065},[1052,14335,9842],{"class":1069},[1052,14337,1412],{"class":1065},[1052,14339,6623],{"class":1804},[1052,14341,1180],{"class":1090},[1052,14343,14310],{"class":1221},[1052,14345,1187],{"class":1090},[1052,14347,14348,14350,14352,14354,14357],{"class":1054,"line":1482},[1052,14349,13946],{"class":1069},[1052,14351,6581],{"class":1090},[1052,14353,9842],{"class":1069},[1052,14355,14356],{"class":1754},"**",[1052,14358,10265],{"class":1227},[1052,14360,14361,14363],{"class":1054,"line":1502},[1052,14362,1243],{"class":1065},[1052,14364,12180],{"class":1069},[1052,14366,14367],{"class":1054,"line":1527},[1052,14368,1163],{"emptyLinePlaceholder":1162},[1052,14370,14371,14373,14375,14378],{"class":1054,"line":1533},[1052,14372,1170],{"class":1169},[1052,14374,1173],{"class":1169},[1052,14376,14377],{"class":1176}," optimized_cpu_task_example",[1052,14379,4099],{"class":1090},[1052,14381,14382,14384,14387],{"class":1054,"line":1538},[1052,14383,1194],{"class":1193},[1052,14385,14386],{"class":1197},"Example using thread pool adapter.",[1052,14388,1201],{"class":1193},[1052,14390,14391,14393,14395,14397,14399,14401,14403,14406],{"class":1054,"line":1547},[1052,14392,13375],{"class":1069},[1052,14394,1357],{"class":1090},[1052,14396,14065],{"class":1221},[1052,14398,1180],{"class":1090},[1052,14400,14120],{"class":1428},[1052,14402,1357],{"class":1090},[1052,14404,14405],{"class":1227},"4",[1052,14407,1231],{"class":1090},[1052,14409,14410],{"class":1054,"line":1564},[1052,14411,1237],{"class":1069},[1052,14413,14414,14416],{"class":1054,"line":1579},[1052,14415,2040],{"class":1065},[1052,14417,1640],{"class":1090},[1052,14419,14420],{"class":1054,"line":1584},[1052,14421,14422],{"class":1058},"        # Run multiple CPU-intensive tasks concurrently\n",[1052,14424,14425,14427,14429],{"class":1054,"line":1589},[1052,14426,1652],{"class":1069},[1052,14428,1357],{"class":1090},[1052,14430,1657],{"class":1090},[1052,14432,14433,14436,14438,14441,14443,14446,14448,14451],{"class":1054,"line":1605},[1052,14434,14435],{"class":1069},"            adapter",[1052,14437,1091],{"class":1090},[1052,14439,14440],{"class":1221},"run_in_thread",[1052,14442,1180],{"class":1090},[1052,14444,14445],{"class":1221},"cpu_intensive_task",[1052,14447,1153],{"class":1090},[1052,14449,14450],{"class":1227}," 100000",[1052,14452,1231],{"class":1090},[1052,14454,14455,14458,14460,14462,14464,14466,14468],{"class":1054,"line":1615},[1052,14456,14457],{"class":1065},"            for",[1052,14459,6618],{"class":1069},[1052,14461,1412],{"class":1065},[1052,14463,6623],{"class":1804},[1052,14465,1180],{"class":1090},[1052,14467,3914],{"class":1227},[1052,14469,1231],{"class":1090},[1052,14471,14472],{"class":1054,"line":1643},[1052,14473,1726],{"class":1090},[1052,14475,14476],{"class":1054,"line":1649},[1052,14477,1732],{"class":1069},[1052,14479,14480,14482,14484,14486,14488,14490,14492,14494,14496,14498],{"class":1054,"line":1660},[1052,14481,1738],{"class":1069},[1052,14483,1357],{"class":1090},[1052,14485,1360],{"class":1065},[1052,14487,1216],{"class":1069},[1052,14489,1091],{"class":1090},[1052,14491,1749],{"class":1221},[1052,14493,1180],{"class":1090},[1052,14495,1755],{"class":1754},[1052,14497,1758],{"class":1221},[1052,14499,1231],{"class":1090},[1052,14501,14502,14504,14507,14509,14511],{"class":1054,"line":1683},[1052,14503,1947],{"class":1065},[1052,14505,14506],{"class":1804}," sum",[1052,14508,1180],{"class":1090},[1052,14510,1847],{"class":1221},[1052,14512,1231],{"class":1090},[1052,14514,14515],{"class":1054,"line":1703},[1052,14516,1237],{"class":1069},[1052,14518,14519,14522],{"class":1054,"line":1723},[1052,14520,14521],{"class":1065},"    finally",[1052,14523,1640],{"class":1090},[1052,14525,14526,14528,14530,14532,14534],{"class":1054,"line":1729},[1052,14527,4789],{"class":1065},[1052,14529,13405],{"class":1069},[1052,14531,1091],{"class":1090},[1052,14533,12401],{"class":1221},[1052,14535,1305],{"class":1090},[1052,14537,14538],{"class":1054,"line":1735},[1052,14539,1163],{"emptyLinePlaceholder":1162},[1052,14541,14542],{"class":1054,"line":1772},[1052,14543,14544],{"class":1058},"# Connection pooling adapter\n",[1052,14546,14547,14549,14552],{"class":1054,"line":1777},[1052,14548,2285],{"class":1169},[1052,14550,14551],{"class":2288}," AsyncConnectionPoolAdapter",[1052,14553,1640],{"class":1090},[1052,14555,14556,14558,14561],{"class":1054,"line":1788},[1052,14557,1194],{"class":1193},[1052,14559,14560],{"class":1197},"Adapter with connection pooling for database operations.",[1052,14562,1201],{"class":1193},[1052,14564,14565],{"class":1054,"line":1836},[1052,14566,1237],{"class":1069},[1052,14568,14569,14571,14573,14575,14577,14579,14582,14584,14586],{"class":1054,"line":1865},[1052,14570,4871],{"class":1169},[1052,14572,4874],{"class":1804},[1052,14574,1180],{"class":1090},[1052,14576,2325],{"class":2324},[1052,14578,1153],{"class":1090},[1052,14580,14581],{"class":1183}," pool_size",[1052,14583,1357],{"class":1754},[1052,14585,3914],{"class":1227},[1052,14587,1187],{"class":1090},[1052,14589,14590,14592,14594,14597,14599],{"class":1054,"line":1908},[1052,14591,4890],{"class":2378},[1052,14593,1091],{"class":1090},[1052,14595,14596],{"class":1367},"pool_size",[1052,14598,1879],{"class":1090},[1052,14600,14601],{"class":1069}," pool_size\n",[1052,14603,14604,14606,14608,14611,14613,14615,14617,14620,14622,14624],{"class":1054,"line":1916},[1052,14605,4890],{"class":2378},[1052,14607,1091],{"class":1090},[1052,14609,14610],{"class":1367},"semaphore",[1052,14612,1879],{"class":1090},[1052,14614,1216],{"class":1069},[1052,14616,1091],{"class":1090},[1052,14618,14619],{"class":1221},"Semaphore",[1052,14621,1180],{"class":1090},[1052,14623,14596],{"class":1221},[1052,14625,1231],{"class":1090},[1052,14627,14628],{"class":1054,"line":1939},[1052,14629,1237],{"class":1069},[1052,14631,14632,14634,14636,14639,14641,14643,14645,14648,14650,14652,14654,14656,14658,14660],{"class":1054,"line":1944},[1052,14633,1403],{"class":1169},[1052,14635,1173],{"class":1169},[1052,14637,14638],{"class":1176}," execute_with_pool",[1052,14640,1180],{"class":1090},[1052,14642,2325],{"class":2324},[1052,14644,1153],{"class":1090},[1052,14646,14647],{"class":1183}," db_operation",[1052,14649,1153],{"class":1090},[1052,14651,2335],{"class":1754},[1052,14653,2338],{"class":1183},[1052,14655,1153],{"class":1090},[1052,14657,2343],{"class":1754},[1052,14659,2346],{"class":1183},[1052,14661,1187],{"class":1090},[1052,14663,14664,14666,14669],{"class":1054,"line":1970},[1052,14665,2353],{"class":1193},[1052,14667,14668],{"class":1197},"Execute database operation with connection pooling.",[1052,14670,1201],{"class":1193},[1052,14672,14673,14675,14677,14679,14681,14683],{"class":1054,"line":1975},[1052,14674,2048],{"class":1065},[1052,14676,1620],{"class":1065},[1052,14678,2398],{"class":2378},[1052,14680,1091],{"class":1090},[1052,14682,14610],{"class":1367},[1052,14684,1640],{"class":1090},[1052,14686,14687],{"class":1054,"line":1996},[1052,14688,14689],{"class":1058},"            # Convert sync DB operation to async\n",[1052,14691,14692,14695,14697,14699,14701,14704],{"class":1054,"line":2006},[1052,14693,14694],{"class":1069},"            async_operation ",[1052,14696,1357],{"class":1090},[1052,14698,2482],{"class":1221},[1052,14700,1180],{"class":1090},[1052,14702,14703],{"class":1221},"db_operation",[1052,14705,1231],{"class":1090},[1052,14707,14708,14710,14712,14715,14717,14719,14721,14723,14725,14727],{"class":1054,"line":2032},[1052,14709,2438],{"class":1065},[1052,14711,1360],{"class":1065},[1052,14713,14714],{"class":1221}," async_operation",[1052,14716,1180],{"class":1090},[1052,14718,1755],{"class":1754},[1052,14720,2338],{"class":1221},[1052,14722,1153],{"class":1090},[1052,14724,2343],{"class":1754},[1052,14726,2346],{"class":1221},[1052,14728,1231],{"class":1090},[1052,14730,14731],{"class":1054,"line":2037},[1052,14732,1163],{"emptyLinePlaceholder":1162},[1052,14734,14735],{"class":1054,"line":2045},[1052,14736,13266],{"class":1058},[1052,14738,14739,14741,14744],{"class":1054,"line":2075},[1052,14740,10366],{"class":1169},[1052,14742,14743],{"class":1176}," complex_db_query",[1052,14745,4099],{"class":1090},[1052,14747,14748,14750,14753],{"class":1054,"line":2095},[1052,14749,1194],{"class":1193},[1052,14751,14752],{"class":1197},"Complex database query.",[1052,14754,1201],{"class":1193},[1052,14756,14757,14760,14762,14764,14766,14768],{"class":1054,"line":2112},[1052,14758,14759],{"class":1065},"    from",[1052,14761,1087],{"class":1069},[1052,14763,1091],{"class":1090},[1052,14765,8821],{"class":1069},[1052,14767,1066],{"class":1065},[1052,14769,7650],{"class":1069},[1052,14771,14772],{"class":1054,"line":2119},[1052,14773,1237],{"class":1069},[1052,14775,14776,14778,14780,14782,14785,14787,14789,14792],{"class":1054,"line":2155},[1052,14777,9344],{"class":1065},[1052,14779,7791],{"class":1069},[1052,14781,1091],{"class":1090},[1052,14783,14784],{"class":1221},"cursor",[1052,14786,1631],{"class":1090},[1052,14788,1634],{"class":1065},[1052,14790,14791],{"class":1069}," cursor",[1052,14793,1640],{"class":1090},[1052,14795,14796,14799,14801,14804,14806],{"class":1054,"line":2170},[1052,14797,14798],{"class":1069},"        cursor",[1052,14800,1091],{"class":1090},[1052,14802,14803],{"class":1221},"execute",[1052,14805,1180],{"class":1090},[1052,14807,1201],{"class":1255},[1052,14809,14810],{"class":1054,"line":3351},[1052,14811,14812],{"class":1259},"            SELECT u.username, COUNT(p.id) as post_count\n",[1052,14814,14815],{"class":1054,"line":3383},[1052,14816,14817],{"class":1259},"            FROM auth_user u\n",[1052,14819,14820],{"class":1054,"line":3393},[1052,14821,14822],{"class":1259},"            LEFT JOIN blog_post p ON u.id = p.author_id\n",[1052,14824,14825],{"class":1054,"line":3402},[1052,14826,14827],{"class":1259},"            GROUP BY u.id, u.username\n",[1052,14829,14830],{"class":1054,"line":3407},[1052,14831,14832],{"class":1259},"            ORDER BY post_count DESC\n",[1052,14834,14835],{"class":1054,"line":3443},[1052,14836,14837],{"class":1259},"            LIMIT 10\n",[1052,14839,14840,14842],{"class":1054,"line":3453},[1052,14841,2353],{"class":1255},[1052,14843,1231],{"class":1090},[1052,14845,14846,14848,14850,14852,14855],{"class":1054,"line":3460},[1052,14847,1947],{"class":1065},[1052,14849,14791],{"class":1069},[1052,14851,1091],{"class":1090},[1052,14853,14854],{"class":1221},"fetchall",[1052,14856,1305],{"class":1090},[1052,14858,14859],{"class":1054,"line":3465},[1052,14860,1163],{"emptyLinePlaceholder":1162},[1052,14862,14863,14865,14867,14870],{"class":1054,"line":3501},[1052,14864,1170],{"class":1169},[1052,14866,1173],{"class":1169},[1052,14868,14869],{"class":1176}," pooled_db_example",[1052,14871,4099],{"class":1090},[1052,14873,14874,14876,14879],{"class":1054,"line":3511},[1052,14875,1194],{"class":1193},[1052,14877,14878],{"class":1197},"Example using connection pool adapter.",[1052,14880,1201],{"class":1193},[1052,14882,14883,14885,14887,14889,14891,14893,14895,14897],{"class":1054,"line":3518},[1052,14884,13375],{"class":1069},[1052,14886,1357],{"class":1090},[1052,14888,14551],{"class":1221},[1052,14890,1180],{"class":1090},[1052,14892,14596],{"class":1428},[1052,14894,1357],{"class":1090},[1052,14896,1441],{"class":1227},[1052,14898,1231],{"class":1090},[1052,14900,14901],{"class":1054,"line":3523},[1052,14902,1237],{"class":1069},[1052,14904,14905],{"class":1054,"line":3555},[1052,14906,14907],{"class":1058},"    # Execute multiple queries concurrently with pooling\n",[1052,14909,14910,14912,14914],{"class":1054,"line":3565},[1052,14911,9822],{"class":1069},[1052,14913,1357],{"class":1090},[1052,14915,1657],{"class":1090},[1052,14917,14918,14921,14923,14926,14928,14931],{"class":1054,"line":3572},[1052,14919,14920],{"class":1069},"        adapter",[1052,14922,1091],{"class":1090},[1052,14924,14925],{"class":1221},"execute_with_pool",[1052,14927,1180],{"class":1090},[1052,14929,14930],{"class":1221},"complex_db_query",[1052,14932,1231],{"class":1090},[1052,14934,14935,14937,14939,14941,14943,14945,14948],{"class":1054,"line":3577},[1052,14936,1791],{"class":1065},[1052,14938,6618],{"class":1069},[1052,14940,1412],{"class":1065},[1052,14942,6623],{"class":1804},[1052,14944,1180],{"class":1090},[1052,14946,14947],{"class":1227},"20",[1052,14949,1231],{"class":1090},[1052,14951,14952],{"class":1054,"line":3607},[1052,14953,9857],{"class":1090},[1052,14955,14956],{"class":1054,"line":3622},[1052,14957,1237],{"class":1069},[1052,14959,14960,14962,14964,14966,14968,14970,14972,14974,14976,14978],{"class":1054,"line":3632},[1052,14961,9871],{"class":1069},[1052,14963,1357],{"class":1090},[1052,14965,1360],{"class":1065},[1052,14967,1216],{"class":1069},[1052,14969,1091],{"class":1090},[1052,14971,1749],{"class":1221},[1052,14973,1180],{"class":1090},[1052,14975,1755],{"class":1754},[1052,14977,1758],{"class":1221},[1052,14979,1231],{"class":1090},[1052,14981,14982,14984,14986,14988,14990,14992],{"class":1054,"line":3637},[1052,14983,1243],{"class":1065},[1052,14985,1929],{"class":1069},[1052,14987,1850],{"class":1090},[1052,14989,5828],{"class":1227},[1052,14991,1876],{"class":1090},[1052,14993,14994],{"class":1058},"  # Return first result\n",[1052,14996,14997],{"class":1054,"line":3668},[1052,14998,1163],{"emptyLinePlaceholder":1162},[1052,15000,15001],{"class":1054,"line":3678},[1052,15002,15003],{"class":1058},"# Caching adapter with async support\n",[1052,15005,15006,15008,15011],{"class":1054,"line":3704},[1052,15007,2285],{"class":1169},[1052,15009,15010],{"class":2288}," AsyncCachingAdapter",[1052,15012,1640],{"class":1090},[1052,15014,15015,15017,15020],{"class":1054,"line":3709},[1052,15016,1194],{"class":1193},[1052,15018,15019],{"class":1197},"Adapter that adds caching to async operations.",[1052,15021,1201],{"class":1193},[1052,15023,15024],{"class":1054,"line":3719},[1052,15025,1237],{"class":1069},[1052,15027,15028,15030,15032,15034,15036],{"class":1054,"line":3725},[1052,15029,4871],{"class":1169},[1052,15031,4874],{"class":1804},[1052,15033,1180],{"class":1090},[1052,15035,2325],{"class":2324},[1052,15037,1187],{"class":1090},[1052,15039,15040,15042,15044,15046,15048],{"class":1054,"line":3763},[1052,15041,4890],{"class":2378},[1052,15043,1091],{"class":1090},[1052,15045,12058],{"class":1367},[1052,15047,1879],{"class":1090},[1052,15049,1785],{"class":1090},[1052,15051,15052,15054,15056,15059,15061],{"class":1054,"line":3771},[1052,15053,4890],{"class":2378},[1052,15055,1091],{"class":1090},[1052,15057,15058],{"class":1367},"locks",[1052,15060,1879],{"class":1090},[1052,15062,1785],{"class":1090},[1052,15064,15065,15067,15069,15072,15074,15076,15078,15080],{"class":1054,"line":3791},[1052,15066,4890],{"class":2378},[1052,15068,1091],{"class":1090},[1052,15070,15071],{"class":1367},"main_lock",[1052,15073,1879],{"class":1090},[1052,15075,1216],{"class":1069},[1052,15077,1091],{"class":1090},[1052,15079,6417],{"class":1221},[1052,15081,1305],{"class":1090},[1052,15083,15084],{"class":1054,"line":3810},[1052,15085,1237],{"class":1069},[1052,15087,15088,15090,15092,15095,15097,15099,15101,15104,15106,15108,15110,15112,15114,15116,15118,15120],{"class":1054,"line":3830},[1052,15089,1403],{"class":1169},[1052,15091,1173],{"class":1169},[1052,15093,15094],{"class":1176}," cached_execute",[1052,15096,1180],{"class":1090},[1052,15098,2325],{"class":2324},[1052,15100,1153],{"class":1090},[1052,15102,15103],{"class":1183}," cache_key",[1052,15105,1153],{"class":1090},[1052,15107,13563],{"class":1183},[1052,15109,1153],{"class":1090},[1052,15111,2335],{"class":1754},[1052,15113,2338],{"class":1183},[1052,15115,1153],{"class":1090},[1052,15117,2343],{"class":1754},[1052,15119,2346],{"class":1183},[1052,15121,1187],{"class":1090},[1052,15123,15124,15126,15129],{"class":1054,"line":3853},[1052,15125,2353],{"class":1193},[1052,15127,15128],{"class":1197},"Execute function with caching.",[1052,15130,1201],{"class":1193},[1052,15132,15133],{"class":1054,"line":3859},[1052,15134,15135],{"class":1058},"        # Check cache first\n",[1052,15137,15138,15140,15143,15145,15147,15149,15151],{"class":1054,"line":3866},[1052,15139,2419],{"class":1065},[1052,15141,15142],{"class":1069}," cache_key ",[1052,15144,1412],{"class":1754},[1052,15146,2398],{"class":2378},[1052,15148,1091],{"class":1090},[1052,15150,12058],{"class":1367},[1052,15152,1640],{"class":1090},[1052,15154,15155,15157,15159,15161,15163,15165,15167],{"class":1054,"line":3872},[1052,15156,2438],{"class":1065},[1052,15158,2398],{"class":2378},[1052,15160,1091],{"class":1090},[1052,15162,12058],{"class":1367},[1052,15164,1850],{"class":1090},[1052,15166,12067],{"class":1367},[1052,15168,1936],{"class":1090},[1052,15170,15171],{"class":1054,"line":3882},[1052,15172,1732],{"class":1069},[1052,15174,15175],{"class":1054,"line":3919},[1052,15176,15177],{"class":1058},"        # Get or create lock for this cache key\n",[1052,15179,15180,15182,15184,15186,15188,15190],{"class":1054,"line":3931},[1052,15181,2048],{"class":1065},[1052,15183,1620],{"class":1065},[1052,15185,2398],{"class":2378},[1052,15187,1091],{"class":1090},[1052,15189,15071],{"class":1367},[1052,15191,1640],{"class":1090},[1052,15193,15194,15196,15198,15200,15202,15204,15206,15208],{"class":1054,"line":3951},[1052,15195,1839],{"class":1065},[1052,15197,15142],{"class":1069},[1052,15199,6174],{"class":1754},[1052,15201,6177],{"class":1754},[1052,15203,2398],{"class":2378},[1052,15205,1091],{"class":1090},[1052,15207,15058],{"class":1367},[1052,15209,1640],{"class":1090},[1052,15211,15212,15214,15216,15218,15220,15222,15224,15226,15228,15230,15232],{"class":1054,"line":3970},[1052,15213,7867],{"class":2378},[1052,15215,1091],{"class":1090},[1052,15217,15058],{"class":1367},[1052,15219,1850],{"class":1090},[1052,15221,12067],{"class":1367},[1052,15223,1876],{"class":1090},[1052,15225,1879],{"class":1090},[1052,15227,1216],{"class":1069},[1052,15229,1091],{"class":1090},[1052,15231,6417],{"class":1221},[1052,15233,1305],{"class":1090},[1052,15235,15236,15238,15240,15242,15244,15246,15248,15250],{"class":1054,"line":3993},[1052,15237,8266],{"class":1069},[1052,15239,1357],{"class":1090},[1052,15241,2398],{"class":2378},[1052,15243,1091],{"class":1090},[1052,15245,15058],{"class":1367},[1052,15247,1850],{"class":1090},[1052,15249,12067],{"class":1367},[1052,15251,1936],{"class":1090},[1052,15253,15254],{"class":1054,"line":3999},[1052,15255,1732],{"class":1069},[1052,15257,15258],{"class":1054,"line":4004},[1052,15259,15260],{"class":1058},"        # Execute with key-specific lock (prevents duplicate work)\n",[1052,15262,15263,15265,15267,15269],{"class":1054,"line":4025},[1052,15264,2048],{"class":1065},[1052,15266,1620],{"class":1065},[1052,15268,8298],{"class":1069},[1052,15270,1640],{"class":1090},[1052,15272,15273],{"class":1054,"line":4030},[1052,15274,15275],{"class":1058},"            # Double-check cache\n",[1052,15277,15278,15280,15282,15284,15286,15288,15290],{"class":1054,"line":4065},[1052,15279,1839],{"class":1065},[1052,15281,15142],{"class":1069},[1052,15283,1412],{"class":1754},[1052,15285,2398],{"class":2378},[1052,15287,1091],{"class":1090},[1052,15289,12058],{"class":1367},[1052,15291,1640],{"class":1090},[1052,15293,15294,15296,15298,15300,15302,15304,15306],{"class":1054,"line":4075},[1052,15295,2098],{"class":1065},[1052,15297,2398],{"class":2378},[1052,15299,1091],{"class":1090},[1052,15301,12058],{"class":1367},[1052,15303,1850],{"class":1090},[1052,15305,12067],{"class":1367},[1052,15307,1936],{"class":1090},[1052,15309,15310],{"class":1054,"line":4081},[1052,15311,2787],{"class":1069},[1052,15313,15314],{"class":1054,"line":4090},[1052,15315,12106],{"class":1058},[1052,15317,15318,15320,15322,15324,15326,15328,15330,15332,15334,15336,15338],{"class":1054,"line":4102},[1052,15319,2792],{"class":1069},[1052,15321,1357],{"class":1090},[1052,15323,1360],{"class":1065},[1052,15325,13563],{"class":1221},[1052,15327,1180],{"class":1090},[1052,15329,1755],{"class":1754},[1052,15331,2338],{"class":1221},[1052,15333,1153],{"class":1090},[1052,15335,2343],{"class":1754},[1052,15337,2346],{"class":1221},[1052,15339,1231],{"class":1090},[1052,15341,15342],{"class":1054,"line":4121},[1052,15343,2787],{"class":1069},[1052,15345,15346],{"class":1054,"line":4142},[1052,15347,12140],{"class":1058},[1052,15349,15350,15352,15354,15356,15358,15360,15362,15364],{"class":1054,"line":4162},[1052,15351,5979],{"class":2378},[1052,15353,1091],{"class":1090},[1052,15355,12058],{"class":1367},[1052,15357,1850],{"class":1090},[1052,15359,12067],{"class":1367},[1052,15361,1876],{"class":1090},[1052,15363,1879],{"class":1090},[1052,15365,12180],{"class":1069},[1052,15367,15368],{"class":1054,"line":4183},[1052,15369,2787],{"class":1069},[1052,15371,15372,15374],{"class":1054,"line":4212},[1052,15373,2438],{"class":1065},[1052,15375,12180],{"class":1069},[1052,15377,15378],{"class":1054,"line":4218},[1052,15379,1237],{"class":1069},[1052,15381,15382,15384,15387,15389,15391,15393,15396,15398,15400],{"class":1054,"line":4223},[1052,15383,4871],{"class":1169},[1052,15385,15386],{"class":1176}," clear_cache",[1052,15388,1180],{"class":1090},[1052,15390,2325],{"class":2324},[1052,15392,1153],{"class":1090},[1052,15394,15395],{"class":1183}," pattern",[1052,15397,1357],{"class":1754},[1052,15399,8188],{"class":1434},[1052,15401,1187],{"class":1090},[1052,15403,15404,15406,15409],{"class":1054,"line":4237},[1052,15405,2353],{"class":1193},[1052,15407,15408],{"class":1197},"Clear cache entries.",[1052,15410,1201],{"class":1193},[1052,15412,15413,15415,15417],{"class":1054,"line":4242},[1052,15414,2419],{"class":1065},[1052,15416,15395],{"class":1069},[1052,15418,1640],{"class":1090},[1052,15420,15421,15424,15426],{"class":1054,"line":4249},[1052,15422,15423],{"class":1069},"            keys_to_remove ",[1052,15425,1357],{"class":1090},[1052,15427,1657],{"class":1090},[1052,15429,15430,15433,15435,15437,15439,15441,15443,15445,15447,15450],{"class":1054,"line":4268},[1052,15431,15432],{"class":1069},"                key ",[1052,15434,6001],{"class":1065},[1052,15436,8225],{"class":1069},[1052,15438,1412],{"class":1065},[1052,15440,2398],{"class":2378},[1052,15442,1091],{"class":1090},[1052,15444,12058],{"class":1367},[1052,15446,1091],{"class":1090},[1052,15448,15449],{"class":1221},"keys",[1052,15451,1305],{"class":1090},[1052,15453,15454,15456,15459,15461],{"class":1054,"line":4287},[1052,15455,6023],{"class":1065},[1052,15457,15458],{"class":1069}," pattern ",[1052,15460,1412],{"class":1754},[1052,15462,15463],{"class":1069}," key\n",[1052,15465,15466],{"class":1054,"line":4306},[1052,15467,6036],{"class":1090},[1052,15469,15470,15472,15474,15476,15479],{"class":1054,"line":4312},[1052,15471,14457],{"class":1065},[1052,15473,8225],{"class":1069},[1052,15475,1412],{"class":1065},[1052,15477,15478],{"class":1069}," keys_to_remove",[1052,15480,1640],{"class":1090},[1052,15482,15483,15486,15488,15490,15492,15494,15496],{"class":1054,"line":4317},[1052,15484,15485],{"class":1065},"                del",[1052,15487,2398],{"class":2378},[1052,15489,1091],{"class":1090},[1052,15491,12058],{"class":1367},[1052,15493,1850],{"class":1090},[1052,15495,8151],{"class":1367},[1052,15497,1936],{"class":1090},[1052,15499,15500,15502],{"class":1054,"line":4352},[1052,15501,2466],{"class":1065},[1052,15503,1640],{"class":1090},[1052,15505,15506,15508,15510,15512,15514,15517],{"class":1054,"line":4362},[1052,15507,5979],{"class":2378},[1052,15509,1091],{"class":1090},[1052,15511,12058],{"class":1367},[1052,15513,1091],{"class":1090},[1052,15515,15516],{"class":1221},"clear",[1052,15518,1305],{"class":1090},[1052,15520,15521],{"class":1054,"line":4385},[1052,15522,1163],{"emptyLinePlaceholder":1162},[1052,15524,15525,15527,15529,15532],{"class":1054,"line":4390},[1052,15526,1170],{"class":1169},[1052,15528,1173],{"class":1169},[1052,15530,15531],{"class":1176}," cached_operation_example",[1052,15533,4099],{"class":1090},[1052,15535,15536,15538,15541],{"class":1054,"line":4397},[1052,15537,1194],{"class":1193},[1052,15539,15540],{"class":1197},"Example using caching adapter.",[1052,15542,1201],{"class":1193},[1052,15544,15545,15548,15550,15552],{"class":1054,"line":4407},[1052,15546,15547],{"class":1069},"    cache_adapter ",[1052,15549,1357],{"class":1090},[1052,15551,15010],{"class":1221},[1052,15553,1305],{"class":1090},[1052,15555,15556],{"class":1054,"line":4434},[1052,15557,1237],{"class":1069},[1052,15559,15560,15562,15564,15567,15569,15571],{"class":1054,"line":4470},[1052,15561,1403],{"class":1169},[1052,15563,1173],{"class":1169},[1052,15565,15566],{"class":1176}," expensive_operation",[1052,15568,1180],{"class":1090},[1052,15570,8325],{"class":1183},[1052,15572,1187],{"class":1090},[1052,15574,15575,15577,15580],{"class":1054,"line":4505},[1052,15576,2353],{"class":1193},[1052,15578,15579],{"class":1197},"Simulate expensive async operation.",[1052,15581,1201],{"class":1193},[1052,15583,15584,15586,15588,15590,15592,15594,15596],{"class":1054,"line":4540},[1052,15585,4789],{"class":1065},[1052,15587,1216],{"class":1069},[1052,15589,1091],{"class":1090},[1052,15591,1222],{"class":1221},[1052,15593,1180],{"class":1090},[1052,15595,8890],{"class":1227},[1052,15597,1231],{"class":1090},[1052,15599,15600,15602,15604,15606],{"class":1054,"line":4552},[1052,15601,1947],{"class":1065},[1052,15603,7026],{"class":1069},[1052,15605,1755],{"class":1754},[1052,15607,10265],{"class":1227},[1052,15609,15610],{"class":1054,"line":4560},[1052,15611,1237],{"class":1069},[1052,15613,15614],{"class":1054,"line":4565},[1052,15615,15616],{"class":1058},"    # First call - will execute function\n",[1052,15618,15619,15622,15624,15626,15629,15631,15634],{"class":1054,"line":4578},[1052,15620,15621],{"class":1069},"    result1 ",[1052,15623,1357],{"class":1090},[1052,15625,1360],{"class":1065},[1052,15627,15628],{"class":1069}," cache_adapter",[1052,15630,1091],{"class":1090},[1052,15632,15633],{"class":1221},"cached_execute",[1052,15635,4118],{"class":1090},[1052,15637,15638,15640,15643,15645],{"class":1054,"line":4583},[1052,15639,1256],{"class":1255},[1052,15641,15642],{"class":1259},"expensive_op_5",[1052,15644,1263],{"class":1255},[1052,15646,1277],{"class":1090},[1052,15648,15649,15652],{"class":1054,"line":4590},[1052,15650,15651],{"class":1221},"        expensive_operation",[1052,15653,1277],{"class":1090},[1052,15655,15656],{"class":1054,"line":4609},[1052,15657,15658],{"class":1227},"        5\n",[1052,15660,15661],{"class":1054,"line":4628},[1052,15662,15663],{"class":1090},"    )\n",[1052,15665,15666],{"class":1054,"line":4646},[1052,15667,1237],{"class":1069},[1052,15669,15670],{"class":1054,"line":4651},[1052,15671,15672],{"class":1058},"    # Second call - will use cached result\n",[1052,15674,15675,15678,15680,15682,15684,15686,15688],{"class":1054,"line":4656},[1052,15676,15677],{"class":1069},"    result2 ",[1052,15679,1357],{"class":1090},[1052,15681,1360],{"class":1065},[1052,15683,15628],{"class":1069},[1052,15685,1091],{"class":1090},[1052,15687,15633],{"class":1221},[1052,15689,4118],{"class":1090},[1052,15691,15692,15694,15696,15698],{"class":1054,"line":4687},[1052,15693,1256],{"class":1255},[1052,15695,15642],{"class":1259},[1052,15697,1263],{"class":1255},[1052,15699,1277],{"class":1090},[1052,15701,15702,15704],{"class":1054,"line":4697},[1052,15703,15651],{"class":1221},[1052,15705,1277],{"class":1090},[1052,15707,15708],{"class":1054,"line":4720},[1052,15709,15658],{"class":1227},[1052,15711,15712],{"class":1054,"line":4725},[1052,15713,15663],{"class":1090},[1052,15715,15716],{"class":1054,"line":4732},[1052,15717,1237],{"class":1069},[1052,15719,15720,15722,15725,15727,15730],{"class":1054,"line":4742},[1052,15721,1243],{"class":1065},[1052,15723,15724],{"class":1069}," result1",[1052,15726,1153],{"class":1090},[1052,15728,15729],{"class":1069}," result2  ",[1052,15731,15732],{"class":1058},"# Both should be 10\n",[1026,15734,15735],{},"Django's asynchronous support enables building high-performance applications that can handle thousands of concurrent requests efficiently. The key principles are understanding when to use async (I/O-bound operations), ensuring async safety through proper synchronization, and using adapter functions to bridge sync and async code effectively. Start with simple async views and gradually implement more sophisticated patterns as your application's concurrency requirements grow.",[15737,15738,15739],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}",{"title":1047,"searchDepth":1055,"depth":1062,"links":15741},[15742,15747,15752],{"id":1032,"depth":1062,"text":713,"children":15743},[15744,15745,15746],{"id":1036,"depth":1073,"text":1037},{"id":2195,"depth":1073,"text":2196},{"id":4796,"depth":1073,"text":4797},{"id":6234,"depth":1062,"text":6235,"children":15748},[15749,15750,15751],{"id":6238,"depth":1073,"text":6239},{"id":7135,"depth":1073,"text":7136},{"id":8793,"depth":1073,"text":8794},{"id":10268,"depth":1062,"text":10269,"children":15753},[15754,15755,15756],{"id":10272,"depth":1073,"text":10273},{"id":11629,"depth":1073,"text":11630},{"id":14006,"depth":1073,"text":14007},"md",null,{},{"title":729,"description":1028},"xT6rJ4iWMrHDvCNfunw059akgI4BQNl8LgPMuWryIp4",[15763,15765],{"title":725,"path":726,"stem":727,"description":15764,"children":-1},"Background task processing is essential for building responsive async Django applications. While async views handle concurrent requests efficiently, long-running operations like file processing, email sending, data analysis, or external API calls should be offloaded to background workers. This chapter covers integrating Celery and RQ with async Django applications, implementing task queues, scheduling, monitoring, and async task patterns.",{"title":733,"path":734,"stem":735,"description":15766,"children":-1},"Django's Tasks framework provides a built-in solution for handling background tasks without requiring external dependencies like Celery or RQ. This framework enables you to offload time-consuming operations from request-response cycles, improving application performance and user experience.",1772474950507]