[{"data":1,"prerenderedAt":10040},["ShallowReactive",2],{"navigation":3,"/asynchronous-django/background-tasks-with-celery-or-rq":1016,"/asynchronous-django/background-tasks-with-celery-or-rq-surround":10035},[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":725,"body":1018,"description":1028,"extension":10030,"links":10031,"meta":10032,"navigation":1153,"path":726,"seo":10033,"stem":727,"__hash__":10034},"docs/19.asynchronous-django/06.background-tasks-with-celery-or-rq.md",{"type":1019,"value":1020,"toc":10013},"minimark",[1021,1025,1029,1034,1037,1060,1065,1076,1080,1083,1087,1597,1601,2144,2148,3668,3672,5017,5021,6665,6669,6672,6676,7140,7144,8548,8552,10009],[1022,1023,725],"h1",{"id":1024},"background-tasks-with-celery-or-rq",[1026,1027,1028],"p",{},"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.",[1030,1031,1033],"h2",{"id":1032},"understanding-background-tasks","Understanding Background Tasks",[1026,1035,1036],{},"Background tasks decouple time-consuming operations from HTTP request-response cycles, enabling:",[1026,1038,1039,1043,1044,1047,1048,1051,1052,1055,1056,1059],{},[1040,1041,1042],"strong",{},"Improved User Experience",": Immediate responses while processing continues in background\n",[1040,1045,1046],{},"System Reliability",": Retry failed operations and handle errors gracefully\n",[1040,1049,1050],{},"Resource Management",": Distribute workload across multiple worker processes\n",[1040,1053,1054],{},"Scalability",": Scale task processing independently from web servers\n",[1040,1057,1058],{},"Async Integration",": Seamlessly integrate with async Django views and WebSocket consumers",[1061,1062,1064],"h3",{"id":1063},"task-processing-architecture","Task Processing Architecture",[1066,1067,1072],"pre",{"className":1068,"code":1070,"language":1071},[1069],"language-text","┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   Async View    │───▶│   Task Queue    │───▶│  Worker Process │\n│                 │    │   (Redis/RMQ)   │    │   (Celery/RQ)   │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n         │                       │                       │\n         ▼                       ▼                       ▼\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│  Task Status    │    │   Task Results  │    │   Task Logs     │\n│   Tracking      │    │     Storage     │    │   Monitoring    │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n","text",[1073,1074,1070],"code",{"__ignoreMap":1075},"",[1030,1077,1079],{"id":1078},"celery-integration","Celery Integration",[1026,1081,1082],{},"Celery is the most popular distributed task queue for Python applications, offering robust features for async Django integration.",[1061,1084,1086],{"id":1085},"celery-setup-and-configuration","Celery Setup and Configuration",[1066,1088,1092],{"className":1089,"code":1090,"language":1091,"meta":1075,"style":1075},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# celery_app.py\nimport os\nfrom celery import Celery\nfrom django.conf import settings\n\n# Set Django settings module\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')\n\n# Create Celery app\napp = Celery('myproject')\n\n# Configure Celery using Django settings\napp.config_from_object('django.conf:settings', namespace='CELERY')\n\n# Auto-discover tasks from all registered Django apps\napp.autodiscover_tasks()\n\n# Async-compatible configuration\napp.conf.update(\n    task_serializer='json',\n    accept_content=['json'],\n    result_serializer='json',\n    timezone='UTC',\n    enable_utc=True,\n    task_track_started=True,\n    task_time_limit=30 * 60,  # 30 minutes\n    task_soft_time_limit=25 * 60,  # 25 minutes\n    worker_prefetch_multiplier=1,\n    worker_max_tasks_per_child=1000,\n)\n\n@app.task(bind=True)\ndef debug_task(self):\n    print(f'Request: {self.request!r}')\n","python",[1073,1093,1094,1103,1114,1128,1148,1155,1161,1206,1211,1217,1240,1245,1251,1288,1293,1299,1312,1317,1323,1341,1359,1377,1393,1410,1424,1436,1460,1480,1493,1506,1511,1516,1541,1560],{"__ignoreMap":1075},[1095,1096,1099],"span",{"class":1097,"line":1098},"line",1,[1095,1100,1102],{"class":1101},"s9Tkl","# celery_app.py\n",[1095,1104,1106,1110],{"class":1097,"line":1105},2,[1095,1107,1109],{"class":1108},"siDh9","import",[1095,1111,1113],{"class":1112},"sftqT"," os\n",[1095,1115,1117,1120,1123,1125],{"class":1097,"line":1116},3,[1095,1118,1119],{"class":1108},"from",[1095,1121,1122],{"class":1112}," celery ",[1095,1124,1109],{"class":1108},[1095,1126,1127],{"class":1112}," Celery\n",[1095,1129,1131,1133,1136,1140,1143,1145],{"class":1097,"line":1130},4,[1095,1132,1119],{"class":1108},[1095,1134,1135],{"class":1112}," django",[1095,1137,1139],{"class":1138},"soVBu",".",[1095,1141,1142],{"class":1112},"conf ",[1095,1144,1109],{"class":1108},[1095,1146,1147],{"class":1112}," settings\n",[1095,1149,1151],{"class":1097,"line":1150},5,[1095,1152,1154],{"emptyLinePlaceholder":1153},true,"\n",[1095,1156,1158],{"class":1097,"line":1157},6,[1095,1159,1160],{"class":1101},"# Set Django settings module\n",[1095,1162,1164,1167,1169,1173,1175,1179,1182,1186,1190,1192,1195,1198,1201,1203],{"class":1097,"line":1163},7,[1095,1165,1166],{"class":1112},"os",[1095,1168,1139],{"class":1138},[1095,1170,1172],{"class":1171},"sBPpx","environ",[1095,1174,1139],{"class":1138},[1095,1176,1178],{"class":1177},"siWMO","setdefault",[1095,1180,1181],{"class":1138},"(",[1095,1183,1185],{"class":1184},"sbYkP","'",[1095,1187,1189],{"class":1188},"sTbE_","DJANGO_SETTINGS_MODULE",[1095,1191,1185],{"class":1184},[1095,1193,1194],{"class":1138},",",[1095,1196,1197],{"class":1184}," '",[1095,1199,1200],{"class":1188},"myproject.settings",[1095,1202,1185],{"class":1184},[1095,1204,1205],{"class":1138},")\n",[1095,1207,1209],{"class":1097,"line":1208},8,[1095,1210,1154],{"emptyLinePlaceholder":1153},[1095,1212,1214],{"class":1097,"line":1213},9,[1095,1215,1216],{"class":1101},"# Create Celery app\n",[1095,1218,1220,1223,1226,1229,1231,1233,1236,1238],{"class":1097,"line":1219},10,[1095,1221,1222],{"class":1112},"app ",[1095,1224,1225],{"class":1138},"=",[1095,1227,1228],{"class":1177}," Celery",[1095,1230,1181],{"class":1138},[1095,1232,1185],{"class":1184},[1095,1234,1235],{"class":1188},"myproject",[1095,1237,1185],{"class":1184},[1095,1239,1205],{"class":1138},[1095,1241,1243],{"class":1097,"line":1242},11,[1095,1244,1154],{"emptyLinePlaceholder":1153},[1095,1246,1248],{"class":1097,"line":1247},12,[1095,1249,1250],{"class":1101},"# Configure Celery using Django settings\n",[1095,1252,1254,1257,1259,1262,1264,1266,1269,1271,1273,1277,1279,1281,1284,1286],{"class":1097,"line":1253},13,[1095,1255,1256],{"class":1112},"app",[1095,1258,1139],{"class":1138},[1095,1260,1261],{"class":1177},"config_from_object",[1095,1263,1181],{"class":1138},[1095,1265,1185],{"class":1184},[1095,1267,1268],{"class":1188},"django.conf:settings",[1095,1270,1185],{"class":1184},[1095,1272,1194],{"class":1138},[1095,1274,1276],{"class":1275},"sqOPj"," namespace",[1095,1278,1225],{"class":1138},[1095,1280,1185],{"class":1184},[1095,1282,1283],{"class":1188},"CELERY",[1095,1285,1185],{"class":1184},[1095,1287,1205],{"class":1138},[1095,1289,1291],{"class":1097,"line":1290},14,[1095,1292,1154],{"emptyLinePlaceholder":1153},[1095,1294,1296],{"class":1097,"line":1295},15,[1095,1297,1298],{"class":1101},"# Auto-discover tasks from all registered Django apps\n",[1095,1300,1302,1304,1306,1309],{"class":1097,"line":1301},16,[1095,1303,1256],{"class":1112},[1095,1305,1139],{"class":1138},[1095,1307,1308],{"class":1177},"autodiscover_tasks",[1095,1310,1311],{"class":1138},"()\n",[1095,1313,1315],{"class":1097,"line":1314},17,[1095,1316,1154],{"emptyLinePlaceholder":1153},[1095,1318,1320],{"class":1097,"line":1319},18,[1095,1321,1322],{"class":1101},"# Async-compatible configuration\n",[1095,1324,1326,1328,1330,1333,1335,1338],{"class":1097,"line":1325},19,[1095,1327,1256],{"class":1112},[1095,1329,1139],{"class":1138},[1095,1331,1332],{"class":1171},"conf",[1095,1334,1139],{"class":1138},[1095,1336,1337],{"class":1177},"update",[1095,1339,1340],{"class":1138},"(\n",[1095,1342,1344,1347,1349,1351,1354,1356],{"class":1097,"line":1343},20,[1095,1345,1346],{"class":1275},"    task_serializer",[1095,1348,1225],{"class":1138},[1095,1350,1185],{"class":1184},[1095,1352,1353],{"class":1188},"json",[1095,1355,1185],{"class":1184},[1095,1357,1358],{"class":1138},",\n",[1095,1360,1362,1365,1368,1370,1372,1374],{"class":1097,"line":1361},21,[1095,1363,1364],{"class":1275},"    accept_content",[1095,1366,1367],{"class":1138},"=[",[1095,1369,1185],{"class":1184},[1095,1371,1353],{"class":1188},[1095,1373,1185],{"class":1184},[1095,1375,1376],{"class":1138},"],\n",[1095,1378,1380,1383,1385,1387,1389,1391],{"class":1097,"line":1379},22,[1095,1381,1382],{"class":1275},"    result_serializer",[1095,1384,1225],{"class":1138},[1095,1386,1185],{"class":1184},[1095,1388,1353],{"class":1188},[1095,1390,1185],{"class":1184},[1095,1392,1358],{"class":1138},[1095,1394,1396,1399,1401,1403,1406,1408],{"class":1097,"line":1395},23,[1095,1397,1398],{"class":1275},"    timezone",[1095,1400,1225],{"class":1138},[1095,1402,1185],{"class":1184},[1095,1404,1405],{"class":1188},"UTC",[1095,1407,1185],{"class":1184},[1095,1409,1358],{"class":1138},[1095,1411,1413,1416,1418,1422],{"class":1097,"line":1412},24,[1095,1414,1415],{"class":1275},"    enable_utc",[1095,1417,1225],{"class":1138},[1095,1419,1421],{"class":1420},"s8XtY","True",[1095,1423,1358],{"class":1138},[1095,1425,1427,1430,1432,1434],{"class":1097,"line":1426},25,[1095,1428,1429],{"class":1275},"    task_track_started",[1095,1431,1225],{"class":1138},[1095,1433,1421],{"class":1420},[1095,1435,1358],{"class":1138},[1095,1437,1439,1442,1444,1448,1452,1455,1457],{"class":1097,"line":1438},26,[1095,1440,1441],{"class":1275},"    task_time_limit",[1095,1443,1225],{"class":1138},[1095,1445,1447],{"class":1446},"s7CZa","30",[1095,1449,1451],{"class":1450},"sVsLi"," *",[1095,1453,1454],{"class":1446}," 60",[1095,1456,1194],{"class":1138},[1095,1458,1459],{"class":1101},"  # 30 minutes\n",[1095,1461,1463,1466,1468,1471,1473,1475,1477],{"class":1097,"line":1462},27,[1095,1464,1465],{"class":1275},"    task_soft_time_limit",[1095,1467,1225],{"class":1138},[1095,1469,1470],{"class":1446},"25",[1095,1472,1451],{"class":1450},[1095,1474,1454],{"class":1446},[1095,1476,1194],{"class":1138},[1095,1478,1479],{"class":1101},"  # 25 minutes\n",[1095,1481,1483,1486,1488,1491],{"class":1097,"line":1482},28,[1095,1484,1485],{"class":1275},"    worker_prefetch_multiplier",[1095,1487,1225],{"class":1138},[1095,1489,1490],{"class":1446},"1",[1095,1492,1358],{"class":1138},[1095,1494,1496,1499,1501,1504],{"class":1097,"line":1495},29,[1095,1497,1498],{"class":1275},"    worker_max_tasks_per_child",[1095,1500,1225],{"class":1138},[1095,1502,1503],{"class":1446},"1000",[1095,1505,1358],{"class":1138},[1095,1507,1509],{"class":1097,"line":1508},30,[1095,1510,1205],{"class":1138},[1095,1512,1514],{"class":1097,"line":1513},31,[1095,1515,1154],{"emptyLinePlaceholder":1153},[1095,1517,1519,1522,1525,1527,1530,1532,1535,1537,1539],{"class":1097,"line":1518},32,[1095,1520,1521],{"class":1138},"@",[1095,1523,1256],{"class":1524},"sljsM",[1095,1526,1139],{"class":1138},[1095,1528,1529],{"class":1524},"task",[1095,1531,1181],{"class":1138},[1095,1533,1534],{"class":1275},"bind",[1095,1536,1225],{"class":1138},[1095,1538,1421],{"class":1420},[1095,1540,1205],{"class":1138},[1095,1542,1544,1548,1551,1553,1557],{"class":1097,"line":1543},33,[1095,1545,1547],{"class":1546},"s5Kfy","def",[1095,1549,1550],{"class":1524}," debug_task",[1095,1552,1181],{"class":1138},[1095,1554,1556],{"class":1555},"sRjD_","self",[1095,1558,1559],{"class":1138},"):\n",[1095,1561,1563,1567,1569,1572,1575,1579,1582,1584,1587,1590,1593,1595],{"class":1097,"line":1562},34,[1095,1564,1566],{"class":1565},"sJdAF","    print",[1095,1568,1181],{"class":1138},[1095,1570,1571],{"class":1546},"f",[1095,1573,1574],{"class":1188},"'Request: ",[1095,1576,1578],{"class":1577},"s3h35","{",[1095,1580,1556],{"class":1581},"se3Ec",[1095,1583,1139],{"class":1138},[1095,1585,1586],{"class":1171},"request",[1095,1588,1589],{"class":1546},"!r",[1095,1591,1592],{"class":1577},"}",[1095,1594,1185],{"class":1188},[1095,1596,1205],{"class":1138},[1061,1598,1600],{"id":1599},"django-settings-for-celery","Django Settings for Celery",[1066,1602,1604],{"className":1089,"code":1603,"language":1091,"meta":1075,"style":1075},"# settings.py\nimport os\n\n# Celery Configuration\nCELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0')\nCELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/0')\n\n# Async-compatible settings\nCELERY_TASK_SERIALIZER = 'json'\nCELERY_RESULT_SERIALIZER = 'json'\nCELERY_ACCEPT_CONTENT = ['json']\nCELERY_TIMEZONE = 'UTC'\nCELERY_ENABLE_UTC = True\n\n# Task routing for different queues\nCELERY_TASK_ROUTES = {\n    'myapp.tasks.send_email': {'queue': 'email'},\n    'myapp.tasks.process_image': {'queue': 'media'},\n    'myapp.tasks.generate_report': {'queue': 'reports'},\n    'myapp.tasks.sync_data': {'queue': 'sync'},\n}\n\n# Worker configuration\nCELERY_WORKER_PREFETCH_MULTIPLIER = 1\nCELERY_WORKER_MAX_TASKS_PER_CHILD = 1000\nCELERY_TASK_TIME_LIMIT = 30 * 60\nCELERY_TASK_SOFT_TIME_LIMIT = 25 * 60\n\n# Beat scheduler for periodic tasks\nCELERY_BEAT_SCHEDULE = {\n    'cleanup-expired-sessions': {\n        'task': 'myapp.tasks.cleanup_expired_sessions',\n        'schedule': 3600.0,  # Every hour\n    },\n    'generate-daily-reports': {\n        'task': 'myapp.tasks.generate_daily_reports',\n        'schedule': crontab(hour=2, minute=0),  # Daily at 2 AM\n    },\n}\n",[1073,1605,1606,1611,1617,1621,1626,1665,1700,1704,1709,1723,1736,1755,1768,1778,1782,1787,1797,1832,1862,1892,1922,1927,1931,1936,1946,1956,1971,1985,1989,1994,2003,2016,2036,2055,2060,2074,2094,2134,2139],{"__ignoreMap":1075},[1095,1607,1608],{"class":1097,"line":1098},[1095,1609,1610],{"class":1101},"# settings.py\n",[1095,1612,1613,1615],{"class":1097,"line":1105},[1095,1614,1109],{"class":1108},[1095,1616,1113],{"class":1112},[1095,1618,1619],{"class":1097,"line":1116},[1095,1620,1154],{"emptyLinePlaceholder":1153},[1095,1622,1623],{"class":1097,"line":1130},[1095,1624,1625],{"class":1101},"# Celery Configuration\n",[1095,1627,1628,1631,1634,1637,1639,1641,1643,1646,1648,1650,1652,1654,1656,1658,1661,1663],{"class":1097,"line":1150},[1095,1629,1630],{"class":1581},"CELERY_BROKER_URL",[1095,1632,1633],{"class":1138}," =",[1095,1635,1636],{"class":1112}," os",[1095,1638,1139],{"class":1138},[1095,1640,1172],{"class":1171},[1095,1642,1139],{"class":1138},[1095,1644,1645],{"class":1177},"get",[1095,1647,1181],{"class":1138},[1095,1649,1185],{"class":1184},[1095,1651,1630],{"class":1188},[1095,1653,1185],{"class":1184},[1095,1655,1194],{"class":1138},[1095,1657,1197],{"class":1184},[1095,1659,1660],{"class":1188},"redis://localhost:6379/0",[1095,1662,1185],{"class":1184},[1095,1664,1205],{"class":1138},[1095,1666,1667,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698],{"class":1097,"line":1157},[1095,1668,1669],{"class":1581},"CELERY_RESULT_BACKEND",[1095,1671,1633],{"class":1138},[1095,1673,1636],{"class":1112},[1095,1675,1139],{"class":1138},[1095,1677,1172],{"class":1171},[1095,1679,1139],{"class":1138},[1095,1681,1645],{"class":1177},[1095,1683,1181],{"class":1138},[1095,1685,1185],{"class":1184},[1095,1687,1669],{"class":1188},[1095,1689,1185],{"class":1184},[1095,1691,1194],{"class":1138},[1095,1693,1197],{"class":1184},[1095,1695,1660],{"class":1188},[1095,1697,1185],{"class":1184},[1095,1699,1205],{"class":1138},[1095,1701,1702],{"class":1097,"line":1163},[1095,1703,1154],{"emptyLinePlaceholder":1153},[1095,1705,1706],{"class":1097,"line":1208},[1095,1707,1708],{"class":1101},"# Async-compatible settings\n",[1095,1710,1711,1714,1716,1718,1720],{"class":1097,"line":1213},[1095,1712,1713],{"class":1581},"CELERY_TASK_SERIALIZER",[1095,1715,1633],{"class":1138},[1095,1717,1197],{"class":1184},[1095,1719,1353],{"class":1188},[1095,1721,1722],{"class":1184},"'\n",[1095,1724,1725,1728,1730,1732,1734],{"class":1097,"line":1219},[1095,1726,1727],{"class":1581},"CELERY_RESULT_SERIALIZER",[1095,1729,1633],{"class":1138},[1095,1731,1197],{"class":1184},[1095,1733,1353],{"class":1188},[1095,1735,1722],{"class":1184},[1095,1737,1738,1741,1743,1746,1748,1750,1752],{"class":1097,"line":1242},[1095,1739,1740],{"class":1581},"CELERY_ACCEPT_CONTENT",[1095,1742,1633],{"class":1138},[1095,1744,1745],{"class":1138}," [",[1095,1747,1185],{"class":1184},[1095,1749,1353],{"class":1188},[1095,1751,1185],{"class":1184},[1095,1753,1754],{"class":1138},"]\n",[1095,1756,1757,1760,1762,1764,1766],{"class":1097,"line":1247},[1095,1758,1759],{"class":1581},"CELERY_TIMEZONE",[1095,1761,1633],{"class":1138},[1095,1763,1197],{"class":1184},[1095,1765,1405],{"class":1188},[1095,1767,1722],{"class":1184},[1095,1769,1770,1773,1775],{"class":1097,"line":1253},[1095,1771,1772],{"class":1581},"CELERY_ENABLE_UTC",[1095,1774,1633],{"class":1138},[1095,1776,1777],{"class":1420}," True\n",[1095,1779,1780],{"class":1097,"line":1290},[1095,1781,1154],{"emptyLinePlaceholder":1153},[1095,1783,1784],{"class":1097,"line":1295},[1095,1785,1786],{"class":1101},"# Task routing for different queues\n",[1095,1788,1789,1792,1794],{"class":1097,"line":1301},[1095,1790,1791],{"class":1581},"CELERY_TASK_ROUTES",[1095,1793,1633],{"class":1138},[1095,1795,1796],{"class":1138}," {\n",[1095,1798,1799,1802,1805,1807,1810,1813,1815,1818,1820,1822,1824,1827,1829],{"class":1097,"line":1314},[1095,1800,1801],{"class":1184},"    '",[1095,1803,1804],{"class":1188},"myapp.tasks.send_email",[1095,1806,1185],{"class":1184},[1095,1808,1809],{"class":1138},":",[1095,1811,1812],{"class":1138}," {",[1095,1814,1185],{"class":1184},[1095,1816,1817],{"class":1188},"queue",[1095,1819,1185],{"class":1184},[1095,1821,1809],{"class":1138},[1095,1823,1197],{"class":1184},[1095,1825,1826],{"class":1188},"email",[1095,1828,1185],{"class":1184},[1095,1830,1831],{"class":1138},"},\n",[1095,1833,1834,1836,1839,1841,1843,1845,1847,1849,1851,1853,1855,1858,1860],{"class":1097,"line":1319},[1095,1835,1801],{"class":1184},[1095,1837,1838],{"class":1188},"myapp.tasks.process_image",[1095,1840,1185],{"class":1184},[1095,1842,1809],{"class":1138},[1095,1844,1812],{"class":1138},[1095,1846,1185],{"class":1184},[1095,1848,1817],{"class":1188},[1095,1850,1185],{"class":1184},[1095,1852,1809],{"class":1138},[1095,1854,1197],{"class":1184},[1095,1856,1857],{"class":1188},"media",[1095,1859,1185],{"class":1184},[1095,1861,1831],{"class":1138},[1095,1863,1864,1866,1869,1871,1873,1875,1877,1879,1881,1883,1885,1888,1890],{"class":1097,"line":1325},[1095,1865,1801],{"class":1184},[1095,1867,1868],{"class":1188},"myapp.tasks.generate_report",[1095,1870,1185],{"class":1184},[1095,1872,1809],{"class":1138},[1095,1874,1812],{"class":1138},[1095,1876,1185],{"class":1184},[1095,1878,1817],{"class":1188},[1095,1880,1185],{"class":1184},[1095,1882,1809],{"class":1138},[1095,1884,1197],{"class":1184},[1095,1886,1887],{"class":1188},"reports",[1095,1889,1185],{"class":1184},[1095,1891,1831],{"class":1138},[1095,1893,1894,1896,1899,1901,1903,1905,1907,1909,1911,1913,1915,1918,1920],{"class":1097,"line":1343},[1095,1895,1801],{"class":1184},[1095,1897,1898],{"class":1188},"myapp.tasks.sync_data",[1095,1900,1185],{"class":1184},[1095,1902,1809],{"class":1138},[1095,1904,1812],{"class":1138},[1095,1906,1185],{"class":1184},[1095,1908,1817],{"class":1188},[1095,1910,1185],{"class":1184},[1095,1912,1809],{"class":1138},[1095,1914,1197],{"class":1184},[1095,1916,1917],{"class":1188},"sync",[1095,1919,1185],{"class":1184},[1095,1921,1831],{"class":1138},[1095,1923,1924],{"class":1097,"line":1361},[1095,1925,1926],{"class":1138},"}\n",[1095,1928,1929],{"class":1097,"line":1379},[1095,1930,1154],{"emptyLinePlaceholder":1153},[1095,1932,1933],{"class":1097,"line":1395},[1095,1934,1935],{"class":1101},"# Worker configuration\n",[1095,1937,1938,1941,1943],{"class":1097,"line":1412},[1095,1939,1940],{"class":1581},"CELERY_WORKER_PREFETCH_MULTIPLIER",[1095,1942,1633],{"class":1138},[1095,1944,1945],{"class":1446}," 1\n",[1095,1947,1948,1951,1953],{"class":1097,"line":1426},[1095,1949,1950],{"class":1581},"CELERY_WORKER_MAX_TASKS_PER_CHILD",[1095,1952,1633],{"class":1138},[1095,1954,1955],{"class":1446}," 1000\n",[1095,1957,1958,1961,1963,1966,1968],{"class":1097,"line":1438},[1095,1959,1960],{"class":1581},"CELERY_TASK_TIME_LIMIT",[1095,1962,1633],{"class":1138},[1095,1964,1965],{"class":1446}," 30",[1095,1967,1451],{"class":1450},[1095,1969,1970],{"class":1446}," 60\n",[1095,1972,1973,1976,1978,1981,1983],{"class":1097,"line":1462},[1095,1974,1975],{"class":1581},"CELERY_TASK_SOFT_TIME_LIMIT",[1095,1977,1633],{"class":1138},[1095,1979,1980],{"class":1446}," 25",[1095,1982,1451],{"class":1450},[1095,1984,1970],{"class":1446},[1095,1986,1987],{"class":1097,"line":1482},[1095,1988,1154],{"emptyLinePlaceholder":1153},[1095,1990,1991],{"class":1097,"line":1495},[1095,1992,1993],{"class":1101},"# Beat scheduler for periodic tasks\n",[1095,1995,1996,1999,2001],{"class":1097,"line":1508},[1095,1997,1998],{"class":1581},"CELERY_BEAT_SCHEDULE",[1095,2000,1633],{"class":1138},[1095,2002,1796],{"class":1138},[1095,2004,2005,2007,2010,2012,2014],{"class":1097,"line":1513},[1095,2006,1801],{"class":1184},[1095,2008,2009],{"class":1188},"cleanup-expired-sessions",[1095,2011,1185],{"class":1184},[1095,2013,1809],{"class":1138},[1095,2015,1796],{"class":1138},[1095,2017,2018,2021,2023,2025,2027,2029,2032,2034],{"class":1097,"line":1518},[1095,2019,2020],{"class":1184},"        '",[1095,2022,1529],{"class":1188},[1095,2024,1185],{"class":1184},[1095,2026,1809],{"class":1138},[1095,2028,1197],{"class":1184},[1095,2030,2031],{"class":1188},"myapp.tasks.cleanup_expired_sessions",[1095,2033,1185],{"class":1184},[1095,2035,1358],{"class":1138},[1095,2037,2038,2040,2043,2045,2047,2050,2052],{"class":1097,"line":1543},[1095,2039,2020],{"class":1184},[1095,2041,2042],{"class":1188},"schedule",[1095,2044,1185],{"class":1184},[1095,2046,1809],{"class":1138},[1095,2048,2049],{"class":1446}," 3600.0",[1095,2051,1194],{"class":1138},[1095,2053,2054],{"class":1101},"  # Every hour\n",[1095,2056,2057],{"class":1097,"line":1562},[1095,2058,2059],{"class":1138},"    },\n",[1095,2061,2063,2065,2068,2070,2072],{"class":1097,"line":2062},35,[1095,2064,1801],{"class":1184},[1095,2066,2067],{"class":1188},"generate-daily-reports",[1095,2069,1185],{"class":1184},[1095,2071,1809],{"class":1138},[1095,2073,1796],{"class":1138},[1095,2075,2077,2079,2081,2083,2085,2087,2090,2092],{"class":1097,"line":2076},36,[1095,2078,2020],{"class":1184},[1095,2080,1529],{"class":1188},[1095,2082,1185],{"class":1184},[1095,2084,1809],{"class":1138},[1095,2086,1197],{"class":1184},[1095,2088,2089],{"class":1188},"myapp.tasks.generate_daily_reports",[1095,2091,1185],{"class":1184},[1095,2093,1358],{"class":1138},[1095,2095,2097,2099,2101,2103,2105,2108,2110,2113,2115,2118,2120,2123,2125,2128,2131],{"class":1097,"line":2096},37,[1095,2098,2020],{"class":1184},[1095,2100,2042],{"class":1188},[1095,2102,1185],{"class":1184},[1095,2104,1809],{"class":1138},[1095,2106,2107],{"class":1177}," crontab",[1095,2109,1181],{"class":1138},[1095,2111,2112],{"class":1275},"hour",[1095,2114,1225],{"class":1138},[1095,2116,2117],{"class":1446},"2",[1095,2119,1194],{"class":1138},[1095,2121,2122],{"class":1275}," minute",[1095,2124,1225],{"class":1138},[1095,2126,2127],{"class":1446},"0",[1095,2129,2130],{"class":1138},"),",[1095,2132,2133],{"class":1101},"  # Daily at 2 AM\n",[1095,2135,2137],{"class":1097,"line":2136},38,[1095,2138,2059],{"class":1138},[1095,2140,2142],{"class":1097,"line":2141},39,[1095,2143,1926],{"class":1138},[1061,2145,2147],{"id":2146},"async-task-definitions","Async Task Definitions",[1066,2149,2151],{"className":1089,"code":2150,"language":1091,"meta":1075,"style":1075},"# tasks.py\nimport asyncio\nimport aiohttp\nimport aiofiles\nfrom celery import shared_task\nfrom django.core.mail import send_mail\nfrom django.contrib.auth.models import User\nfrom asgiref.sync import sync_to_async\nfrom .models import Document, ProcessingJob\n\n@shared_task(bind=True, max_retries=3)\ndef send_email_task(self, subject, message, recipient_list):\n    \"\"\"Send email with retry logic\"\"\"\n    try:\n        send_mail(\n            subject=subject,\n            message=message,\n            from_email='noreply@example.com',\n            recipient_list=recipient_list,\n            fail_silently=False\n        )\n        return f\"Email sent to {len(recipient_list)} recipients\"\n    except Exception as exc:\n        # Retry with exponential backoff\n        raise self.retry(exc=exc, countdown=60 * (2 ** self.request.retries))\n\n@shared_task(bind=True)\ndef process_document_async(self, document_id):\n    \"\"\"Process document with async operations\"\"\"\n    try:\n        # Run async processing in event loop\n        return asyncio.run(process_document_content(document_id))\n    except Exception as exc:\n        return {'error': str(exc), 'document_id': document_id}\n\nasync def process_document_content(document_id):\n    \"\"\"Async document processing logic\"\"\"\n    # Get document using async ORM\n    document = await sync_to_async(Document.objects.get)(id=document_id)\n    \n    # Process file asynchronously\n    async with aiofiles.open(document.file.path, 'r') as f:\n        content = await f.read()\n    \n    # Perform async analysis\n    analysis_results = await analyze_content_async(content)\n    \n    # Update document with results\n    await sync_to_async(document.save)()\n    \n    return {\n        'document_id': document_id,\n        'status': 'completed',\n        'analysis': analysis_results\n    }\n\nasync def analyze_content_async(content):\n    \"\"\"Async content analysis using external API\"\"\"\n    async with aiohttp.ClientSession() as session:\n        async with session.post(\n            'https://api.textanalysis.com/analyze',\n            json={'text': content},\n            headers={'Authorization': 'Bearer YOUR_API_KEY'}\n        ) as response:\n            return await response.json()\n\n@shared_task(bind=True)\ndef batch_process_users(self, user_ids, operation):\n    \"\"\"Process multiple users in batch\"\"\"\n    results = []\n    \n    for user_id in user_ids:\n        try:\n            result = asyncio.run(process_single_user(user_id, operation))\n            results.append(result)\n        except Exception as exc:\n            results.append({'user_id': user_id, 'error': str(exc)})\n    \n    return {\n        'total_processed': len(results),\n        'successful': len([r for r in results if 'error' not in r]),\n        'failed': len([r for r in results if 'error' in r]),\n        'results': results\n    }\n\nasync def process_single_user(user_id, operation):\n    \"\"\"Process individual user asynchronously\"\"\"\n    user = await sync_to_async(User.objects.get)(id=user_id)\n    \n    if operation == 'update_profile':\n        # Async profile update logic\n        await update_user_profile_async(user)\n    elif operation == 'send_notification':\n        # Async notification sending\n        await send_user_notification_async(user)\n    \n    return {'user_id': user_id, 'status': 'completed', 'operation': operation}\n",[1073,2152,2153,2158,2165,2172,2179,2190,2211,2237,2254,2273,2277,2304,2333,2346,2354,2361,2373,2385,2401,2413,2423,2428,2456,2473,2478,2534,2538,2554,2572,2581,2587,2592,2616,2628,2664,2668,2685,2694,2699,2738,2744,2750,2799,2818,2823,2829,2849,2854,2860,2880,2885,2893,2908,2929,2944,2950,2955,2970,2980,3005,3022,3035,3057,3083,3096,3112,3117,3134,3158,3168,3179,3184,3200,3208,3238,3256,3270,3312,3317,3324,3347,3399,3439,3453,3458,3463,3483,3493,3528,3533,3554,3560,3576,3595,3601,3615,3620],{"__ignoreMap":1075},[1095,2154,2155],{"class":1097,"line":1098},[1095,2156,2157],{"class":1101},"# tasks.py\n",[1095,2159,2160,2162],{"class":1097,"line":1105},[1095,2161,1109],{"class":1108},[1095,2163,2164],{"class":1112}," asyncio\n",[1095,2166,2167,2169],{"class":1097,"line":1116},[1095,2168,1109],{"class":1108},[1095,2170,2171],{"class":1112}," aiohttp\n",[1095,2173,2174,2176],{"class":1097,"line":1130},[1095,2175,1109],{"class":1108},[1095,2177,2178],{"class":1112}," aiofiles\n",[1095,2180,2181,2183,2185,2187],{"class":1097,"line":1150},[1095,2182,1119],{"class":1108},[1095,2184,1122],{"class":1112},[1095,2186,1109],{"class":1108},[1095,2188,2189],{"class":1112}," shared_task\n",[1095,2191,2192,2194,2196,2198,2201,2203,2206,2208],{"class":1097,"line":1157},[1095,2193,1119],{"class":1108},[1095,2195,1135],{"class":1112},[1095,2197,1139],{"class":1138},[1095,2199,2200],{"class":1112},"core",[1095,2202,1139],{"class":1138},[1095,2204,2205],{"class":1112},"mail ",[1095,2207,1109],{"class":1108},[1095,2209,2210],{"class":1112}," send_mail\n",[1095,2212,2213,2215,2217,2219,2222,2224,2227,2229,2232,2234],{"class":1097,"line":1163},[1095,2214,1119],{"class":1108},[1095,2216,1135],{"class":1112},[1095,2218,1139],{"class":1138},[1095,2220,2221],{"class":1112},"contrib",[1095,2223,1139],{"class":1138},[1095,2225,2226],{"class":1112},"auth",[1095,2228,1139],{"class":1138},[1095,2230,2231],{"class":1112},"models ",[1095,2233,1109],{"class":1108},[1095,2235,2236],{"class":1112}," User\n",[1095,2238,2239,2241,2244,2246,2249,2251],{"class":1097,"line":1208},[1095,2240,1119],{"class":1108},[1095,2242,2243],{"class":1112}," asgiref",[1095,2245,1139],{"class":1138},[1095,2247,2248],{"class":1112},"sync ",[1095,2250,1109],{"class":1108},[1095,2252,2253],{"class":1112}," sync_to_async\n",[1095,2255,2256,2258,2261,2263,2265,2268,2270],{"class":1097,"line":1213},[1095,2257,1119],{"class":1108},[1095,2259,2260],{"class":1138}," .",[1095,2262,2231],{"class":1112},[1095,2264,1109],{"class":1108},[1095,2266,2267],{"class":1112}," Document",[1095,2269,1194],{"class":1138},[1095,2271,2272],{"class":1112}," ProcessingJob\n",[1095,2274,2275],{"class":1097,"line":1219},[1095,2276,1154],{"emptyLinePlaceholder":1153},[1095,2278,2279,2281,2284,2286,2288,2290,2292,2294,2297,2299,2302],{"class":1097,"line":1242},[1095,2280,1521],{"class":1138},[1095,2282,2283],{"class":1524},"shared_task",[1095,2285,1181],{"class":1138},[1095,2287,1534],{"class":1275},[1095,2289,1225],{"class":1138},[1095,2291,1421],{"class":1420},[1095,2293,1194],{"class":1138},[1095,2295,2296],{"class":1275}," max_retries",[1095,2298,1225],{"class":1138},[1095,2300,2301],{"class":1446},"3",[1095,2303,1205],{"class":1138},[1095,2305,2306,2308,2311,2313,2315,2317,2321,2323,2326,2328,2331],{"class":1097,"line":1247},[1095,2307,1547],{"class":1546},[1095,2309,2310],{"class":1524}," send_email_task",[1095,2312,1181],{"class":1138},[1095,2314,1556],{"class":1555},[1095,2316,1194],{"class":1138},[1095,2318,2320],{"class":2319},"sCyAa"," subject",[1095,2322,1194],{"class":1138},[1095,2324,2325],{"class":2319}," message",[1095,2327,1194],{"class":1138},[1095,2329,2330],{"class":2319}," recipient_list",[1095,2332,1559],{"class":1138},[1095,2334,2335,2339,2343],{"class":1097,"line":1253},[1095,2336,2338],{"class":2337},"sm7ve","    \"\"\"",[1095,2340,2342],{"class":2341},"sVyVU","Send email with retry logic",[1095,2344,2345],{"class":2337},"\"\"\"\n",[1095,2347,2348,2351],{"class":1097,"line":1290},[1095,2349,2350],{"class":1108},"    try",[1095,2352,2353],{"class":1138},":\n",[1095,2355,2356,2359],{"class":1097,"line":1295},[1095,2357,2358],{"class":1177},"        send_mail",[1095,2360,1340],{"class":1138},[1095,2362,2363,2366,2368,2371],{"class":1097,"line":1301},[1095,2364,2365],{"class":1275},"            subject",[1095,2367,1225],{"class":1138},[1095,2369,2370],{"class":1177},"subject",[1095,2372,1358],{"class":1138},[1095,2374,2375,2378,2380,2383],{"class":1097,"line":1314},[1095,2376,2377],{"class":1275},"            message",[1095,2379,1225],{"class":1138},[1095,2381,2382],{"class":1177},"message",[1095,2384,1358],{"class":1138},[1095,2386,2387,2390,2392,2394,2397,2399],{"class":1097,"line":1319},[1095,2388,2389],{"class":1275},"            from_email",[1095,2391,1225],{"class":1138},[1095,2393,1185],{"class":1184},[1095,2395,2396],{"class":1188},"noreply@example.com",[1095,2398,1185],{"class":1184},[1095,2400,1358],{"class":1138},[1095,2402,2403,2406,2408,2411],{"class":1097,"line":1325},[1095,2404,2405],{"class":1275},"            recipient_list",[1095,2407,1225],{"class":1138},[1095,2409,2410],{"class":1177},"recipient_list",[1095,2412,1358],{"class":1138},[1095,2414,2415,2418,2420],{"class":1097,"line":1343},[1095,2416,2417],{"class":1275},"            fail_silently",[1095,2419,1225],{"class":1138},[1095,2421,2422],{"class":1420},"False\n",[1095,2424,2425],{"class":1097,"line":1361},[1095,2426,2427],{"class":1138},"        )\n",[1095,2429,2430,2433,2436,2439,2441,2444,2446,2448,2451,2453],{"class":1097,"line":1379},[1095,2431,2432],{"class":1108},"        return",[1095,2434,2435],{"class":1546}," f",[1095,2437,2438],{"class":1188},"\"Email sent to ",[1095,2440,1578],{"class":1577},[1095,2442,2443],{"class":1565},"len",[1095,2445,1181],{"class":1138},[1095,2447,2410],{"class":1177},[1095,2449,2450],{"class":1138},")",[1095,2452,1592],{"class":1577},[1095,2454,2455],{"class":1188}," recipients\"\n",[1095,2457,2458,2461,2465,2468,2471],{"class":1097,"line":1395},[1095,2459,2460],{"class":1108},"    except",[1095,2462,2464],{"class":2463},"sa2tF"," Exception",[1095,2466,2467],{"class":1108}," as",[1095,2469,2470],{"class":1112}," exc",[1095,2472,2353],{"class":1138},[1095,2474,2475],{"class":1097,"line":1412},[1095,2476,2477],{"class":1101},"        # Retry with exponential backoff\n",[1095,2479,2480,2483,2486,2488,2491,2493,2496,2498,2500,2502,2505,2507,2510,2512,2515,2517,2520,2522,2524,2526,2528,2531],{"class":1097,"line":1426},[1095,2481,2482],{"class":1108},"        raise",[1095,2484,2485],{"class":1581}," self",[1095,2487,1139],{"class":1138},[1095,2489,2490],{"class":1177},"retry",[1095,2492,1181],{"class":1138},[1095,2494,2495],{"class":1275},"exc",[1095,2497,1225],{"class":1138},[1095,2499,2495],{"class":1177},[1095,2501,1194],{"class":1138},[1095,2503,2504],{"class":1275}," countdown",[1095,2506,1225],{"class":1138},[1095,2508,2509],{"class":1446},"60",[1095,2511,1451],{"class":1450},[1095,2513,2514],{"class":1138}," (",[1095,2516,2117],{"class":1446},[1095,2518,2519],{"class":1450}," **",[1095,2521,2485],{"class":1581},[1095,2523,1139],{"class":1138},[1095,2525,1586],{"class":1171},[1095,2527,1139],{"class":1138},[1095,2529,2530],{"class":1171},"retries",[1095,2532,2533],{"class":1138},"))\n",[1095,2535,2536],{"class":1097,"line":1438},[1095,2537,1154],{"emptyLinePlaceholder":1153},[1095,2539,2540,2542,2544,2546,2548,2550,2552],{"class":1097,"line":1462},[1095,2541,1521],{"class":1138},[1095,2543,2283],{"class":1524},[1095,2545,1181],{"class":1138},[1095,2547,1534],{"class":1275},[1095,2549,1225],{"class":1138},[1095,2551,1421],{"class":1420},[1095,2553,1205],{"class":1138},[1095,2555,2556,2558,2561,2563,2565,2567,2570],{"class":1097,"line":1482},[1095,2557,1547],{"class":1546},[1095,2559,2560],{"class":1524}," process_document_async",[1095,2562,1181],{"class":1138},[1095,2564,1556],{"class":1555},[1095,2566,1194],{"class":1138},[1095,2568,2569],{"class":2319}," document_id",[1095,2571,1559],{"class":1138},[1095,2573,2574,2576,2579],{"class":1097,"line":1495},[1095,2575,2338],{"class":2337},[1095,2577,2578],{"class":2341},"Process document with async operations",[1095,2580,2345],{"class":2337},[1095,2582,2583,2585],{"class":1097,"line":1508},[1095,2584,2350],{"class":1108},[1095,2586,2353],{"class":1138},[1095,2588,2589],{"class":1097,"line":1513},[1095,2590,2591],{"class":1101},"        # Run async processing in event loop\n",[1095,2593,2594,2596,2599,2601,2604,2606,2609,2611,2614],{"class":1097,"line":1518},[1095,2595,2432],{"class":1108},[1095,2597,2598],{"class":1112}," asyncio",[1095,2600,1139],{"class":1138},[1095,2602,2603],{"class":1177},"run",[1095,2605,1181],{"class":1138},[1095,2607,2608],{"class":1177},"process_document_content",[1095,2610,1181],{"class":1138},[1095,2612,2613],{"class":1177},"document_id",[1095,2615,2533],{"class":1138},[1095,2617,2618,2620,2622,2624,2626],{"class":1097,"line":1543},[1095,2619,2460],{"class":1108},[1095,2621,2464],{"class":2463},[1095,2623,2467],{"class":1108},[1095,2625,2470],{"class":1112},[1095,2627,2353],{"class":1138},[1095,2629,2630,2632,2634,2636,2639,2641,2643,2646,2648,2650,2652,2654,2656,2658,2660,2662],{"class":1097,"line":1562},[1095,2631,2432],{"class":1108},[1095,2633,1812],{"class":1138},[1095,2635,1185],{"class":1184},[1095,2637,2638],{"class":1188},"error",[1095,2640,1185],{"class":1184},[1095,2642,1809],{"class":1138},[1095,2644,2645],{"class":2463}," str",[1095,2647,1181],{"class":1138},[1095,2649,2495],{"class":1177},[1095,2651,2130],{"class":1138},[1095,2653,1197],{"class":1184},[1095,2655,2613],{"class":1188},[1095,2657,1185],{"class":1184},[1095,2659,1809],{"class":1138},[1095,2661,2569],{"class":1112},[1095,2663,1926],{"class":1138},[1095,2665,2666],{"class":1097,"line":2062},[1095,2667,1154],{"emptyLinePlaceholder":1153},[1095,2669,2670,2673,2676,2679,2681,2683],{"class":1097,"line":2076},[1095,2671,2672],{"class":1546},"async",[1095,2674,2675],{"class":1546}," def",[1095,2677,2678],{"class":1524}," process_document_content",[1095,2680,1181],{"class":1138},[1095,2682,2613],{"class":2319},[1095,2684,1559],{"class":1138},[1095,2686,2687,2689,2692],{"class":1097,"line":2096},[1095,2688,2338],{"class":2337},[1095,2690,2691],{"class":2341},"Async document processing logic",[1095,2693,2345],{"class":2337},[1095,2695,2696],{"class":1097,"line":2136},[1095,2697,2698],{"class":1101},"    # Get document using async ORM\n",[1095,2700,2701,2704,2706,2709,2712,2714,2717,2719,2722,2724,2726,2729,2732,2734,2736],{"class":1097,"line":2141},[1095,2702,2703],{"class":1112},"    document ",[1095,2705,1225],{"class":1138},[1095,2707,2708],{"class":1108}," await",[1095,2710,2711],{"class":1177}," sync_to_async",[1095,2713,1181],{"class":1138},[1095,2715,2716],{"class":1177},"Document",[1095,2718,1139],{"class":1138},[1095,2720,2721],{"class":1171},"objects",[1095,2723,1139],{"class":1138},[1095,2725,1645],{"class":1171},[1095,2727,2728],{"class":1138},")(",[1095,2730,2731],{"class":1275},"id",[1095,2733,1225],{"class":1138},[1095,2735,2613],{"class":1177},[1095,2737,1205],{"class":1138},[1095,2739,2741],{"class":1097,"line":2740},40,[1095,2742,2743],{"class":1112},"    \n",[1095,2745,2747],{"class":1097,"line":2746},41,[1095,2748,2749],{"class":1101},"    # Process file asynchronously\n",[1095,2751,2753,2756,2759,2762,2764,2767,2769,2772,2774,2777,2779,2782,2784,2786,2789,2791,2793,2795,2797],{"class":1097,"line":2752},42,[1095,2754,2755],{"class":1108},"    async",[1095,2757,2758],{"class":1108}," with",[1095,2760,2761],{"class":1112}," aiofiles",[1095,2763,1139],{"class":1138},[1095,2765,2766],{"class":1177},"open",[1095,2768,1181],{"class":1138},[1095,2770,2771],{"class":1177},"document",[1095,2773,1139],{"class":1138},[1095,2775,2776],{"class":1171},"file",[1095,2778,1139],{"class":1138},[1095,2780,2781],{"class":1171},"path",[1095,2783,1194],{"class":1138},[1095,2785,1197],{"class":1184},[1095,2787,2788],{"class":1188},"r",[1095,2790,1185],{"class":1184},[1095,2792,2450],{"class":1138},[1095,2794,2467],{"class":1108},[1095,2796,2435],{"class":1112},[1095,2798,2353],{"class":1138},[1095,2800,2802,2805,2807,2809,2811,2813,2816],{"class":1097,"line":2801},43,[1095,2803,2804],{"class":1112},"        content ",[1095,2806,1225],{"class":1138},[1095,2808,2708],{"class":1108},[1095,2810,2435],{"class":1112},[1095,2812,1139],{"class":1138},[1095,2814,2815],{"class":1177},"read",[1095,2817,1311],{"class":1138},[1095,2819,2821],{"class":1097,"line":2820},44,[1095,2822,2743],{"class":1112},[1095,2824,2826],{"class":1097,"line":2825},45,[1095,2827,2828],{"class":1101},"    # Perform async analysis\n",[1095,2830,2832,2835,2837,2839,2842,2844,2847],{"class":1097,"line":2831},46,[1095,2833,2834],{"class":1112},"    analysis_results ",[1095,2836,1225],{"class":1138},[1095,2838,2708],{"class":1108},[1095,2840,2841],{"class":1177}," analyze_content_async",[1095,2843,1181],{"class":1138},[1095,2845,2846],{"class":1177},"content",[1095,2848,1205],{"class":1138},[1095,2850,2852],{"class":1097,"line":2851},47,[1095,2853,2743],{"class":1112},[1095,2855,2857],{"class":1097,"line":2856},48,[1095,2858,2859],{"class":1101},"    # Update document with results\n",[1095,2861,2863,2866,2868,2870,2872,2874,2877],{"class":1097,"line":2862},49,[1095,2864,2865],{"class":1108},"    await",[1095,2867,2711],{"class":1177},[1095,2869,1181],{"class":1138},[1095,2871,2771],{"class":1177},[1095,2873,1139],{"class":1138},[1095,2875,2876],{"class":1171},"save",[1095,2878,2879],{"class":1138},")()\n",[1095,2881,2883],{"class":1097,"line":2882},50,[1095,2884,2743],{"class":1112},[1095,2886,2888,2891],{"class":1097,"line":2887},51,[1095,2889,2890],{"class":1108},"    return",[1095,2892,1796],{"class":1138},[1095,2894,2896,2898,2900,2902,2904,2906],{"class":1097,"line":2895},52,[1095,2897,2020],{"class":1184},[1095,2899,2613],{"class":1188},[1095,2901,1185],{"class":1184},[1095,2903,1809],{"class":1138},[1095,2905,2569],{"class":1112},[1095,2907,1358],{"class":1138},[1095,2909,2911,2913,2916,2918,2920,2922,2925,2927],{"class":1097,"line":2910},53,[1095,2912,2020],{"class":1184},[1095,2914,2915],{"class":1188},"status",[1095,2917,1185],{"class":1184},[1095,2919,1809],{"class":1138},[1095,2921,1197],{"class":1184},[1095,2923,2924],{"class":1188},"completed",[1095,2926,1185],{"class":1184},[1095,2928,1358],{"class":1138},[1095,2930,2932,2934,2937,2939,2941],{"class":1097,"line":2931},54,[1095,2933,2020],{"class":1184},[1095,2935,2936],{"class":1188},"analysis",[1095,2938,1185],{"class":1184},[1095,2940,1809],{"class":1138},[1095,2942,2943],{"class":1112}," analysis_results\n",[1095,2945,2947],{"class":1097,"line":2946},55,[1095,2948,2949],{"class":1138},"    }\n",[1095,2951,2953],{"class":1097,"line":2952},56,[1095,2954,1154],{"emptyLinePlaceholder":1153},[1095,2956,2958,2960,2962,2964,2966,2968],{"class":1097,"line":2957},57,[1095,2959,2672],{"class":1546},[1095,2961,2675],{"class":1546},[1095,2963,2841],{"class":1524},[1095,2965,1181],{"class":1138},[1095,2967,2846],{"class":2319},[1095,2969,1559],{"class":1138},[1095,2971,2973,2975,2978],{"class":1097,"line":2972},58,[1095,2974,2338],{"class":2337},[1095,2976,2977],{"class":2341},"Async content analysis using external API",[1095,2979,2345],{"class":2337},[1095,2981,2983,2985,2987,2990,2992,2995,2998,3000,3003],{"class":1097,"line":2982},59,[1095,2984,2755],{"class":1108},[1095,2986,2758],{"class":1108},[1095,2988,2989],{"class":1112}," aiohttp",[1095,2991,1139],{"class":1138},[1095,2993,2994],{"class":1177},"ClientSession",[1095,2996,2997],{"class":1138},"()",[1095,2999,2467],{"class":1108},[1095,3001,3002],{"class":1112}," session",[1095,3004,2353],{"class":1138},[1095,3006,3008,3011,3013,3015,3017,3020],{"class":1097,"line":3007},60,[1095,3009,3010],{"class":1108},"        async",[1095,3012,2758],{"class":1108},[1095,3014,3002],{"class":1112},[1095,3016,1139],{"class":1138},[1095,3018,3019],{"class":1177},"post",[1095,3021,1340],{"class":1138},[1095,3023,3025,3028,3031,3033],{"class":1097,"line":3024},61,[1095,3026,3027],{"class":1184},"            '",[1095,3029,3030],{"class":1188},"https://api.textanalysis.com/analyze",[1095,3032,1185],{"class":1184},[1095,3034,1358],{"class":1138},[1095,3036,3038,3041,3044,3046,3048,3050,3052,3055],{"class":1097,"line":3037},62,[1095,3039,3040],{"class":1275},"            json",[1095,3042,3043],{"class":1138},"={",[1095,3045,1185],{"class":1184},[1095,3047,1071],{"class":1188},[1095,3049,1185],{"class":1184},[1095,3051,1809],{"class":1138},[1095,3053,3054],{"class":1177}," content",[1095,3056,1831],{"class":1138},[1095,3058,3060,3063,3065,3067,3070,3072,3074,3076,3079,3081],{"class":1097,"line":3059},63,[1095,3061,3062],{"class":1275},"            headers",[1095,3064,3043],{"class":1138},[1095,3066,1185],{"class":1184},[1095,3068,3069],{"class":1188},"Authorization",[1095,3071,1185],{"class":1184},[1095,3073,1809],{"class":1138},[1095,3075,1197],{"class":1184},[1095,3077,3078],{"class":1188},"Bearer YOUR_API_KEY",[1095,3080,1185],{"class":1184},[1095,3082,1926],{"class":1138},[1095,3084,3086,3089,3091,3094],{"class":1097,"line":3085},64,[1095,3087,3088],{"class":1138},"        )",[1095,3090,2467],{"class":1108},[1095,3092,3093],{"class":1112}," response",[1095,3095,2353],{"class":1138},[1095,3097,3099,3102,3104,3106,3108,3110],{"class":1097,"line":3098},65,[1095,3100,3101],{"class":1108},"            return",[1095,3103,2708],{"class":1108},[1095,3105,3093],{"class":1112},[1095,3107,1139],{"class":1138},[1095,3109,1353],{"class":1177},[1095,3111,1311],{"class":1138},[1095,3113,3115],{"class":1097,"line":3114},66,[1095,3116,1154],{"emptyLinePlaceholder":1153},[1095,3118,3120,3122,3124,3126,3128,3130,3132],{"class":1097,"line":3119},67,[1095,3121,1521],{"class":1138},[1095,3123,2283],{"class":1524},[1095,3125,1181],{"class":1138},[1095,3127,1534],{"class":1275},[1095,3129,1225],{"class":1138},[1095,3131,1421],{"class":1420},[1095,3133,1205],{"class":1138},[1095,3135,3137,3139,3142,3144,3146,3148,3151,3153,3156],{"class":1097,"line":3136},68,[1095,3138,1547],{"class":1546},[1095,3140,3141],{"class":1524}," batch_process_users",[1095,3143,1181],{"class":1138},[1095,3145,1556],{"class":1555},[1095,3147,1194],{"class":1138},[1095,3149,3150],{"class":2319}," user_ids",[1095,3152,1194],{"class":1138},[1095,3154,3155],{"class":2319}," operation",[1095,3157,1559],{"class":1138},[1095,3159,3161,3163,3166],{"class":1097,"line":3160},69,[1095,3162,2338],{"class":2337},[1095,3164,3165],{"class":2341},"Process multiple users in batch",[1095,3167,2345],{"class":2337},[1095,3169,3171,3174,3176],{"class":1097,"line":3170},70,[1095,3172,3173],{"class":1112},"    results ",[1095,3175,1225],{"class":1138},[1095,3177,3178],{"class":1138}," []\n",[1095,3180,3182],{"class":1097,"line":3181},71,[1095,3183,2743],{"class":1112},[1095,3185,3187,3190,3193,3196,3198],{"class":1097,"line":3186},72,[1095,3188,3189],{"class":1108},"    for",[1095,3191,3192],{"class":1112}," user_id ",[1095,3194,3195],{"class":1108},"in",[1095,3197,3150],{"class":1112},[1095,3199,2353],{"class":1138},[1095,3201,3203,3206],{"class":1097,"line":3202},73,[1095,3204,3205],{"class":1108},"        try",[1095,3207,2353],{"class":1138},[1095,3209,3211,3214,3216,3218,3220,3222,3224,3227,3229,3232,3234,3236],{"class":1097,"line":3210},74,[1095,3212,3213],{"class":1112},"            result ",[1095,3215,1225],{"class":1138},[1095,3217,2598],{"class":1112},[1095,3219,1139],{"class":1138},[1095,3221,2603],{"class":1177},[1095,3223,1181],{"class":1138},[1095,3225,3226],{"class":1177},"process_single_user",[1095,3228,1181],{"class":1138},[1095,3230,3231],{"class":1177},"user_id",[1095,3233,1194],{"class":1138},[1095,3235,3155],{"class":1177},[1095,3237,2533],{"class":1138},[1095,3239,3241,3244,3246,3249,3251,3254],{"class":1097,"line":3240},75,[1095,3242,3243],{"class":1112},"            results",[1095,3245,1139],{"class":1138},[1095,3247,3248],{"class":1177},"append",[1095,3250,1181],{"class":1138},[1095,3252,3253],{"class":1177},"result",[1095,3255,1205],{"class":1138},[1095,3257,3259,3262,3264,3266,3268],{"class":1097,"line":3258},76,[1095,3260,3261],{"class":1108},"        except",[1095,3263,2464],{"class":2463},[1095,3265,2467],{"class":1108},[1095,3267,2470],{"class":1112},[1095,3269,2353],{"class":1138},[1095,3271,3273,3275,3277,3279,3282,3284,3286,3288,3290,3293,3295,3297,3299,3301,3303,3305,3307,3309],{"class":1097,"line":3272},77,[1095,3274,3243],{"class":1112},[1095,3276,1139],{"class":1138},[1095,3278,3248],{"class":1177},[1095,3280,3281],{"class":1138},"({",[1095,3283,1185],{"class":1184},[1095,3285,3231],{"class":1188},[1095,3287,1185],{"class":1184},[1095,3289,1809],{"class":1138},[1095,3291,3292],{"class":1177}," user_id",[1095,3294,1194],{"class":1138},[1095,3296,1197],{"class":1184},[1095,3298,2638],{"class":1188},[1095,3300,1185],{"class":1184},[1095,3302,1809],{"class":1138},[1095,3304,2645],{"class":2463},[1095,3306,1181],{"class":1138},[1095,3308,2495],{"class":1177},[1095,3310,3311],{"class":1138},")})\n",[1095,3313,3315],{"class":1097,"line":3314},78,[1095,3316,2743],{"class":1112},[1095,3318,3320,3322],{"class":1097,"line":3319},79,[1095,3321,2890],{"class":1108},[1095,3323,1796],{"class":1138},[1095,3325,3327,3329,3332,3334,3336,3339,3341,3344],{"class":1097,"line":3326},80,[1095,3328,2020],{"class":1184},[1095,3330,3331],{"class":1188},"total_processed",[1095,3333,1185],{"class":1184},[1095,3335,1809],{"class":1138},[1095,3337,3338],{"class":1565}," len",[1095,3340,1181],{"class":1138},[1095,3342,3343],{"class":1177},"results",[1095,3345,3346],{"class":1138},"),\n",[1095,3348,3350,3352,3355,3357,3359,3361,3364,3367,3370,3373,3375,3378,3381,3383,3385,3387,3390,3393,3396],{"class":1097,"line":3349},81,[1095,3351,2020],{"class":1184},[1095,3353,3354],{"class":1188},"successful",[1095,3356,1185],{"class":1184},[1095,3358,1809],{"class":1138},[1095,3360,3338],{"class":1565},[1095,3362,3363],{"class":1138},"([",[1095,3365,3366],{"class":1177},"r ",[1095,3368,3369],{"class":1108},"for",[1095,3371,3372],{"class":1177}," r ",[1095,3374,3195],{"class":1108},[1095,3376,3377],{"class":1177}," results ",[1095,3379,3380],{"class":1108},"if",[1095,3382,1197],{"class":1184},[1095,3384,2638],{"class":1188},[1095,3386,1185],{"class":1184},[1095,3388,3389],{"class":1450}," not",[1095,3391,3392],{"class":1450}," in",[1095,3394,3395],{"class":1177}," r",[1095,3397,3398],{"class":1138},"]),\n",[1095,3400,3402,3404,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437],{"class":1097,"line":3401},82,[1095,3403,2020],{"class":1184},[1095,3405,3406],{"class":1188},"failed",[1095,3408,1185],{"class":1184},[1095,3410,1809],{"class":1138},[1095,3412,3338],{"class":1565},[1095,3414,3363],{"class":1138},[1095,3416,3366],{"class":1177},[1095,3418,3369],{"class":1108},[1095,3420,3372],{"class":1177},[1095,3422,3195],{"class":1108},[1095,3424,3377],{"class":1177},[1095,3426,3380],{"class":1108},[1095,3428,1197],{"class":1184},[1095,3430,2638],{"class":1188},[1095,3432,1185],{"class":1184},[1095,3434,3392],{"class":1450},[1095,3436,3395],{"class":1177},[1095,3438,3398],{"class":1138},[1095,3440,3442,3444,3446,3448,3450],{"class":1097,"line":3441},83,[1095,3443,2020],{"class":1184},[1095,3445,3343],{"class":1188},[1095,3447,1185],{"class":1184},[1095,3449,1809],{"class":1138},[1095,3451,3452],{"class":1112}," results\n",[1095,3454,3456],{"class":1097,"line":3455},84,[1095,3457,2949],{"class":1138},[1095,3459,3461],{"class":1097,"line":3460},85,[1095,3462,1154],{"emptyLinePlaceholder":1153},[1095,3464,3466,3468,3470,3473,3475,3477,3479,3481],{"class":1097,"line":3465},86,[1095,3467,2672],{"class":1546},[1095,3469,2675],{"class":1546},[1095,3471,3472],{"class":1524}," process_single_user",[1095,3474,1181],{"class":1138},[1095,3476,3231],{"class":2319},[1095,3478,1194],{"class":1138},[1095,3480,3155],{"class":2319},[1095,3482,1559],{"class":1138},[1095,3484,3486,3488,3491],{"class":1097,"line":3485},87,[1095,3487,2338],{"class":2337},[1095,3489,3490],{"class":2341},"Process individual user asynchronously",[1095,3492,2345],{"class":2337},[1095,3494,3496,3499,3501,3503,3505,3507,3510,3512,3514,3516,3518,3520,3522,3524,3526],{"class":1097,"line":3495},88,[1095,3497,3498],{"class":1112},"    user ",[1095,3500,1225],{"class":1138},[1095,3502,2708],{"class":1108},[1095,3504,2711],{"class":1177},[1095,3506,1181],{"class":1138},[1095,3508,3509],{"class":1177},"User",[1095,3511,1139],{"class":1138},[1095,3513,2721],{"class":1171},[1095,3515,1139],{"class":1138},[1095,3517,1645],{"class":1171},[1095,3519,2728],{"class":1138},[1095,3521,2731],{"class":1275},[1095,3523,1225],{"class":1138},[1095,3525,3231],{"class":1177},[1095,3527,1205],{"class":1138},[1095,3529,3531],{"class":1097,"line":3530},89,[1095,3532,2743],{"class":1112},[1095,3534,3536,3539,3542,3545,3547,3550,3552],{"class":1097,"line":3535},90,[1095,3537,3538],{"class":1108},"    if",[1095,3540,3541],{"class":1112}," operation ",[1095,3543,3544],{"class":1450},"==",[1095,3546,1197],{"class":1184},[1095,3548,3549],{"class":1188},"update_profile",[1095,3551,1185],{"class":1184},[1095,3553,2353],{"class":1138},[1095,3555,3557],{"class":1097,"line":3556},91,[1095,3558,3559],{"class":1101},"        # Async profile update logic\n",[1095,3561,3563,3566,3569,3571,3574],{"class":1097,"line":3562},92,[1095,3564,3565],{"class":1108},"        await",[1095,3567,3568],{"class":1177}," update_user_profile_async",[1095,3570,1181],{"class":1138},[1095,3572,3573],{"class":1177},"user",[1095,3575,1205],{"class":1138},[1095,3577,3579,3582,3584,3586,3588,3591,3593],{"class":1097,"line":3578},93,[1095,3580,3581],{"class":1108},"    elif",[1095,3583,3541],{"class":1112},[1095,3585,3544],{"class":1450},[1095,3587,1197],{"class":1184},[1095,3589,3590],{"class":1188},"send_notification",[1095,3592,1185],{"class":1184},[1095,3594,2353],{"class":1138},[1095,3596,3598],{"class":1097,"line":3597},94,[1095,3599,3600],{"class":1101},"        # Async notification sending\n",[1095,3602,3604,3606,3609,3611,3613],{"class":1097,"line":3603},95,[1095,3605,3565],{"class":1108},[1095,3607,3608],{"class":1177}," send_user_notification_async",[1095,3610,1181],{"class":1138},[1095,3612,3573],{"class":1177},[1095,3614,1205],{"class":1138},[1095,3616,3618],{"class":1097,"line":3617},96,[1095,3619,2743],{"class":1112},[1095,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3660,3662,3664,3666],{"class":1097,"line":3622},97,[1095,3624,2890],{"class":1108},[1095,3626,1812],{"class":1138},[1095,3628,1185],{"class":1184},[1095,3630,3231],{"class":1188},[1095,3632,1185],{"class":1184},[1095,3634,1809],{"class":1138},[1095,3636,3292],{"class":1112},[1095,3638,1194],{"class":1138},[1095,3640,1197],{"class":1184},[1095,3642,2915],{"class":1188},[1095,3644,1185],{"class":1184},[1095,3646,1809],{"class":1138},[1095,3648,1197],{"class":1184},[1095,3650,2924],{"class":1188},[1095,3652,1185],{"class":1184},[1095,3654,1194],{"class":1138},[1095,3656,1197],{"class":1184},[1095,3658,3659],{"class":1188},"operation",[1095,3661,1185],{"class":1184},[1095,3663,1809],{"class":1138},[1095,3665,3155],{"class":1112},[1095,3667,1926],{"class":1138},[1061,3669,3671],{"id":3670},"integrating-tasks-with-async-views","Integrating Tasks with Async Views",[1066,3673,3675],{"className":1089,"code":3674,"language":1091,"meta":1075,"style":1075},"# views.py\nimport json\nfrom django.http import JsonResponse\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\nfrom asgiref.sync import sync_to_async\nfrom .tasks import send_email_task, process_document_async, batch_process_users\n\nclass AsyncTaskView(View):\n    \"\"\"Base class for async views that trigger tasks\"\"\"\n    \n    async def dispatch(self, request, *args, **kwargs):\n        \"\"\"Async dispatch method\"\"\"\n        return await super().dispatch(request, *args, **kwargs)\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass DocumentProcessingView(AsyncTaskView):\n    \"\"\"Async view for document processing\"\"\"\n    \n    async def post(self, request):\n        try:\n            data = json.loads(request.body)\n            document_id = data.get('document_id')\n            \n            if not document_id:\n                return JsonResponse({'error': 'document_id required'}, status=400)\n            \n            # Trigger async task\n            task = await sync_to_async(process_document_async.delay)(document_id)\n            \n            return JsonResponse({\n                'task_id': task.id,\n                'status': 'processing',\n                'message': 'Document processing started'\n            })\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n\nclass BatchUserProcessingView(AsyncTaskView):\n    \"\"\"Async view for batch user processing\"\"\"\n    \n    async def post(self, request):\n        try:\n            data = json.loads(request.body)\n            user_ids = data.get('user_ids', [])\n            operation = data.get('operation')\n            \n            if not user_ids or not operation:\n                return JsonResponse({\n                    'error': 'user_ids and operation required'\n                }, status=400)\n            \n            # Trigger batch processing task\n            task = await sync_to_async(batch_process_users.delay)(user_ids, operation)\n            \n            return JsonResponse({\n                'task_id': task.id,\n                'status': 'processing',\n                'user_count': len(user_ids),\n                'operation': operation\n            })\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n\nclass TaskStatusView(AsyncTaskView):\n    \"\"\"Check task status asynchronously\"\"\"\n    \n    async def get(self, request, task_id):\n        try:\n            from celery.result import AsyncResult\n            \n            # Get task result asynchronously\n            result = AsyncResult(task_id)\n            \n            response_data = {\n                'task_id': task_id,\n                'status': result.status,\n                'ready': result.ready()\n            }\n            \n            if result.ready():\n                if result.successful():\n                    response_data['result'] = result.result\n                else:\n                    response_data['error'] = str(result.result)\n            else:\n                response_data['progress'] = getattr(result.result, 'current', 0) if result.result else 0\n            \n            return JsonResponse(response_data)\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n",[1073,3676,3677,3682,3689,3705,3731,3752,3768,3782,3804,3808,3825,3834,3838,3872,3882,3915,3919,3946,3960,3969,3973,3992,3998,4024,4048,4053,4064,4102,4106,4111,4138,4142,4151,4172,4191,4208,4213,4217,4230,4265,4269,4282,4291,4295,4313,4319,4341,4368,4391,4395,4413,4421,4439,4452,4456,4461,4490,4494,4502,4520,4538,4557,4570,4574,4578,4590,4622,4626,4639,4648,4652,4676,4682,4700,4704,4709,4724,4728,4737,4751,4770,4789,4794,4798,4811,4824,4850,4857,4885,4892,4952,4956,4969,4973,4985],{"__ignoreMap":1075},[1095,3678,3679],{"class":1097,"line":1098},[1095,3680,3681],{"class":1101},"# views.py\n",[1095,3683,3684,3686],{"class":1097,"line":1105},[1095,3685,1109],{"class":1108},[1095,3687,3688],{"class":1112}," json\n",[1095,3690,3691,3693,3695,3697,3700,3702],{"class":1097,"line":1116},[1095,3692,1119],{"class":1108},[1095,3694,1135],{"class":1112},[1095,3696,1139],{"class":1138},[1095,3698,3699],{"class":1112},"http ",[1095,3701,1109],{"class":1108},[1095,3703,3704],{"class":1112}," JsonResponse\n",[1095,3706,3707,3709,3711,3713,3716,3718,3721,3723,3726,3728],{"class":1097,"line":1130},[1095,3708,1119],{"class":1108},[1095,3710,1135],{"class":1112},[1095,3712,1139],{"class":1138},[1095,3714,3715],{"class":1112},"views",[1095,3717,1139],{"class":1138},[1095,3719,3720],{"class":1112},"decorators",[1095,3722,1139],{"class":1138},[1095,3724,3725],{"class":1112},"csrf ",[1095,3727,1109],{"class":1108},[1095,3729,3730],{"class":1112}," csrf_exempt\n",[1095,3732,3733,3735,3737,3739,3742,3744,3747,3749],{"class":1097,"line":1150},[1095,3734,1119],{"class":1108},[1095,3736,1135],{"class":1112},[1095,3738,1139],{"class":1138},[1095,3740,3741],{"class":1112},"utils",[1095,3743,1139],{"class":1138},[1095,3745,3746],{"class":1112},"decorators ",[1095,3748,1109],{"class":1108},[1095,3750,3751],{"class":1112}," method_decorator\n",[1095,3753,3754,3756,3758,3760,3763,3765],{"class":1097,"line":1157},[1095,3755,1119],{"class":1108},[1095,3757,1135],{"class":1112},[1095,3759,1139],{"class":1138},[1095,3761,3762],{"class":1112},"views ",[1095,3764,1109],{"class":1108},[1095,3766,3767],{"class":1112}," View\n",[1095,3769,3770,3772,3774,3776,3778,3780],{"class":1097,"line":1163},[1095,3771,1119],{"class":1108},[1095,3773,2243],{"class":1112},[1095,3775,1139],{"class":1138},[1095,3777,2248],{"class":1112},[1095,3779,1109],{"class":1108},[1095,3781,2253],{"class":1112},[1095,3783,3784,3786,3788,3791,3793,3795,3797,3799,3801],{"class":1097,"line":1208},[1095,3785,1119],{"class":1108},[1095,3787,2260],{"class":1138},[1095,3789,3790],{"class":1112},"tasks ",[1095,3792,1109],{"class":1108},[1095,3794,2310],{"class":1112},[1095,3796,1194],{"class":1138},[1095,3798,2560],{"class":1112},[1095,3800,1194],{"class":1138},[1095,3802,3803],{"class":1112}," batch_process_users\n",[1095,3805,3806],{"class":1097,"line":1213},[1095,3807,1154],{"emptyLinePlaceholder":1153},[1095,3809,3810,3813,3817,3819,3823],{"class":1097,"line":1219},[1095,3811,3812],{"class":1546},"class",[1095,3814,3816],{"class":3815},"sD-vU"," AsyncTaskView",[1095,3818,1181],{"class":1138},[1095,3820,3822],{"class":3821},"sYn-s","View",[1095,3824,1559],{"class":1138},[1095,3826,3827,3829,3832],{"class":1097,"line":1242},[1095,3828,2338],{"class":2337},[1095,3830,3831],{"class":2341},"Base class for async views that trigger tasks",[1095,3833,2345],{"class":2337},[1095,3835,3836],{"class":1097,"line":1247},[1095,3837,2743],{"class":1112},[1095,3839,3840,3842,3844,3847,3849,3851,3853,3856,3858,3860,3863,3865,3867,3870],{"class":1097,"line":1253},[1095,3841,2755],{"class":1546},[1095,3843,2675],{"class":1546},[1095,3845,3846],{"class":1524}," dispatch",[1095,3848,1181],{"class":1138},[1095,3850,1556],{"class":1555},[1095,3852,1194],{"class":1138},[1095,3854,3855],{"class":2319}," request",[1095,3857,1194],{"class":1138},[1095,3859,1451],{"class":1450},[1095,3861,3862],{"class":2319},"args",[1095,3864,1194],{"class":1138},[1095,3866,2519],{"class":1450},[1095,3868,3869],{"class":2319},"kwargs",[1095,3871,1559],{"class":1138},[1095,3873,3874,3877,3880],{"class":1097,"line":1290},[1095,3875,3876],{"class":2337},"        \"\"\"",[1095,3878,3879],{"class":2341},"Async dispatch method",[1095,3881,2345],{"class":2337},[1095,3883,3884,3886,3888,3891,3894,3897,3899,3901,3903,3905,3907,3909,3911,3913],{"class":1097,"line":1295},[1095,3885,2432],{"class":1108},[1095,3887,2708],{"class":1108},[1095,3889,3890],{"class":2463}," super",[1095,3892,3893],{"class":1138},"().",[1095,3895,3896],{"class":1177},"dispatch",[1095,3898,1181],{"class":1138},[1095,3900,1586],{"class":1177},[1095,3902,1194],{"class":1138},[1095,3904,1451],{"class":1450},[1095,3906,3862],{"class":1177},[1095,3908,1194],{"class":1138},[1095,3910,2519],{"class":1450},[1095,3912,3869],{"class":1177},[1095,3914,1205],{"class":1138},[1095,3916,3917],{"class":1097,"line":1301},[1095,3918,1154],{"emptyLinePlaceholder":1153},[1095,3920,3921,3923,3926,3928,3931,3933,3936,3938,3940,3942,3944],{"class":1097,"line":1314},[1095,3922,1521],{"class":1138},[1095,3924,3925],{"class":1524},"method_decorator",[1095,3927,1181],{"class":1138},[1095,3929,3930],{"class":1177},"csrf_exempt",[1095,3932,1194],{"class":1138},[1095,3934,3935],{"class":1275}," name",[1095,3937,1225],{"class":1138},[1095,3939,1185],{"class":1184},[1095,3941,3896],{"class":1188},[1095,3943,1185],{"class":1184},[1095,3945,1205],{"class":1138},[1095,3947,3948,3950,3953,3955,3958],{"class":1097,"line":1319},[1095,3949,3812],{"class":1546},[1095,3951,3952],{"class":3815}," DocumentProcessingView",[1095,3954,1181],{"class":1138},[1095,3956,3957],{"class":3821},"AsyncTaskView",[1095,3959,1559],{"class":1138},[1095,3961,3962,3964,3967],{"class":1097,"line":1325},[1095,3963,2338],{"class":2337},[1095,3965,3966],{"class":2341},"Async view for document processing",[1095,3968,2345],{"class":2337},[1095,3970,3971],{"class":1097,"line":1343},[1095,3972,2743],{"class":1112},[1095,3974,3975,3977,3979,3982,3984,3986,3988,3990],{"class":1097,"line":1361},[1095,3976,2755],{"class":1546},[1095,3978,2675],{"class":1546},[1095,3980,3981],{"class":1524}," post",[1095,3983,1181],{"class":1138},[1095,3985,1556],{"class":1555},[1095,3987,1194],{"class":1138},[1095,3989,3855],{"class":2319},[1095,3991,1559],{"class":1138},[1095,3993,3994,3996],{"class":1097,"line":1379},[1095,3995,3205],{"class":1108},[1095,3997,2353],{"class":1138},[1095,3999,4000,4003,4005,4008,4010,4013,4015,4017,4019,4022],{"class":1097,"line":1395},[1095,4001,4002],{"class":1112},"            data ",[1095,4004,1225],{"class":1138},[1095,4006,4007],{"class":1112}," json",[1095,4009,1139],{"class":1138},[1095,4011,4012],{"class":1177},"loads",[1095,4014,1181],{"class":1138},[1095,4016,1586],{"class":1177},[1095,4018,1139],{"class":1138},[1095,4020,4021],{"class":1171},"body",[1095,4023,1205],{"class":1138},[1095,4025,4026,4029,4031,4034,4036,4038,4040,4042,4044,4046],{"class":1097,"line":1412},[1095,4027,4028],{"class":1112},"            document_id ",[1095,4030,1225],{"class":1138},[1095,4032,4033],{"class":1112}," data",[1095,4035,1139],{"class":1138},[1095,4037,1645],{"class":1177},[1095,4039,1181],{"class":1138},[1095,4041,1185],{"class":1184},[1095,4043,2613],{"class":1188},[1095,4045,1185],{"class":1184},[1095,4047,1205],{"class":1138},[1095,4049,4050],{"class":1097,"line":1426},[1095,4051,4052],{"class":1112},"            \n",[1095,4054,4055,4058,4060,4062],{"class":1097,"line":1438},[1095,4056,4057],{"class":1108},"            if",[1095,4059,3389],{"class":1450},[1095,4061,2569],{"class":1112},[1095,4063,2353],{"class":1138},[1095,4065,4066,4069,4072,4074,4076,4078,4080,4082,4084,4087,4089,4092,4095,4097,4100],{"class":1097,"line":1462},[1095,4067,4068],{"class":1108},"                return",[1095,4070,4071],{"class":1177}," JsonResponse",[1095,4073,3281],{"class":1138},[1095,4075,1185],{"class":1184},[1095,4077,2638],{"class":1188},[1095,4079,1185],{"class":1184},[1095,4081,1809],{"class":1138},[1095,4083,1197],{"class":1184},[1095,4085,4086],{"class":1188},"document_id required",[1095,4088,1185],{"class":1184},[1095,4090,4091],{"class":1138},"},",[1095,4093,4094],{"class":1275}," status",[1095,4096,1225],{"class":1138},[1095,4098,4099],{"class":1446},"400",[1095,4101,1205],{"class":1138},[1095,4103,4104],{"class":1097,"line":1482},[1095,4105,4052],{"class":1112},[1095,4107,4108],{"class":1097,"line":1495},[1095,4109,4110],{"class":1101},"            # Trigger async task\n",[1095,4112,4113,4116,4118,4120,4122,4124,4127,4129,4132,4134,4136],{"class":1097,"line":1508},[1095,4114,4115],{"class":1112},"            task ",[1095,4117,1225],{"class":1138},[1095,4119,2708],{"class":1108},[1095,4121,2711],{"class":1177},[1095,4123,1181],{"class":1138},[1095,4125,4126],{"class":1177},"process_document_async",[1095,4128,1139],{"class":1138},[1095,4130,4131],{"class":1171},"delay",[1095,4133,2728],{"class":1138},[1095,4135,2613],{"class":1177},[1095,4137,1205],{"class":1138},[1095,4139,4140],{"class":1097,"line":1513},[1095,4141,4052],{"class":1112},[1095,4143,4144,4146,4148],{"class":1097,"line":1518},[1095,4145,3101],{"class":1108},[1095,4147,4071],{"class":1177},[1095,4149,4150],{"class":1138},"({\n",[1095,4152,4153,4156,4159,4161,4163,4166,4168,4170],{"class":1097,"line":1543},[1095,4154,4155],{"class":1184},"                '",[1095,4157,4158],{"class":1188},"task_id",[1095,4160,1185],{"class":1184},[1095,4162,1809],{"class":1138},[1095,4164,4165],{"class":1177}," task",[1095,4167,1139],{"class":1138},[1095,4169,2731],{"class":1171},[1095,4171,1358],{"class":1138},[1095,4173,4174,4176,4178,4180,4182,4184,4187,4189],{"class":1097,"line":1562},[1095,4175,4155],{"class":1184},[1095,4177,2915],{"class":1188},[1095,4179,1185],{"class":1184},[1095,4181,1809],{"class":1138},[1095,4183,1197],{"class":1184},[1095,4185,4186],{"class":1188},"processing",[1095,4188,1185],{"class":1184},[1095,4190,1358],{"class":1138},[1095,4192,4193,4195,4197,4199,4201,4203,4206],{"class":1097,"line":2062},[1095,4194,4155],{"class":1184},[1095,4196,2382],{"class":1188},[1095,4198,1185],{"class":1184},[1095,4200,1809],{"class":1138},[1095,4202,1197],{"class":1184},[1095,4204,4205],{"class":1188},"Document processing started",[1095,4207,1722],{"class":1184},[1095,4209,4210],{"class":1097,"line":2076},[1095,4211,4212],{"class":1138},"            })\n",[1095,4214,4215],{"class":1097,"line":2096},[1095,4216,4052],{"class":1112},[1095,4218,4219,4221,4223,4225,4228],{"class":1097,"line":2136},[1095,4220,3261],{"class":1108},[1095,4222,2464],{"class":2463},[1095,4224,2467],{"class":1108},[1095,4226,4227],{"class":1112}," e",[1095,4229,2353],{"class":1138},[1095,4231,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4253,4256,4258,4260,4263],{"class":1097,"line":2141},[1095,4233,3101],{"class":1108},[1095,4235,4071],{"class":1177},[1095,4237,3281],{"class":1138},[1095,4239,1185],{"class":1184},[1095,4241,2638],{"class":1188},[1095,4243,1185],{"class":1184},[1095,4245,1809],{"class":1138},[1095,4247,2645],{"class":2463},[1095,4249,1181],{"class":1138},[1095,4251,4252],{"class":1177},"e",[1095,4254,4255],{"class":1138},")},",[1095,4257,4094],{"class":1275},[1095,4259,1225],{"class":1138},[1095,4261,4262],{"class":1446},"500",[1095,4264,1205],{"class":1138},[1095,4266,4267],{"class":1097,"line":2740},[1095,4268,1154],{"emptyLinePlaceholder":1153},[1095,4270,4271,4273,4276,4278,4280],{"class":1097,"line":2746},[1095,4272,3812],{"class":1546},[1095,4274,4275],{"class":3815}," BatchUserProcessingView",[1095,4277,1181],{"class":1138},[1095,4279,3957],{"class":3821},[1095,4281,1559],{"class":1138},[1095,4283,4284,4286,4289],{"class":1097,"line":2752},[1095,4285,2338],{"class":2337},[1095,4287,4288],{"class":2341},"Async view for batch user processing",[1095,4290,2345],{"class":2337},[1095,4292,4293],{"class":1097,"line":2801},[1095,4294,2743],{"class":1112},[1095,4296,4297,4299,4301,4303,4305,4307,4309,4311],{"class":1097,"line":2820},[1095,4298,2755],{"class":1546},[1095,4300,2675],{"class":1546},[1095,4302,3981],{"class":1524},[1095,4304,1181],{"class":1138},[1095,4306,1556],{"class":1555},[1095,4308,1194],{"class":1138},[1095,4310,3855],{"class":2319},[1095,4312,1559],{"class":1138},[1095,4314,4315,4317],{"class":1097,"line":2825},[1095,4316,3205],{"class":1108},[1095,4318,2353],{"class":1138},[1095,4320,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339],{"class":1097,"line":2831},[1095,4322,4002],{"class":1112},[1095,4324,1225],{"class":1138},[1095,4326,4007],{"class":1112},[1095,4328,1139],{"class":1138},[1095,4330,4012],{"class":1177},[1095,4332,1181],{"class":1138},[1095,4334,1586],{"class":1177},[1095,4336,1139],{"class":1138},[1095,4338,4021],{"class":1171},[1095,4340,1205],{"class":1138},[1095,4342,4343,4346,4348,4350,4352,4354,4356,4358,4361,4363,4365],{"class":1097,"line":2851},[1095,4344,4345],{"class":1112},"            user_ids ",[1095,4347,1225],{"class":1138},[1095,4349,4033],{"class":1112},[1095,4351,1139],{"class":1138},[1095,4353,1645],{"class":1177},[1095,4355,1181],{"class":1138},[1095,4357,1185],{"class":1184},[1095,4359,4360],{"class":1188},"user_ids",[1095,4362,1185],{"class":1184},[1095,4364,1194],{"class":1138},[1095,4366,4367],{"class":1138}," [])\n",[1095,4369,4370,4373,4375,4377,4379,4381,4383,4385,4387,4389],{"class":1097,"line":2856},[1095,4371,4372],{"class":1112},"            operation ",[1095,4374,1225],{"class":1138},[1095,4376,4033],{"class":1112},[1095,4378,1139],{"class":1138},[1095,4380,1645],{"class":1177},[1095,4382,1181],{"class":1138},[1095,4384,1185],{"class":1184},[1095,4386,3659],{"class":1188},[1095,4388,1185],{"class":1184},[1095,4390,1205],{"class":1138},[1095,4392,4393],{"class":1097,"line":2862},[1095,4394,4052],{"class":1112},[1095,4396,4397,4399,4401,4404,4407,4409,4411],{"class":1097,"line":2882},[1095,4398,4057],{"class":1108},[1095,4400,3389],{"class":1450},[1095,4402,4403],{"class":1112}," user_ids ",[1095,4405,4406],{"class":1450},"or",[1095,4408,3389],{"class":1450},[1095,4410,3155],{"class":1112},[1095,4412,2353],{"class":1138},[1095,4414,4415,4417,4419],{"class":1097,"line":2887},[1095,4416,4068],{"class":1108},[1095,4418,4071],{"class":1177},[1095,4420,4150],{"class":1138},[1095,4422,4423,4426,4428,4430,4432,4434,4437],{"class":1097,"line":2895},[1095,4424,4425],{"class":1184},"                    '",[1095,4427,2638],{"class":1188},[1095,4429,1185],{"class":1184},[1095,4431,1809],{"class":1138},[1095,4433,1197],{"class":1184},[1095,4435,4436],{"class":1188},"user_ids and operation required",[1095,4438,1722],{"class":1184},[1095,4440,4441,4444,4446,4448,4450],{"class":1097,"line":2910},[1095,4442,4443],{"class":1138},"                },",[1095,4445,4094],{"class":1275},[1095,4447,1225],{"class":1138},[1095,4449,4099],{"class":1446},[1095,4451,1205],{"class":1138},[1095,4453,4454],{"class":1097,"line":2931},[1095,4455,4052],{"class":1112},[1095,4457,4458],{"class":1097,"line":2946},[1095,4459,4460],{"class":1101},"            # Trigger batch processing task\n",[1095,4462,4463,4465,4467,4469,4471,4473,4476,4478,4480,4482,4484,4486,4488],{"class":1097,"line":2952},[1095,4464,4115],{"class":1112},[1095,4466,1225],{"class":1138},[1095,4468,2708],{"class":1108},[1095,4470,2711],{"class":1177},[1095,4472,1181],{"class":1138},[1095,4474,4475],{"class":1177},"batch_process_users",[1095,4477,1139],{"class":1138},[1095,4479,4131],{"class":1171},[1095,4481,2728],{"class":1138},[1095,4483,4360],{"class":1177},[1095,4485,1194],{"class":1138},[1095,4487,3155],{"class":1177},[1095,4489,1205],{"class":1138},[1095,4491,4492],{"class":1097,"line":2957},[1095,4493,4052],{"class":1112},[1095,4495,4496,4498,4500],{"class":1097,"line":2972},[1095,4497,3101],{"class":1108},[1095,4499,4071],{"class":1177},[1095,4501,4150],{"class":1138},[1095,4503,4504,4506,4508,4510,4512,4514,4516,4518],{"class":1097,"line":2982},[1095,4505,4155],{"class":1184},[1095,4507,4158],{"class":1188},[1095,4509,1185],{"class":1184},[1095,4511,1809],{"class":1138},[1095,4513,4165],{"class":1177},[1095,4515,1139],{"class":1138},[1095,4517,2731],{"class":1171},[1095,4519,1358],{"class":1138},[1095,4521,4522,4524,4526,4528,4530,4532,4534,4536],{"class":1097,"line":3007},[1095,4523,4155],{"class":1184},[1095,4525,2915],{"class":1188},[1095,4527,1185],{"class":1184},[1095,4529,1809],{"class":1138},[1095,4531,1197],{"class":1184},[1095,4533,4186],{"class":1188},[1095,4535,1185],{"class":1184},[1095,4537,1358],{"class":1138},[1095,4539,4540,4542,4545,4547,4549,4551,4553,4555],{"class":1097,"line":3024},[1095,4541,4155],{"class":1184},[1095,4543,4544],{"class":1188},"user_count",[1095,4546,1185],{"class":1184},[1095,4548,1809],{"class":1138},[1095,4550,3338],{"class":1565},[1095,4552,1181],{"class":1138},[1095,4554,4360],{"class":1177},[1095,4556,3346],{"class":1138},[1095,4558,4559,4561,4563,4565,4567],{"class":1097,"line":3037},[1095,4560,4155],{"class":1184},[1095,4562,3659],{"class":1188},[1095,4564,1185],{"class":1184},[1095,4566,1809],{"class":1138},[1095,4568,4569],{"class":1177}," operation\n",[1095,4571,4572],{"class":1097,"line":3059},[1095,4573,4212],{"class":1138},[1095,4575,4576],{"class":1097,"line":3085},[1095,4577,4052],{"class":1112},[1095,4579,4580,4582,4584,4586,4588],{"class":1097,"line":3098},[1095,4581,3261],{"class":1108},[1095,4583,2464],{"class":2463},[1095,4585,2467],{"class":1108},[1095,4587,4227],{"class":1112},[1095,4589,2353],{"class":1138},[1095,4591,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620],{"class":1097,"line":3114},[1095,4593,3101],{"class":1108},[1095,4595,4071],{"class":1177},[1095,4597,3281],{"class":1138},[1095,4599,1185],{"class":1184},[1095,4601,2638],{"class":1188},[1095,4603,1185],{"class":1184},[1095,4605,1809],{"class":1138},[1095,4607,2645],{"class":2463},[1095,4609,1181],{"class":1138},[1095,4611,4252],{"class":1177},[1095,4613,4255],{"class":1138},[1095,4615,4094],{"class":1275},[1095,4617,1225],{"class":1138},[1095,4619,4262],{"class":1446},[1095,4621,1205],{"class":1138},[1095,4623,4624],{"class":1097,"line":3119},[1095,4625,1154],{"emptyLinePlaceholder":1153},[1095,4627,4628,4630,4633,4635,4637],{"class":1097,"line":3136},[1095,4629,3812],{"class":1546},[1095,4631,4632],{"class":3815}," TaskStatusView",[1095,4634,1181],{"class":1138},[1095,4636,3957],{"class":3821},[1095,4638,1559],{"class":1138},[1095,4640,4641,4643,4646],{"class":1097,"line":3160},[1095,4642,2338],{"class":2337},[1095,4644,4645],{"class":2341},"Check task status asynchronously",[1095,4647,2345],{"class":2337},[1095,4649,4650],{"class":1097,"line":3170},[1095,4651,2743],{"class":1112},[1095,4653,4654,4656,4658,4661,4663,4665,4667,4669,4671,4674],{"class":1097,"line":3181},[1095,4655,2755],{"class":1546},[1095,4657,2675],{"class":1546},[1095,4659,4660],{"class":1524}," get",[1095,4662,1181],{"class":1138},[1095,4664,1556],{"class":1555},[1095,4666,1194],{"class":1138},[1095,4668,3855],{"class":2319},[1095,4670,1194],{"class":1138},[1095,4672,4673],{"class":2319}," task_id",[1095,4675,1559],{"class":1138},[1095,4677,4678,4680],{"class":1097,"line":3186},[1095,4679,3205],{"class":1108},[1095,4681,2353],{"class":1138},[1095,4683,4684,4687,4690,4692,4695,4697],{"class":1097,"line":3202},[1095,4685,4686],{"class":1108},"            from",[1095,4688,4689],{"class":1112}," celery",[1095,4691,1139],{"class":1138},[1095,4693,4694],{"class":1112},"result ",[1095,4696,1109],{"class":1108},[1095,4698,4699],{"class":1112}," AsyncResult\n",[1095,4701,4702],{"class":1097,"line":3210},[1095,4703,4052],{"class":1112},[1095,4705,4706],{"class":1097,"line":3240},[1095,4707,4708],{"class":1101},"            # Get task result asynchronously\n",[1095,4710,4711,4713,4715,4718,4720,4722],{"class":1097,"line":3258},[1095,4712,3213],{"class":1112},[1095,4714,1225],{"class":1138},[1095,4716,4717],{"class":1177}," AsyncResult",[1095,4719,1181],{"class":1138},[1095,4721,4158],{"class":1177},[1095,4723,1205],{"class":1138},[1095,4725,4726],{"class":1097,"line":3272},[1095,4727,4052],{"class":1112},[1095,4729,4730,4733,4735],{"class":1097,"line":3314},[1095,4731,4732],{"class":1112},"            response_data ",[1095,4734,1225],{"class":1138},[1095,4736,1796],{"class":1138},[1095,4738,4739,4741,4743,4745,4747,4749],{"class":1097,"line":3319},[1095,4740,4155],{"class":1184},[1095,4742,4158],{"class":1188},[1095,4744,1185],{"class":1184},[1095,4746,1809],{"class":1138},[1095,4748,4673],{"class":1112},[1095,4750,1358],{"class":1138},[1095,4752,4753,4755,4757,4759,4761,4764,4766,4768],{"class":1097,"line":3326},[1095,4754,4155],{"class":1184},[1095,4756,2915],{"class":1188},[1095,4758,1185],{"class":1184},[1095,4760,1809],{"class":1138},[1095,4762,4763],{"class":1112}," result",[1095,4765,1139],{"class":1138},[1095,4767,2915],{"class":1171},[1095,4769,1358],{"class":1138},[1095,4771,4772,4774,4777,4779,4781,4783,4785,4787],{"class":1097,"line":3349},[1095,4773,4155],{"class":1184},[1095,4775,4776],{"class":1188},"ready",[1095,4778,1185],{"class":1184},[1095,4780,1809],{"class":1138},[1095,4782,4763],{"class":1112},[1095,4784,1139],{"class":1138},[1095,4786,4776],{"class":1177},[1095,4788,1311],{"class":1138},[1095,4790,4791],{"class":1097,"line":3401},[1095,4792,4793],{"class":1138},"            }\n",[1095,4795,4796],{"class":1097,"line":3441},[1095,4797,4052],{"class":1112},[1095,4799,4800,4802,4804,4806,4808],{"class":1097,"line":3455},[1095,4801,4057],{"class":1108},[1095,4803,4763],{"class":1112},[1095,4805,1139],{"class":1138},[1095,4807,4776],{"class":1177},[1095,4809,4810],{"class":1138},"():\n",[1095,4812,4813,4816,4818,4820,4822],{"class":1097,"line":3460},[1095,4814,4815],{"class":1108},"                if",[1095,4817,4763],{"class":1112},[1095,4819,1139],{"class":1138},[1095,4821,3354],{"class":1177},[1095,4823,4810],{"class":1138},[1095,4825,4826,4829,4832,4834,4836,4838,4841,4843,4845,4847],{"class":1097,"line":3465},[1095,4827,4828],{"class":1112},"                    response_data",[1095,4830,4831],{"class":1138},"[",[1095,4833,1185],{"class":1184},[1095,4835,3253],{"class":1188},[1095,4837,1185],{"class":1184},[1095,4839,4840],{"class":1138},"]",[1095,4842,1633],{"class":1138},[1095,4844,4763],{"class":1112},[1095,4846,1139],{"class":1138},[1095,4848,4849],{"class":1171},"result\n",[1095,4851,4852,4855],{"class":1097,"line":3485},[1095,4853,4854],{"class":1108},"                else",[1095,4856,2353],{"class":1138},[1095,4858,4859,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879,4881,4883],{"class":1097,"line":3495},[1095,4860,4828],{"class":1112},[1095,4862,4831],{"class":1138},[1095,4864,1185],{"class":1184},[1095,4866,2638],{"class":1188},[1095,4868,1185],{"class":1184},[1095,4870,4840],{"class":1138},[1095,4872,1633],{"class":1138},[1095,4874,2645],{"class":2463},[1095,4876,1181],{"class":1138},[1095,4878,3253],{"class":1177},[1095,4880,1139],{"class":1138},[1095,4882,3253],{"class":1171},[1095,4884,1205],{"class":1138},[1095,4886,4887,4890],{"class":1097,"line":3530},[1095,4888,4889],{"class":1108},"            else",[1095,4891,2353],{"class":1138},[1095,4893,4894,4897,4899,4901,4904,4906,4908,4910,4913,4915,4917,4919,4921,4923,4925,4928,4930,4932,4935,4937,4940,4942,4944,4946,4949],{"class":1097,"line":3535},[1095,4895,4896],{"class":1112},"                response_data",[1095,4898,4831],{"class":1138},[1095,4900,1185],{"class":1184},[1095,4902,4903],{"class":1188},"progress",[1095,4905,1185],{"class":1184},[1095,4907,4840],{"class":1138},[1095,4909,1633],{"class":1138},[1095,4911,4912],{"class":1565}," getattr",[1095,4914,1181],{"class":1138},[1095,4916,3253],{"class":1177},[1095,4918,1139],{"class":1138},[1095,4920,3253],{"class":1171},[1095,4922,1194],{"class":1138},[1095,4924,1197],{"class":1184},[1095,4926,4927],{"class":1188},"current",[1095,4929,1185],{"class":1184},[1095,4931,1194],{"class":1138},[1095,4933,4934],{"class":1446}," 0",[1095,4936,2450],{"class":1138},[1095,4938,4939],{"class":1108}," if",[1095,4941,4763],{"class":1112},[1095,4943,1139],{"class":1138},[1095,4945,3253],{"class":1171},[1095,4947,4948],{"class":1108}," else",[1095,4950,4951],{"class":1446}," 0\n",[1095,4953,4954],{"class":1097,"line":3556},[1095,4955,4052],{"class":1112},[1095,4957,4958,4960,4962,4964,4967],{"class":1097,"line":3562},[1095,4959,3101],{"class":1108},[1095,4961,4071],{"class":1177},[1095,4963,1181],{"class":1138},[1095,4965,4966],{"class":1177},"response_data",[1095,4968,1205],{"class":1138},[1095,4970,4971],{"class":1097,"line":3578},[1095,4972,4052],{"class":1112},[1095,4974,4975,4977,4979,4981,4983],{"class":1097,"line":3597},[1095,4976,3261],{"class":1108},[1095,4978,2464],{"class":2463},[1095,4980,2467],{"class":1108},[1095,4982,4227],{"class":1112},[1095,4984,2353],{"class":1138},[1095,4986,4987,4989,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015],{"class":1097,"line":3603},[1095,4988,3101],{"class":1108},[1095,4990,4071],{"class":1177},[1095,4992,3281],{"class":1138},[1095,4994,1185],{"class":1184},[1095,4996,2638],{"class":1188},[1095,4998,1185],{"class":1184},[1095,5000,1809],{"class":1138},[1095,5002,2645],{"class":2463},[1095,5004,1181],{"class":1138},[1095,5006,4252],{"class":1177},[1095,5008,4255],{"class":1138},[1095,5010,4094],{"class":1275},[1095,5012,1225],{"class":1138},[1095,5014,4262],{"class":1446},[1095,5016,1205],{"class":1138},[1061,5018,5020],{"id":5019},"websocket-integration-with-tasks","WebSocket Integration with Tasks",[1066,5022,5024],{"className":1089,"code":5023,"language":1091,"meta":1075,"style":1075},"# consumers.py\nimport json\nfrom channels.generic.websocket import AsyncWebsocketConsumer\nfrom channels.db import database_sync_to_async\nfrom celery.result import AsyncResult\nfrom .tasks import process_document_async\n\nclass TaskProgressConsumer(AsyncWebsocketConsumer):\n    \"\"\"WebSocket consumer for real-time task progress\"\"\"\n    \n    async def connect(self):\n        self.task_id = self.scope['url_route']['kwargs']['task_id']\n        self.task_group_name = f'task_{self.task_id}'\n        \n        # Join task group\n        await self.channel_layer.group_add(\n            self.task_group_name,\n            self.channel_name\n        )\n        \n        await self.accept()\n        \n        # Start monitoring task\n        await self.monitor_task()\n    \n    async def disconnect(self, close_code):\n        # Leave task group\n        await self.channel_layer.group_discard(\n            self.task_group_name,\n            self.channel_name\n        )\n    \n    async def monitor_task(self):\n        \"\"\"Monitor task progress and send updates\"\"\"\n        result = AsyncResult(self.task_id)\n        \n        while not result.ready():\n            # Send progress update\n            await self.send(text_data=json.dumps({\n                'type': 'task_progress',\n                'task_id': self.task_id,\n                'status': result.status,\n                'progress': getattr(result.result, 'current', 0) if result.result else 0\n            }))\n            \n            # Wait before next check\n            await asyncio.sleep(1)\n        \n        # Send final result\n        if result.successful():\n            await self.send(text_data=json.dumps({\n                'type': 'task_complete',\n                'task_id': self.task_id,\n                'status': 'SUCCESS',\n                'result': result.result\n            }))\n        else:\n            await self.send(text_data=json.dumps({\n                'type': 'task_error',\n                'task_id': self.task_id,\n                'status': 'FAILURE',\n                'error': str(result.result)\n            }))\n    \n    async def task_update(self, event):\n        \"\"\"Handle task update from group\"\"\"\n        await self.send(text_data=json.dumps(event['message']))\n\n# Enhanced task with progress reporting\n@shared_task(bind=True)\ndef process_large_dataset(self, dataset_id):\n    \"\"\"Process large dataset with progress updates\"\"\"\n    from channels.layers import get_channel_layer\n    from asgiref.sync import async_to_sync\n    \n    channel_layer = get_channel_layer()\n    task_group = f'task_{self.request.id}'\n    \n    try:\n        # Get dataset\n        dataset = Dataset.objects.get(id=dataset_id)\n        total_items = dataset.items.count()\n        \n        processed = 0\n        for item in dataset.items.all():\n            # Process individual item\n            process_dataset_item(item)\n            processed += 1\n            \n            # Send progress update\n            progress = int((processed / total_items) * 100)\n            async_to_sync(channel_layer.group_send)(task_group, {\n                'type': 'task_update',\n                'message': {\n                    'type': 'progress',\n                    'task_id': self.request.id,\n                    'progress': progress,\n                    'processed': processed,\n                    'total': total_items\n                }\n            })\n            \n            # Update task state\n            self.update_state(\n                state='PROGRESS',\n                meta={'current': processed, 'total': total_items}\n            )\n        \n        return {\n            'status': 'completed',\n            'processed': processed,\n            'total': total_items\n        }\n        \n    except Exception as exc:\n        # Send error update\n        async_to_sync(channel_layer.group_send)(task_group, {\n            'type': 'task_update',\n            'message': {\n                'type': 'error',\n                'task_id': self.request.id,\n                'error': str(exc)\n            }\n        })\n        raise\n",[1073,5025,5026,5031,5037,5059,5075,5089,5102,5106,5120,5129,5133,5148,5194,5222,5227,5232,5250,5261,5270,5274,5278,5291,5295,5300,5313,5317,5337,5342,5359,5369,5377,5381,5385,5400,5409,5428,5432,5447,5452,5480,5500,5518,5536,5582,5587,5591,5596,5613,5617,5622,5635,5659,5678,5696,5715,5731,5735,5742,5766,5785,5803,5822,5844,5848,5852,5872,5881,5919,5923,5928,5944,5962,5971,5988,6003,6007,6019,6046,6050,6056,6061,6090,6112,6116,6125,6148,6153,6165,6175,6179,6183,6214,6237,6256,6268,6286,6308,6323,6340,6355,6361,6366,6371,6377,6389,6406,6438,6444,6449,6456,6475,6490,6503,6509,6514,6527,6533,6555,6574,6587,6606,6629,6648,6653,6659],{"__ignoreMap":1075},[1095,5027,5028],{"class":1097,"line":1098},[1095,5029,5030],{"class":1101},"# consumers.py\n",[1095,5032,5033,5035],{"class":1097,"line":1105},[1095,5034,1109],{"class":1108},[1095,5036,3688],{"class":1112},[1095,5038,5039,5041,5044,5046,5049,5051,5054,5056],{"class":1097,"line":1116},[1095,5040,1119],{"class":1108},[1095,5042,5043],{"class":1112}," channels",[1095,5045,1139],{"class":1138},[1095,5047,5048],{"class":1112},"generic",[1095,5050,1139],{"class":1138},[1095,5052,5053],{"class":1112},"websocket ",[1095,5055,1109],{"class":1108},[1095,5057,5058],{"class":1112}," AsyncWebsocketConsumer\n",[1095,5060,5061,5063,5065,5067,5070,5072],{"class":1097,"line":1130},[1095,5062,1119],{"class":1108},[1095,5064,5043],{"class":1112},[1095,5066,1139],{"class":1138},[1095,5068,5069],{"class":1112},"db ",[1095,5071,1109],{"class":1108},[1095,5073,5074],{"class":1112}," database_sync_to_async\n",[1095,5076,5077,5079,5081,5083,5085,5087],{"class":1097,"line":1150},[1095,5078,1119],{"class":1108},[1095,5080,4689],{"class":1112},[1095,5082,1139],{"class":1138},[1095,5084,4694],{"class":1112},[1095,5086,1109],{"class":1108},[1095,5088,4699],{"class":1112},[1095,5090,5091,5093,5095,5097,5099],{"class":1097,"line":1157},[1095,5092,1119],{"class":1108},[1095,5094,2260],{"class":1138},[1095,5096,3790],{"class":1112},[1095,5098,1109],{"class":1108},[1095,5100,5101],{"class":1112}," process_document_async\n",[1095,5103,5104],{"class":1097,"line":1163},[1095,5105,1154],{"emptyLinePlaceholder":1153},[1095,5107,5108,5110,5113,5115,5118],{"class":1097,"line":1208},[1095,5109,3812],{"class":1546},[1095,5111,5112],{"class":3815}," TaskProgressConsumer",[1095,5114,1181],{"class":1138},[1095,5116,5117],{"class":3821},"AsyncWebsocketConsumer",[1095,5119,1559],{"class":1138},[1095,5121,5122,5124,5127],{"class":1097,"line":1213},[1095,5123,2338],{"class":2337},[1095,5125,5126],{"class":2341},"WebSocket consumer for real-time task progress",[1095,5128,2345],{"class":2337},[1095,5130,5131],{"class":1097,"line":1219},[1095,5132,2743],{"class":1112},[1095,5134,5135,5137,5139,5142,5144,5146],{"class":1097,"line":1242},[1095,5136,2755],{"class":1546},[1095,5138,2675],{"class":1546},[1095,5140,5141],{"class":1524}," connect",[1095,5143,1181],{"class":1138},[1095,5145,1556],{"class":1555},[1095,5147,1559],{"class":1138},[1095,5149,5150,5153,5155,5157,5159,5161,5163,5166,5168,5170,5173,5175,5178,5180,5182,5184,5186,5188,5190,5192],{"class":1097,"line":1247},[1095,5151,5152],{"class":1581},"        self",[1095,5154,1139],{"class":1138},[1095,5156,4158],{"class":1171},[1095,5158,1633],{"class":1138},[1095,5160,2485],{"class":1581},[1095,5162,1139],{"class":1138},[1095,5164,5165],{"class":1171},"scope",[1095,5167,4831],{"class":1138},[1095,5169,1185],{"class":1184},[1095,5171,5172],{"class":1188},"url_route",[1095,5174,1185],{"class":1184},[1095,5176,5177],{"class":1138},"][",[1095,5179,1185],{"class":1184},[1095,5181,3869],{"class":1188},[1095,5183,1185],{"class":1184},[1095,5185,5177],{"class":1138},[1095,5187,1185],{"class":1184},[1095,5189,4158],{"class":1188},[1095,5191,1185],{"class":1184},[1095,5193,1754],{"class":1138},[1095,5195,5196,5198,5200,5203,5205,5207,5210,5212,5214,5216,5218,5220],{"class":1097,"line":1253},[1095,5197,5152],{"class":1581},[1095,5199,1139],{"class":1138},[1095,5201,5202],{"class":1171},"task_group_name",[1095,5204,1633],{"class":1138},[1095,5206,2435],{"class":1546},[1095,5208,5209],{"class":1188},"'task_",[1095,5211,1578],{"class":1577},[1095,5213,1556],{"class":1581},[1095,5215,1139],{"class":1138},[1095,5217,4158],{"class":1171},[1095,5219,1592],{"class":1577},[1095,5221,1722],{"class":1188},[1095,5223,5224],{"class":1097,"line":1290},[1095,5225,5226],{"class":1112},"        \n",[1095,5228,5229],{"class":1097,"line":1295},[1095,5230,5231],{"class":1101},"        # Join task group\n",[1095,5233,5234,5236,5238,5240,5243,5245,5248],{"class":1097,"line":1301},[1095,5235,3565],{"class":1108},[1095,5237,2485],{"class":1581},[1095,5239,1139],{"class":1138},[1095,5241,5242],{"class":1171},"channel_layer",[1095,5244,1139],{"class":1138},[1095,5246,5247],{"class":1177},"group_add",[1095,5249,1340],{"class":1138},[1095,5251,5252,5255,5257,5259],{"class":1097,"line":1314},[1095,5253,5254],{"class":1581},"            self",[1095,5256,1139],{"class":1138},[1095,5258,5202],{"class":1171},[1095,5260,1358],{"class":1138},[1095,5262,5263,5265,5267],{"class":1097,"line":1319},[1095,5264,5254],{"class":1581},[1095,5266,1139],{"class":1138},[1095,5268,5269],{"class":1171},"channel_name\n",[1095,5271,5272],{"class":1097,"line":1325},[1095,5273,2427],{"class":1138},[1095,5275,5276],{"class":1097,"line":1343},[1095,5277,5226],{"class":1112},[1095,5279,5280,5282,5284,5286,5289],{"class":1097,"line":1361},[1095,5281,3565],{"class":1108},[1095,5283,2485],{"class":1581},[1095,5285,1139],{"class":1138},[1095,5287,5288],{"class":1177},"accept",[1095,5290,1311],{"class":1138},[1095,5292,5293],{"class":1097,"line":1379},[1095,5294,5226],{"class":1112},[1095,5296,5297],{"class":1097,"line":1395},[1095,5298,5299],{"class":1101},"        # Start monitoring task\n",[1095,5301,5302,5304,5306,5308,5311],{"class":1097,"line":1412},[1095,5303,3565],{"class":1108},[1095,5305,2485],{"class":1581},[1095,5307,1139],{"class":1138},[1095,5309,5310],{"class":1177},"monitor_task",[1095,5312,1311],{"class":1138},[1095,5314,5315],{"class":1097,"line":1426},[1095,5316,2743],{"class":1112},[1095,5318,5319,5321,5323,5326,5328,5330,5332,5335],{"class":1097,"line":1438},[1095,5320,2755],{"class":1546},[1095,5322,2675],{"class":1546},[1095,5324,5325],{"class":1524}," disconnect",[1095,5327,1181],{"class":1138},[1095,5329,1556],{"class":1555},[1095,5331,1194],{"class":1138},[1095,5333,5334],{"class":2319}," close_code",[1095,5336,1559],{"class":1138},[1095,5338,5339],{"class":1097,"line":1462},[1095,5340,5341],{"class":1101},"        # Leave task group\n",[1095,5343,5344,5346,5348,5350,5352,5354,5357],{"class":1097,"line":1482},[1095,5345,3565],{"class":1108},[1095,5347,2485],{"class":1581},[1095,5349,1139],{"class":1138},[1095,5351,5242],{"class":1171},[1095,5353,1139],{"class":1138},[1095,5355,5356],{"class":1177},"group_discard",[1095,5358,1340],{"class":1138},[1095,5360,5361,5363,5365,5367],{"class":1097,"line":1495},[1095,5362,5254],{"class":1581},[1095,5364,1139],{"class":1138},[1095,5366,5202],{"class":1171},[1095,5368,1358],{"class":1138},[1095,5370,5371,5373,5375],{"class":1097,"line":1508},[1095,5372,5254],{"class":1581},[1095,5374,1139],{"class":1138},[1095,5376,5269],{"class":1171},[1095,5378,5379],{"class":1097,"line":1513},[1095,5380,2427],{"class":1138},[1095,5382,5383],{"class":1097,"line":1518},[1095,5384,2743],{"class":1112},[1095,5386,5387,5389,5391,5394,5396,5398],{"class":1097,"line":1543},[1095,5388,2755],{"class":1546},[1095,5390,2675],{"class":1546},[1095,5392,5393],{"class":1524}," monitor_task",[1095,5395,1181],{"class":1138},[1095,5397,1556],{"class":1555},[1095,5399,1559],{"class":1138},[1095,5401,5402,5404,5407],{"class":1097,"line":1562},[1095,5403,3876],{"class":2337},[1095,5405,5406],{"class":2341},"Monitor task progress and send updates",[1095,5408,2345],{"class":2337},[1095,5410,5411,5414,5416,5418,5420,5422,5424,5426],{"class":1097,"line":2062},[1095,5412,5413],{"class":1112},"        result ",[1095,5415,1225],{"class":1138},[1095,5417,4717],{"class":1177},[1095,5419,1181],{"class":1138},[1095,5421,1556],{"class":1581},[1095,5423,1139],{"class":1138},[1095,5425,4158],{"class":1171},[1095,5427,1205],{"class":1138},[1095,5429,5430],{"class":1097,"line":2076},[1095,5431,5226],{"class":1112},[1095,5433,5434,5437,5439,5441,5443,5445],{"class":1097,"line":2096},[1095,5435,5436],{"class":1108},"        while",[1095,5438,3389],{"class":1450},[1095,5440,4763],{"class":1112},[1095,5442,1139],{"class":1138},[1095,5444,4776],{"class":1177},[1095,5446,4810],{"class":1138},[1095,5448,5449],{"class":1097,"line":2136},[1095,5450,5451],{"class":1101},"            # Send progress update\n",[1095,5453,5454,5457,5459,5461,5464,5466,5469,5471,5473,5475,5478],{"class":1097,"line":2141},[1095,5455,5456],{"class":1108},"            await",[1095,5458,2485],{"class":1581},[1095,5460,1139],{"class":1138},[1095,5462,5463],{"class":1177},"send",[1095,5465,1181],{"class":1138},[1095,5467,5468],{"class":1275},"text_data",[1095,5470,1225],{"class":1138},[1095,5472,1353],{"class":1177},[1095,5474,1139],{"class":1138},[1095,5476,5477],{"class":1177},"dumps",[1095,5479,4150],{"class":1138},[1095,5481,5482,5484,5487,5489,5491,5493,5496,5498],{"class":1097,"line":2740},[1095,5483,4155],{"class":1184},[1095,5485,5486],{"class":1188},"type",[1095,5488,1185],{"class":1184},[1095,5490,1809],{"class":1138},[1095,5492,1197],{"class":1184},[1095,5494,5495],{"class":1188},"task_progress",[1095,5497,1185],{"class":1184},[1095,5499,1358],{"class":1138},[1095,5501,5502,5504,5506,5508,5510,5512,5514,5516],{"class":1097,"line":2746},[1095,5503,4155],{"class":1184},[1095,5505,4158],{"class":1188},[1095,5507,1185],{"class":1184},[1095,5509,1809],{"class":1138},[1095,5511,2485],{"class":1581},[1095,5513,1139],{"class":1138},[1095,5515,4158],{"class":1171},[1095,5517,1358],{"class":1138},[1095,5519,5520,5522,5524,5526,5528,5530,5532,5534],{"class":1097,"line":2752},[1095,5521,4155],{"class":1184},[1095,5523,2915],{"class":1188},[1095,5525,1185],{"class":1184},[1095,5527,1809],{"class":1138},[1095,5529,4763],{"class":1177},[1095,5531,1139],{"class":1138},[1095,5533,2915],{"class":1171},[1095,5535,1358],{"class":1138},[1095,5537,5538,5540,5542,5544,5546,5548,5550,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580],{"class":1097,"line":2801},[1095,5539,4155],{"class":1184},[1095,5541,4903],{"class":1188},[1095,5543,1185],{"class":1184},[1095,5545,1809],{"class":1138},[1095,5547,4912],{"class":1565},[1095,5549,1181],{"class":1138},[1095,5551,3253],{"class":1177},[1095,5553,1139],{"class":1138},[1095,5555,3253],{"class":1171},[1095,5557,1194],{"class":1138},[1095,5559,1197],{"class":1184},[1095,5561,4927],{"class":1188},[1095,5563,1185],{"class":1184},[1095,5565,1194],{"class":1138},[1095,5567,4934],{"class":1446},[1095,5569,2450],{"class":1138},[1095,5571,4939],{"class":1108},[1095,5573,4763],{"class":1177},[1095,5575,1139],{"class":1138},[1095,5577,3253],{"class":1171},[1095,5579,4948],{"class":1108},[1095,5581,4951],{"class":1446},[1095,5583,5584],{"class":1097,"line":2820},[1095,5585,5586],{"class":1138},"            }))\n",[1095,5588,5589],{"class":1097,"line":2825},[1095,5590,4052],{"class":1112},[1095,5592,5593],{"class":1097,"line":2831},[1095,5594,5595],{"class":1101},"            # Wait before next check\n",[1095,5597,5598,5600,5602,5604,5607,5609,5611],{"class":1097,"line":2851},[1095,5599,5456],{"class":1108},[1095,5601,2598],{"class":1112},[1095,5603,1139],{"class":1138},[1095,5605,5606],{"class":1177},"sleep",[1095,5608,1181],{"class":1138},[1095,5610,1490],{"class":1446},[1095,5612,1205],{"class":1138},[1095,5614,5615],{"class":1097,"line":2856},[1095,5616,5226],{"class":1112},[1095,5618,5619],{"class":1097,"line":2862},[1095,5620,5621],{"class":1101},"        # Send final result\n",[1095,5623,5624,5627,5629,5631,5633],{"class":1097,"line":2882},[1095,5625,5626],{"class":1108},"        if",[1095,5628,4763],{"class":1112},[1095,5630,1139],{"class":1138},[1095,5632,3354],{"class":1177},[1095,5634,4810],{"class":1138},[1095,5636,5637,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657],{"class":1097,"line":2887},[1095,5638,5456],{"class":1108},[1095,5640,2485],{"class":1581},[1095,5642,1139],{"class":1138},[1095,5644,5463],{"class":1177},[1095,5646,1181],{"class":1138},[1095,5648,5468],{"class":1275},[1095,5650,1225],{"class":1138},[1095,5652,1353],{"class":1177},[1095,5654,1139],{"class":1138},[1095,5656,5477],{"class":1177},[1095,5658,4150],{"class":1138},[1095,5660,5661,5663,5665,5667,5669,5671,5674,5676],{"class":1097,"line":2895},[1095,5662,4155],{"class":1184},[1095,5664,5486],{"class":1188},[1095,5666,1185],{"class":1184},[1095,5668,1809],{"class":1138},[1095,5670,1197],{"class":1184},[1095,5672,5673],{"class":1188},"task_complete",[1095,5675,1185],{"class":1184},[1095,5677,1358],{"class":1138},[1095,5679,5680,5682,5684,5686,5688,5690,5692,5694],{"class":1097,"line":2910},[1095,5681,4155],{"class":1184},[1095,5683,4158],{"class":1188},[1095,5685,1185],{"class":1184},[1095,5687,1809],{"class":1138},[1095,5689,2485],{"class":1581},[1095,5691,1139],{"class":1138},[1095,5693,4158],{"class":1171},[1095,5695,1358],{"class":1138},[1095,5697,5698,5700,5702,5704,5706,5708,5711,5713],{"class":1097,"line":2931},[1095,5699,4155],{"class":1184},[1095,5701,2915],{"class":1188},[1095,5703,1185],{"class":1184},[1095,5705,1809],{"class":1138},[1095,5707,1197],{"class":1184},[1095,5709,5710],{"class":1188},"SUCCESS",[1095,5712,1185],{"class":1184},[1095,5714,1358],{"class":1138},[1095,5716,5717,5719,5721,5723,5725,5727,5729],{"class":1097,"line":2946},[1095,5718,4155],{"class":1184},[1095,5720,3253],{"class":1188},[1095,5722,1185],{"class":1184},[1095,5724,1809],{"class":1138},[1095,5726,4763],{"class":1177},[1095,5728,1139],{"class":1138},[1095,5730,4849],{"class":1171},[1095,5732,5733],{"class":1097,"line":2952},[1095,5734,5586],{"class":1138},[1095,5736,5737,5740],{"class":1097,"line":2957},[1095,5738,5739],{"class":1108},"        else",[1095,5741,2353],{"class":1138},[1095,5743,5744,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764],{"class":1097,"line":2972},[1095,5745,5456],{"class":1108},[1095,5747,2485],{"class":1581},[1095,5749,1139],{"class":1138},[1095,5751,5463],{"class":1177},[1095,5753,1181],{"class":1138},[1095,5755,5468],{"class":1275},[1095,5757,1225],{"class":1138},[1095,5759,1353],{"class":1177},[1095,5761,1139],{"class":1138},[1095,5763,5477],{"class":1177},[1095,5765,4150],{"class":1138},[1095,5767,5768,5770,5772,5774,5776,5778,5781,5783],{"class":1097,"line":2982},[1095,5769,4155],{"class":1184},[1095,5771,5486],{"class":1188},[1095,5773,1185],{"class":1184},[1095,5775,1809],{"class":1138},[1095,5777,1197],{"class":1184},[1095,5779,5780],{"class":1188},"task_error",[1095,5782,1185],{"class":1184},[1095,5784,1358],{"class":1138},[1095,5786,5787,5789,5791,5793,5795,5797,5799,5801],{"class":1097,"line":3007},[1095,5788,4155],{"class":1184},[1095,5790,4158],{"class":1188},[1095,5792,1185],{"class":1184},[1095,5794,1809],{"class":1138},[1095,5796,2485],{"class":1581},[1095,5798,1139],{"class":1138},[1095,5800,4158],{"class":1171},[1095,5802,1358],{"class":1138},[1095,5804,5805,5807,5809,5811,5813,5815,5818,5820],{"class":1097,"line":3024},[1095,5806,4155],{"class":1184},[1095,5808,2915],{"class":1188},[1095,5810,1185],{"class":1184},[1095,5812,1809],{"class":1138},[1095,5814,1197],{"class":1184},[1095,5816,5817],{"class":1188},"FAILURE",[1095,5819,1185],{"class":1184},[1095,5821,1358],{"class":1138},[1095,5823,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842],{"class":1097,"line":3037},[1095,5825,4155],{"class":1184},[1095,5827,2638],{"class":1188},[1095,5829,1185],{"class":1184},[1095,5831,1809],{"class":1138},[1095,5833,2645],{"class":2463},[1095,5835,1181],{"class":1138},[1095,5837,3253],{"class":1177},[1095,5839,1139],{"class":1138},[1095,5841,3253],{"class":1171},[1095,5843,1205],{"class":1138},[1095,5845,5846],{"class":1097,"line":3059},[1095,5847,5586],{"class":1138},[1095,5849,5850],{"class":1097,"line":3085},[1095,5851,2743],{"class":1112},[1095,5853,5854,5856,5858,5861,5863,5865,5867,5870],{"class":1097,"line":3098},[1095,5855,2755],{"class":1546},[1095,5857,2675],{"class":1546},[1095,5859,5860],{"class":1524}," task_update",[1095,5862,1181],{"class":1138},[1095,5864,1556],{"class":1555},[1095,5866,1194],{"class":1138},[1095,5868,5869],{"class":2319}," event",[1095,5871,1559],{"class":1138},[1095,5873,5874,5876,5879],{"class":1097,"line":3114},[1095,5875,3876],{"class":2337},[1095,5877,5878],{"class":2341},"Handle task update from group",[1095,5880,2345],{"class":2337},[1095,5882,5883,5885,5887,5889,5891,5893,5895,5897,5899,5901,5903,5905,5908,5910,5912,5914,5916],{"class":1097,"line":3119},[1095,5884,3565],{"class":1108},[1095,5886,2485],{"class":1581},[1095,5888,1139],{"class":1138},[1095,5890,5463],{"class":1177},[1095,5892,1181],{"class":1138},[1095,5894,5468],{"class":1275},[1095,5896,1225],{"class":1138},[1095,5898,1353],{"class":1177},[1095,5900,1139],{"class":1138},[1095,5902,5477],{"class":1177},[1095,5904,1181],{"class":1138},[1095,5906,5907],{"class":1177},"event",[1095,5909,4831],{"class":1138},[1095,5911,1185],{"class":1184},[1095,5913,2382],{"class":1188},[1095,5915,1185],{"class":1184},[1095,5917,5918],{"class":1138},"]))\n",[1095,5920,5921],{"class":1097,"line":3136},[1095,5922,1154],{"emptyLinePlaceholder":1153},[1095,5924,5925],{"class":1097,"line":3160},[1095,5926,5927],{"class":1101},"# Enhanced task with progress reporting\n",[1095,5929,5930,5932,5934,5936,5938,5940,5942],{"class":1097,"line":3170},[1095,5931,1521],{"class":1138},[1095,5933,2283],{"class":1524},[1095,5935,1181],{"class":1138},[1095,5937,1534],{"class":1275},[1095,5939,1225],{"class":1138},[1095,5941,1421],{"class":1420},[1095,5943,1205],{"class":1138},[1095,5945,5946,5948,5951,5953,5955,5957,5960],{"class":1097,"line":3181},[1095,5947,1547],{"class":1546},[1095,5949,5950],{"class":1524}," process_large_dataset",[1095,5952,1181],{"class":1138},[1095,5954,1556],{"class":1555},[1095,5956,1194],{"class":1138},[1095,5958,5959],{"class":2319}," dataset_id",[1095,5961,1559],{"class":1138},[1095,5963,5964,5966,5969],{"class":1097,"line":3186},[1095,5965,2338],{"class":2337},[1095,5967,5968],{"class":2341},"Process large dataset with progress updates",[1095,5970,2345],{"class":2337},[1095,5972,5973,5976,5978,5980,5983,5985],{"class":1097,"line":3202},[1095,5974,5975],{"class":1108},"    from",[1095,5977,5043],{"class":1112},[1095,5979,1139],{"class":1138},[1095,5981,5982],{"class":1112},"layers ",[1095,5984,1109],{"class":1108},[1095,5986,5987],{"class":1112}," get_channel_layer\n",[1095,5989,5990,5992,5994,5996,5998,6000],{"class":1097,"line":3210},[1095,5991,5975],{"class":1108},[1095,5993,2243],{"class":1112},[1095,5995,1139],{"class":1138},[1095,5997,2248],{"class":1112},[1095,5999,1109],{"class":1108},[1095,6001,6002],{"class":1112}," async_to_sync\n",[1095,6004,6005],{"class":1097,"line":3240},[1095,6006,2743],{"class":1112},[1095,6008,6009,6012,6014,6017],{"class":1097,"line":3258},[1095,6010,6011],{"class":1112},"    channel_layer ",[1095,6013,1225],{"class":1138},[1095,6015,6016],{"class":1177}," get_channel_layer",[1095,6018,1311],{"class":1138},[1095,6020,6021,6024,6026,6028,6030,6032,6034,6036,6038,6040,6042,6044],{"class":1097,"line":3272},[1095,6022,6023],{"class":1112},"    task_group ",[1095,6025,1225],{"class":1138},[1095,6027,2435],{"class":1546},[1095,6029,5209],{"class":1188},[1095,6031,1578],{"class":1577},[1095,6033,1556],{"class":1581},[1095,6035,1139],{"class":1138},[1095,6037,1586],{"class":1171},[1095,6039,1139],{"class":1138},[1095,6041,2731],{"class":1171},[1095,6043,1592],{"class":1577},[1095,6045,1722],{"class":1188},[1095,6047,6048],{"class":1097,"line":3314},[1095,6049,2743],{"class":1112},[1095,6051,6052,6054],{"class":1097,"line":3319},[1095,6053,2350],{"class":1108},[1095,6055,2353],{"class":1138},[1095,6057,6058],{"class":1097,"line":3326},[1095,6059,6060],{"class":1101},"        # Get dataset\n",[1095,6062,6063,6066,6068,6071,6073,6075,6077,6079,6081,6083,6085,6088],{"class":1097,"line":3349},[1095,6064,6065],{"class":1112},"        dataset ",[1095,6067,1225],{"class":1138},[1095,6069,6070],{"class":1112}," Dataset",[1095,6072,1139],{"class":1138},[1095,6074,2721],{"class":1171},[1095,6076,1139],{"class":1138},[1095,6078,1645],{"class":1177},[1095,6080,1181],{"class":1138},[1095,6082,2731],{"class":1275},[1095,6084,1225],{"class":1138},[1095,6086,6087],{"class":1177},"dataset_id",[1095,6089,1205],{"class":1138},[1095,6091,6092,6095,6097,6100,6102,6105,6107,6110],{"class":1097,"line":3401},[1095,6093,6094],{"class":1112},"        total_items ",[1095,6096,1225],{"class":1138},[1095,6098,6099],{"class":1112}," dataset",[1095,6101,1139],{"class":1138},[1095,6103,6104],{"class":1171},"items",[1095,6106,1139],{"class":1138},[1095,6108,6109],{"class":1177},"count",[1095,6111,1311],{"class":1138},[1095,6113,6114],{"class":1097,"line":3441},[1095,6115,5226],{"class":1112},[1095,6117,6118,6121,6123],{"class":1097,"line":3455},[1095,6119,6120],{"class":1112},"        processed ",[1095,6122,1225],{"class":1138},[1095,6124,4951],{"class":1446},[1095,6126,6127,6130,6133,6135,6137,6139,6141,6143,6146],{"class":1097,"line":3460},[1095,6128,6129],{"class":1108},"        for",[1095,6131,6132],{"class":1112}," item ",[1095,6134,3195],{"class":1108},[1095,6136,6099],{"class":1112},[1095,6138,1139],{"class":1138},[1095,6140,6104],{"class":1171},[1095,6142,1139],{"class":1138},[1095,6144,6145],{"class":1177},"all",[1095,6147,4810],{"class":1138},[1095,6149,6150],{"class":1097,"line":3465},[1095,6151,6152],{"class":1101},"            # Process individual item\n",[1095,6154,6155,6158,6160,6163],{"class":1097,"line":3485},[1095,6156,6157],{"class":1177},"            process_dataset_item",[1095,6159,1181],{"class":1138},[1095,6161,6162],{"class":1177},"item",[1095,6164,1205],{"class":1138},[1095,6166,6167,6170,6173],{"class":1097,"line":3495},[1095,6168,6169],{"class":1112},"            processed ",[1095,6171,6172],{"class":1138},"+=",[1095,6174,1945],{"class":1446},[1095,6176,6177],{"class":1097,"line":3530},[1095,6178,4052],{"class":1112},[1095,6180,6181],{"class":1097,"line":3535},[1095,6182,5451],{"class":1101},[1095,6184,6185,6188,6190,6193,6196,6199,6202,6205,6207,6209,6212],{"class":1097,"line":3556},[1095,6186,6187],{"class":1112},"            progress ",[1095,6189,1225],{"class":1138},[1095,6191,6192],{"class":2463}," int",[1095,6194,6195],{"class":1138},"((",[1095,6197,6198],{"class":1177},"processed ",[1095,6200,6201],{"class":1450},"/",[1095,6203,6204],{"class":1177}," total_items",[1095,6206,2450],{"class":1138},[1095,6208,1451],{"class":1450},[1095,6210,6211],{"class":1446}," 100",[1095,6213,1205],{"class":1138},[1095,6215,6216,6219,6221,6223,6225,6228,6230,6233,6235],{"class":1097,"line":3562},[1095,6217,6218],{"class":1177},"            async_to_sync",[1095,6220,1181],{"class":1138},[1095,6222,5242],{"class":1177},[1095,6224,1139],{"class":1138},[1095,6226,6227],{"class":1171},"group_send",[1095,6229,2728],{"class":1138},[1095,6231,6232],{"class":1177},"task_group",[1095,6234,1194],{"class":1138},[1095,6236,1796],{"class":1138},[1095,6238,6239,6241,6243,6245,6247,6249,6252,6254],{"class":1097,"line":3578},[1095,6240,4155],{"class":1184},[1095,6242,5486],{"class":1188},[1095,6244,1185],{"class":1184},[1095,6246,1809],{"class":1138},[1095,6248,1197],{"class":1184},[1095,6250,6251],{"class":1188},"task_update",[1095,6253,1185],{"class":1184},[1095,6255,1358],{"class":1138},[1095,6257,6258,6260,6262,6264,6266],{"class":1097,"line":3597},[1095,6259,4155],{"class":1184},[1095,6261,2382],{"class":1188},[1095,6263,1185],{"class":1184},[1095,6265,1809],{"class":1138},[1095,6267,1796],{"class":1138},[1095,6269,6270,6272,6274,6276,6278,6280,6282,6284],{"class":1097,"line":3603},[1095,6271,4425],{"class":1184},[1095,6273,5486],{"class":1188},[1095,6275,1185],{"class":1184},[1095,6277,1809],{"class":1138},[1095,6279,1197],{"class":1184},[1095,6281,4903],{"class":1188},[1095,6283,1185],{"class":1184},[1095,6285,1358],{"class":1138},[1095,6287,6288,6290,6292,6294,6296,6298,6300,6302,6304,6306],{"class":1097,"line":3617},[1095,6289,4425],{"class":1184},[1095,6291,4158],{"class":1188},[1095,6293,1185],{"class":1184},[1095,6295,1809],{"class":1138},[1095,6297,2485],{"class":1581},[1095,6299,1139],{"class":1138},[1095,6301,1586],{"class":1171},[1095,6303,1139],{"class":1138},[1095,6305,2731],{"class":1171},[1095,6307,1358],{"class":1138},[1095,6309,6310,6312,6314,6316,6318,6321],{"class":1097,"line":3622},[1095,6311,4425],{"class":1184},[1095,6313,4903],{"class":1188},[1095,6315,1185],{"class":1184},[1095,6317,1809],{"class":1138},[1095,6319,6320],{"class":1177}," progress",[1095,6322,1358],{"class":1138},[1095,6324,6326,6328,6331,6333,6335,6338],{"class":1097,"line":6325},98,[1095,6327,4425],{"class":1184},[1095,6329,6330],{"class":1188},"processed",[1095,6332,1185],{"class":1184},[1095,6334,1809],{"class":1138},[1095,6336,6337],{"class":1177}," processed",[1095,6339,1358],{"class":1138},[1095,6341,6343,6345,6348,6350,6352],{"class":1097,"line":6342},99,[1095,6344,4425],{"class":1184},[1095,6346,6347],{"class":1188},"total",[1095,6349,1185],{"class":1184},[1095,6351,1809],{"class":1138},[1095,6353,6354],{"class":1177}," total_items\n",[1095,6356,6358],{"class":1097,"line":6357},100,[1095,6359,6360],{"class":1138},"                }\n",[1095,6362,6364],{"class":1097,"line":6363},101,[1095,6365,4212],{"class":1138},[1095,6367,6369],{"class":1097,"line":6368},102,[1095,6370,4052],{"class":1112},[1095,6372,6374],{"class":1097,"line":6373},103,[1095,6375,6376],{"class":1101},"            # Update task state\n",[1095,6378,6380,6382,6384,6387],{"class":1097,"line":6379},104,[1095,6381,5254],{"class":1581},[1095,6383,1139],{"class":1138},[1095,6385,6386],{"class":1177},"update_state",[1095,6388,1340],{"class":1138},[1095,6390,6392,6395,6397,6399,6402,6404],{"class":1097,"line":6391},105,[1095,6393,6394],{"class":1275},"                state",[1095,6396,1225],{"class":1138},[1095,6398,1185],{"class":1184},[1095,6400,6401],{"class":1188},"PROGRESS",[1095,6403,1185],{"class":1184},[1095,6405,1358],{"class":1138},[1095,6407,6409,6412,6414,6416,6418,6420,6422,6424,6426,6428,6430,6432,6434,6436],{"class":1097,"line":6408},106,[1095,6410,6411],{"class":1275},"                meta",[1095,6413,3043],{"class":1138},[1095,6415,1185],{"class":1184},[1095,6417,4927],{"class":1188},[1095,6419,1185],{"class":1184},[1095,6421,1809],{"class":1138},[1095,6423,6337],{"class":1177},[1095,6425,1194],{"class":1138},[1095,6427,1197],{"class":1184},[1095,6429,6347],{"class":1188},[1095,6431,1185],{"class":1184},[1095,6433,1809],{"class":1138},[1095,6435,6204],{"class":1177},[1095,6437,1926],{"class":1138},[1095,6439,6441],{"class":1097,"line":6440},107,[1095,6442,6443],{"class":1138},"            )\n",[1095,6445,6447],{"class":1097,"line":6446},108,[1095,6448,5226],{"class":1112},[1095,6450,6452,6454],{"class":1097,"line":6451},109,[1095,6453,2432],{"class":1108},[1095,6455,1796],{"class":1138},[1095,6457,6459,6461,6463,6465,6467,6469,6471,6473],{"class":1097,"line":6458},110,[1095,6460,3027],{"class":1184},[1095,6462,2915],{"class":1188},[1095,6464,1185],{"class":1184},[1095,6466,1809],{"class":1138},[1095,6468,1197],{"class":1184},[1095,6470,2924],{"class":1188},[1095,6472,1185],{"class":1184},[1095,6474,1358],{"class":1138},[1095,6476,6478,6480,6482,6484,6486,6488],{"class":1097,"line":6477},111,[1095,6479,3027],{"class":1184},[1095,6481,6330],{"class":1188},[1095,6483,1185],{"class":1184},[1095,6485,1809],{"class":1138},[1095,6487,6337],{"class":1112},[1095,6489,1358],{"class":1138},[1095,6491,6493,6495,6497,6499,6501],{"class":1097,"line":6492},112,[1095,6494,3027],{"class":1184},[1095,6496,6347],{"class":1188},[1095,6498,1185],{"class":1184},[1095,6500,1809],{"class":1138},[1095,6502,6354],{"class":1112},[1095,6504,6506],{"class":1097,"line":6505},113,[1095,6507,6508],{"class":1138},"        }\n",[1095,6510,6512],{"class":1097,"line":6511},114,[1095,6513,5226],{"class":1112},[1095,6515,6517,6519,6521,6523,6525],{"class":1097,"line":6516},115,[1095,6518,2460],{"class":1108},[1095,6520,2464],{"class":2463},[1095,6522,2467],{"class":1108},[1095,6524,2470],{"class":1112},[1095,6526,2353],{"class":1138},[1095,6528,6530],{"class":1097,"line":6529},116,[1095,6531,6532],{"class":1101},"        # Send error update\n",[1095,6534,6536,6539,6541,6543,6545,6547,6549,6551,6553],{"class":1097,"line":6535},117,[1095,6537,6538],{"class":1177},"        async_to_sync",[1095,6540,1181],{"class":1138},[1095,6542,5242],{"class":1177},[1095,6544,1139],{"class":1138},[1095,6546,6227],{"class":1171},[1095,6548,2728],{"class":1138},[1095,6550,6232],{"class":1177},[1095,6552,1194],{"class":1138},[1095,6554,1796],{"class":1138},[1095,6556,6558,6560,6562,6564,6566,6568,6570,6572],{"class":1097,"line":6557},118,[1095,6559,3027],{"class":1184},[1095,6561,5486],{"class":1188},[1095,6563,1185],{"class":1184},[1095,6565,1809],{"class":1138},[1095,6567,1197],{"class":1184},[1095,6569,6251],{"class":1188},[1095,6571,1185],{"class":1184},[1095,6573,1358],{"class":1138},[1095,6575,6577,6579,6581,6583,6585],{"class":1097,"line":6576},119,[1095,6578,3027],{"class":1184},[1095,6580,2382],{"class":1188},[1095,6582,1185],{"class":1184},[1095,6584,1809],{"class":1138},[1095,6586,1796],{"class":1138},[1095,6588,6590,6592,6594,6596,6598,6600,6602,6604],{"class":1097,"line":6589},120,[1095,6591,4155],{"class":1184},[1095,6593,5486],{"class":1188},[1095,6595,1185],{"class":1184},[1095,6597,1809],{"class":1138},[1095,6599,1197],{"class":1184},[1095,6601,2638],{"class":1188},[1095,6603,1185],{"class":1184},[1095,6605,1358],{"class":1138},[1095,6607,6609,6611,6613,6615,6617,6619,6621,6623,6625,6627],{"class":1097,"line":6608},121,[1095,6610,4155],{"class":1184},[1095,6612,4158],{"class":1188},[1095,6614,1185],{"class":1184},[1095,6616,1809],{"class":1138},[1095,6618,2485],{"class":1581},[1095,6620,1139],{"class":1138},[1095,6622,1586],{"class":1171},[1095,6624,1139],{"class":1138},[1095,6626,2731],{"class":1171},[1095,6628,1358],{"class":1138},[1095,6630,6632,6634,6636,6638,6640,6642,6644,6646],{"class":1097,"line":6631},122,[1095,6633,4155],{"class":1184},[1095,6635,2638],{"class":1188},[1095,6637,1185],{"class":1184},[1095,6639,1809],{"class":1138},[1095,6641,2645],{"class":2463},[1095,6643,1181],{"class":1138},[1095,6645,2495],{"class":1177},[1095,6647,1205],{"class":1138},[1095,6649,6651],{"class":1097,"line":6650},123,[1095,6652,4793],{"class":1138},[1095,6654,6656],{"class":1097,"line":6655},124,[1095,6657,6658],{"class":1138},"        })\n",[1095,6660,6662],{"class":1097,"line":6661},125,[1095,6663,6664],{"class":1108},"        raise\n",[1030,6666,6668],{"id":6667},"rq-redis-queue-integration","RQ (Redis Queue) Integration",[1026,6670,6671],{},"RQ provides a simpler alternative to Celery for background task processing, with excellent async Django integration.",[1061,6673,6675],{"id":6674},"rq-setup-and-configuration","RQ Setup and Configuration",[1066,6677,6679],{"className":1089,"code":6678,"language":1091,"meta":1075,"style":1075},"# rq_config.py\nimport os\nimport redis\nfrom rq import Queue, Worker\nfrom django.conf import settings\n\n# Redis connection\nredis_conn = redis.Redis(\n    host=os.environ.get('REDIS_HOST', 'localhost'),\n    port=int(os.environ.get('REDIS_PORT', 6379)),\n    db=int(os.environ.get('REDIS_DB', 0)),\n    decode_responses=True\n)\n\n# Define queues\ndefault_queue = Queue('default', connection=redis_conn)\nemail_queue = Queue('email', connection=redis_conn)\nmedia_queue = Queue('media', connection=redis_conn)\nreports_queue = Queue('reports', connection=redis_conn)\n\n# Queue mapping\nQUEUE_MAP = {\n    'default': default_queue,\n    'email': email_queue,\n    'media': media_queue,\n    'reports': reports_queue,\n}\n\ndef get_queue(name='default'):\n    \"\"\"Get queue by name\"\"\"\n    return QUEUE_MAP.get(name, default_queue)\n",[1073,6680,6681,6686,6692,6699,6716,6730,6734,6739,6756,6793,6832,6868,6878,6882,6886,6891,6921,6948,6975,7002,7006,7011,7020,7035,7050,7065,7080,7084,7088,7110,7119],{"__ignoreMap":1075},[1095,6682,6683],{"class":1097,"line":1098},[1095,6684,6685],{"class":1101},"# rq_config.py\n",[1095,6687,6688,6690],{"class":1097,"line":1105},[1095,6689,1109],{"class":1108},[1095,6691,1113],{"class":1112},[1095,6693,6694,6696],{"class":1097,"line":1116},[1095,6695,1109],{"class":1108},[1095,6697,6698],{"class":1112}," redis\n",[1095,6700,6701,6703,6706,6708,6711,6713],{"class":1097,"line":1130},[1095,6702,1119],{"class":1108},[1095,6704,6705],{"class":1112}," rq ",[1095,6707,1109],{"class":1108},[1095,6709,6710],{"class":1112}," Queue",[1095,6712,1194],{"class":1138},[1095,6714,6715],{"class":1112}," Worker\n",[1095,6717,6718,6720,6722,6724,6726,6728],{"class":1097,"line":1150},[1095,6719,1119],{"class":1108},[1095,6721,1135],{"class":1112},[1095,6723,1139],{"class":1138},[1095,6725,1142],{"class":1112},[1095,6727,1109],{"class":1108},[1095,6729,1147],{"class":1112},[1095,6731,6732],{"class":1097,"line":1157},[1095,6733,1154],{"emptyLinePlaceholder":1153},[1095,6735,6736],{"class":1097,"line":1163},[1095,6737,6738],{"class":1101},"# Redis connection\n",[1095,6740,6741,6744,6746,6749,6751,6754],{"class":1097,"line":1208},[1095,6742,6743],{"class":1112},"redis_conn ",[1095,6745,1225],{"class":1138},[1095,6747,6748],{"class":1112}," redis",[1095,6750,1139],{"class":1138},[1095,6752,6753],{"class":1177},"Redis",[1095,6755,1340],{"class":1138},[1095,6757,6758,6761,6763,6765,6767,6769,6771,6773,6775,6777,6780,6782,6784,6786,6789,6791],{"class":1097,"line":1213},[1095,6759,6760],{"class":1275},"    host",[1095,6762,1225],{"class":1138},[1095,6764,1166],{"class":1177},[1095,6766,1139],{"class":1138},[1095,6768,1172],{"class":1171},[1095,6770,1139],{"class":1138},[1095,6772,1645],{"class":1177},[1095,6774,1181],{"class":1138},[1095,6776,1185],{"class":1184},[1095,6778,6779],{"class":1188},"REDIS_HOST",[1095,6781,1185],{"class":1184},[1095,6783,1194],{"class":1138},[1095,6785,1197],{"class":1184},[1095,6787,6788],{"class":1188},"localhost",[1095,6790,1185],{"class":1184},[1095,6792,3346],{"class":1138},[1095,6794,6795,6798,6800,6803,6805,6807,6809,6811,6813,6815,6817,6819,6822,6824,6826,6829],{"class":1097,"line":1219},[1095,6796,6797],{"class":1275},"    port",[1095,6799,1225],{"class":1138},[1095,6801,6802],{"class":2463},"int",[1095,6804,1181],{"class":1138},[1095,6806,1166],{"class":1177},[1095,6808,1139],{"class":1138},[1095,6810,1172],{"class":1171},[1095,6812,1139],{"class":1138},[1095,6814,1645],{"class":1177},[1095,6816,1181],{"class":1138},[1095,6818,1185],{"class":1184},[1095,6820,6821],{"class":1188},"REDIS_PORT",[1095,6823,1185],{"class":1184},[1095,6825,1194],{"class":1138},[1095,6827,6828],{"class":1446}," 6379",[1095,6830,6831],{"class":1138},")),\n",[1095,6833,6834,6837,6839,6841,6843,6845,6847,6849,6851,6853,6855,6857,6860,6862,6864,6866],{"class":1097,"line":1242},[1095,6835,6836],{"class":1275},"    db",[1095,6838,1225],{"class":1138},[1095,6840,6802],{"class":2463},[1095,6842,1181],{"class":1138},[1095,6844,1166],{"class":1177},[1095,6846,1139],{"class":1138},[1095,6848,1172],{"class":1171},[1095,6850,1139],{"class":1138},[1095,6852,1645],{"class":1177},[1095,6854,1181],{"class":1138},[1095,6856,1185],{"class":1184},[1095,6858,6859],{"class":1188},"REDIS_DB",[1095,6861,1185],{"class":1184},[1095,6863,1194],{"class":1138},[1095,6865,4934],{"class":1446},[1095,6867,6831],{"class":1138},[1095,6869,6870,6873,6875],{"class":1097,"line":1247},[1095,6871,6872],{"class":1275},"    decode_responses",[1095,6874,1225],{"class":1138},[1095,6876,6877],{"class":1420},"True\n",[1095,6879,6880],{"class":1097,"line":1253},[1095,6881,1205],{"class":1138},[1095,6883,6884],{"class":1097,"line":1290},[1095,6885,1154],{"emptyLinePlaceholder":1153},[1095,6887,6888],{"class":1097,"line":1295},[1095,6889,6890],{"class":1101},"# Define queues\n",[1095,6892,6893,6896,6898,6900,6902,6904,6907,6909,6911,6914,6916,6919],{"class":1097,"line":1301},[1095,6894,6895],{"class":1112},"default_queue ",[1095,6897,1225],{"class":1138},[1095,6899,6710],{"class":1177},[1095,6901,1181],{"class":1138},[1095,6903,1185],{"class":1184},[1095,6905,6906],{"class":1188},"default",[1095,6908,1185],{"class":1184},[1095,6910,1194],{"class":1138},[1095,6912,6913],{"class":1275}," connection",[1095,6915,1225],{"class":1138},[1095,6917,6918],{"class":1177},"redis_conn",[1095,6920,1205],{"class":1138},[1095,6922,6923,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946],{"class":1097,"line":1314},[1095,6924,6925],{"class":1112},"email_queue ",[1095,6927,1225],{"class":1138},[1095,6929,6710],{"class":1177},[1095,6931,1181],{"class":1138},[1095,6933,1185],{"class":1184},[1095,6935,1826],{"class":1188},[1095,6937,1185],{"class":1184},[1095,6939,1194],{"class":1138},[1095,6941,6913],{"class":1275},[1095,6943,1225],{"class":1138},[1095,6945,6918],{"class":1177},[1095,6947,1205],{"class":1138},[1095,6949,6950,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971,6973],{"class":1097,"line":1319},[1095,6951,6952],{"class":1112},"media_queue ",[1095,6954,1225],{"class":1138},[1095,6956,6710],{"class":1177},[1095,6958,1181],{"class":1138},[1095,6960,1185],{"class":1184},[1095,6962,1857],{"class":1188},[1095,6964,1185],{"class":1184},[1095,6966,1194],{"class":1138},[1095,6968,6913],{"class":1275},[1095,6970,1225],{"class":1138},[1095,6972,6918],{"class":1177},[1095,6974,1205],{"class":1138},[1095,6976,6977,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000],{"class":1097,"line":1325},[1095,6978,6979],{"class":1112},"reports_queue ",[1095,6981,1225],{"class":1138},[1095,6983,6710],{"class":1177},[1095,6985,1181],{"class":1138},[1095,6987,1185],{"class":1184},[1095,6989,1887],{"class":1188},[1095,6991,1185],{"class":1184},[1095,6993,1194],{"class":1138},[1095,6995,6913],{"class":1275},[1095,6997,1225],{"class":1138},[1095,6999,6918],{"class":1177},[1095,7001,1205],{"class":1138},[1095,7003,7004],{"class":1097,"line":1343},[1095,7005,1154],{"emptyLinePlaceholder":1153},[1095,7007,7008],{"class":1097,"line":1361},[1095,7009,7010],{"class":1101},"# Queue mapping\n",[1095,7012,7013,7016,7018],{"class":1097,"line":1379},[1095,7014,7015],{"class":1581},"QUEUE_MAP",[1095,7017,1633],{"class":1138},[1095,7019,1796],{"class":1138},[1095,7021,7022,7024,7026,7028,7030,7033],{"class":1097,"line":1395},[1095,7023,1801],{"class":1184},[1095,7025,6906],{"class":1188},[1095,7027,1185],{"class":1184},[1095,7029,1809],{"class":1138},[1095,7031,7032],{"class":1112}," default_queue",[1095,7034,1358],{"class":1138},[1095,7036,7037,7039,7041,7043,7045,7048],{"class":1097,"line":1412},[1095,7038,1801],{"class":1184},[1095,7040,1826],{"class":1188},[1095,7042,1185],{"class":1184},[1095,7044,1809],{"class":1138},[1095,7046,7047],{"class":1112}," email_queue",[1095,7049,1358],{"class":1138},[1095,7051,7052,7054,7056,7058,7060,7063],{"class":1097,"line":1426},[1095,7053,1801],{"class":1184},[1095,7055,1857],{"class":1188},[1095,7057,1185],{"class":1184},[1095,7059,1809],{"class":1138},[1095,7061,7062],{"class":1112}," media_queue",[1095,7064,1358],{"class":1138},[1095,7066,7067,7069,7071,7073,7075,7078],{"class":1097,"line":1438},[1095,7068,1801],{"class":1184},[1095,7070,1887],{"class":1188},[1095,7072,1185],{"class":1184},[1095,7074,1809],{"class":1138},[1095,7076,7077],{"class":1112}," reports_queue",[1095,7079,1358],{"class":1138},[1095,7081,7082],{"class":1097,"line":1462},[1095,7083,1926],{"class":1138},[1095,7085,7086],{"class":1097,"line":1482},[1095,7087,1154],{"emptyLinePlaceholder":1153},[1095,7089,7090,7092,7095,7097,7100,7102,7104,7106,7108],{"class":1097,"line":1495},[1095,7091,1547],{"class":1546},[1095,7093,7094],{"class":1524}," get_queue",[1095,7096,1181],{"class":1138},[1095,7098,7099],{"class":2319},"name",[1095,7101,1225],{"class":1450},[1095,7103,1185],{"class":1184},[1095,7105,6906],{"class":1188},[1095,7107,1185],{"class":1184},[1095,7109,1559],{"class":1138},[1095,7111,7112,7114,7117],{"class":1097,"line":1508},[1095,7113,2338],{"class":2337},[1095,7115,7116],{"class":2341},"Get queue by name",[1095,7118,2345],{"class":2337},[1095,7120,7121,7123,7126,7128,7130,7132,7134,7136,7138],{"class":1097,"line":1513},[1095,7122,2890],{"class":1108},[1095,7124,7125],{"class":1581}," QUEUE_MAP",[1095,7127,1139],{"class":1138},[1095,7129,1645],{"class":1177},[1095,7131,1181],{"class":1138},[1095,7133,7099],{"class":1177},[1095,7135,1194],{"class":1138},[1095,7137,7032],{"class":1177},[1095,7139,1205],{"class":1138},[1061,7141,7143],{"id":7142},"rq-task-definitions","RQ Task Definitions",[1066,7145,7147],{"className":1089,"code":7146,"language":1091,"meta":1075,"style":1075},"# rq_tasks.py\nimport asyncio\nimport aiohttp\nfrom rq import get_current_job\nfrom django.core.mail import send_mail\nfrom asgiref.sync import sync_to_async\nfrom .models import Document, User\n\ndef send_email_rq(subject, message, recipient_list):\n    \"\"\"RQ task for sending emails\"\"\"\n    job = get_current_job()\n    \n    try:\n        send_mail(\n            subject=subject,\n            message=message,\n            from_email='noreply@example.com',\n            recipient_list=recipient_list,\n            fail_silently=False\n        )\n        \n        return {\n            'job_id': job.id,\n            'status': 'completed',\n            'recipients': len(recipient_list)\n        }\n        \n    except Exception as e:\n        return {\n            'job_id': job.id,\n            'status': 'failed',\n            'error': str(e)\n        }\n\ndef process_document_rq(document_id):\n    \"\"\"RQ task for document processing\"\"\"\n    job = get_current_job()\n    \n    try:\n        # Run async processing\n        result = asyncio.run(process_document_async_rq(document_id))\n        \n        return {\n            'job_id': job.id,\n            'document_id': document_id,\n            'status': 'completed',\n            'result': result\n        }\n        \n    except Exception as e:\n        return {\n            'job_id': job.id,\n            'document_id': document_id,\n            'status': 'failed',\n            'error': str(e)\n        }\n\nasync def process_document_async_rq(document_id):\n    \"\"\"Async document processing for RQ\"\"\"\n    # Get document\n    document = await sync_to_async(Document.objects.get)(id=document_id)\n    \n    # Process with external API\n    async with aiohttp.ClientSession() as session:\n        async with session.post(\n            'https://api.processor.com/process',\n            json={'document_id': document_id, 'content': document.content}\n        ) as response:\n            result = await response.json()\n    \n    # Update document\n    document.processed_data = result\n    await sync_to_async(document.save)()\n    \n    return result\n\ndef batch_user_update_rq(user_ids, update_data):\n    \"\"\"RQ task for batch user updates\"\"\"\n    job = get_current_job()\n    \n    try:\n        results = asyncio.run(process_users_batch(user_ids, update_data))\n        \n        return {\n            'job_id': job.id,\n            'processed': len(results),\n            'successful': len([r for r in results if r.get('status') == 'success']),\n            'results': results\n        }\n        \n    except Exception as e:\n        return {\n            'job_id': job.id,\n            'status': 'failed',\n            'error': str(e)\n        }\n\nasync def process_users_batch(user_ids, update_data):\n    \"\"\"Process users in batch asynchronously\"\"\"\n    results = []\n    \n    for user_id in user_ids:\n        try:\n            user = await sync_to_async(User.objects.get)(id=user_id)\n            \n            # Update user data\n            for field, value in update_data.items():\n                setattr(user, field, value)\n            \n            await sync_to_async(user.save)()\n            \n            results.append({\n                'user_id': user_id,\n                'status': 'success'\n            })\n            \n        except Exception as e:\n            results.append({\n                'user_id': user_id,\n                'status': 'error',\n                'error': str(e)\n            })\n    \n    return results\n",[1073,7148,7149,7154,7160,7166,7177,7195,7209,7225,7229,7250,7259,7271,7275,7281,7287,7297,7307,7321,7331,7339,7343,7347,7353,7373,7391,7410,7414,7418,7430,7436,7454,7472,7490,7494,7498,7511,7520,7530,7534,7540,7545,7568,7572,7578,7596,7610,7628,7641,7645,7649,7661,7667,7685,7699,7717,7735,7739,7743,7758,7767,7772,7804,7808,7813,7833,7847,7858,7893,7903,7919,7923,7928,7942,7958,7962,7968,7972,7990,7999,8009,8013,8019,8047,8051,8057,8075,8093,8147,8159,8163,8167,8179,8185,8203,8221,8239,8243,8247,8266,8275,8283,8287,8299,8305,8338,8342,8347,8370,8390,8394,8410,8414,8424,8438,8454,8458,8462,8474,8484,8498,8516,8534,8538,8542],{"__ignoreMap":1075},[1095,7150,7151],{"class":1097,"line":1098},[1095,7152,7153],{"class":1101},"# rq_tasks.py\n",[1095,7155,7156,7158],{"class":1097,"line":1105},[1095,7157,1109],{"class":1108},[1095,7159,2164],{"class":1112},[1095,7161,7162,7164],{"class":1097,"line":1116},[1095,7163,1109],{"class":1108},[1095,7165,2171],{"class":1112},[1095,7167,7168,7170,7172,7174],{"class":1097,"line":1130},[1095,7169,1119],{"class":1108},[1095,7171,6705],{"class":1112},[1095,7173,1109],{"class":1108},[1095,7175,7176],{"class":1112}," get_current_job\n",[1095,7178,7179,7181,7183,7185,7187,7189,7191,7193],{"class":1097,"line":1150},[1095,7180,1119],{"class":1108},[1095,7182,1135],{"class":1112},[1095,7184,1139],{"class":1138},[1095,7186,2200],{"class":1112},[1095,7188,1139],{"class":1138},[1095,7190,2205],{"class":1112},[1095,7192,1109],{"class":1108},[1095,7194,2210],{"class":1112},[1095,7196,7197,7199,7201,7203,7205,7207],{"class":1097,"line":1157},[1095,7198,1119],{"class":1108},[1095,7200,2243],{"class":1112},[1095,7202,1139],{"class":1138},[1095,7204,2248],{"class":1112},[1095,7206,1109],{"class":1108},[1095,7208,2253],{"class":1112},[1095,7210,7211,7213,7215,7217,7219,7221,7223],{"class":1097,"line":1163},[1095,7212,1119],{"class":1108},[1095,7214,2260],{"class":1138},[1095,7216,2231],{"class":1112},[1095,7218,1109],{"class":1108},[1095,7220,2267],{"class":1112},[1095,7222,1194],{"class":1138},[1095,7224,2236],{"class":1112},[1095,7226,7227],{"class":1097,"line":1208},[1095,7228,1154],{"emptyLinePlaceholder":1153},[1095,7230,7231,7233,7236,7238,7240,7242,7244,7246,7248],{"class":1097,"line":1213},[1095,7232,1547],{"class":1546},[1095,7234,7235],{"class":1524}," send_email_rq",[1095,7237,1181],{"class":1138},[1095,7239,2370],{"class":2319},[1095,7241,1194],{"class":1138},[1095,7243,2325],{"class":2319},[1095,7245,1194],{"class":1138},[1095,7247,2330],{"class":2319},[1095,7249,1559],{"class":1138},[1095,7251,7252,7254,7257],{"class":1097,"line":1219},[1095,7253,2338],{"class":2337},[1095,7255,7256],{"class":2341},"RQ task for sending emails",[1095,7258,2345],{"class":2337},[1095,7260,7261,7264,7266,7269],{"class":1097,"line":1242},[1095,7262,7263],{"class":1112},"    job ",[1095,7265,1225],{"class":1138},[1095,7267,7268],{"class":1177}," get_current_job",[1095,7270,1311],{"class":1138},[1095,7272,7273],{"class":1097,"line":1247},[1095,7274,2743],{"class":1112},[1095,7276,7277,7279],{"class":1097,"line":1253},[1095,7278,2350],{"class":1108},[1095,7280,2353],{"class":1138},[1095,7282,7283,7285],{"class":1097,"line":1290},[1095,7284,2358],{"class":1177},[1095,7286,1340],{"class":1138},[1095,7288,7289,7291,7293,7295],{"class":1097,"line":1295},[1095,7290,2365],{"class":1275},[1095,7292,1225],{"class":1138},[1095,7294,2370],{"class":1177},[1095,7296,1358],{"class":1138},[1095,7298,7299,7301,7303,7305],{"class":1097,"line":1301},[1095,7300,2377],{"class":1275},[1095,7302,1225],{"class":1138},[1095,7304,2382],{"class":1177},[1095,7306,1358],{"class":1138},[1095,7308,7309,7311,7313,7315,7317,7319],{"class":1097,"line":1314},[1095,7310,2389],{"class":1275},[1095,7312,1225],{"class":1138},[1095,7314,1185],{"class":1184},[1095,7316,2396],{"class":1188},[1095,7318,1185],{"class":1184},[1095,7320,1358],{"class":1138},[1095,7322,7323,7325,7327,7329],{"class":1097,"line":1319},[1095,7324,2405],{"class":1275},[1095,7326,1225],{"class":1138},[1095,7328,2410],{"class":1177},[1095,7330,1358],{"class":1138},[1095,7332,7333,7335,7337],{"class":1097,"line":1325},[1095,7334,2417],{"class":1275},[1095,7336,1225],{"class":1138},[1095,7338,2422],{"class":1420},[1095,7340,7341],{"class":1097,"line":1343},[1095,7342,2427],{"class":1138},[1095,7344,7345],{"class":1097,"line":1361},[1095,7346,5226],{"class":1112},[1095,7348,7349,7351],{"class":1097,"line":1379},[1095,7350,2432],{"class":1108},[1095,7352,1796],{"class":1138},[1095,7354,7355,7357,7360,7362,7364,7367,7369,7371],{"class":1097,"line":1395},[1095,7356,3027],{"class":1184},[1095,7358,7359],{"class":1188},"job_id",[1095,7361,1185],{"class":1184},[1095,7363,1809],{"class":1138},[1095,7365,7366],{"class":1112}," job",[1095,7368,1139],{"class":1138},[1095,7370,2731],{"class":1171},[1095,7372,1358],{"class":1138},[1095,7374,7375,7377,7379,7381,7383,7385,7387,7389],{"class":1097,"line":1412},[1095,7376,3027],{"class":1184},[1095,7378,2915],{"class":1188},[1095,7380,1185],{"class":1184},[1095,7382,1809],{"class":1138},[1095,7384,1197],{"class":1184},[1095,7386,2924],{"class":1188},[1095,7388,1185],{"class":1184},[1095,7390,1358],{"class":1138},[1095,7392,7393,7395,7398,7400,7402,7404,7406,7408],{"class":1097,"line":1426},[1095,7394,3027],{"class":1184},[1095,7396,7397],{"class":1188},"recipients",[1095,7399,1185],{"class":1184},[1095,7401,1809],{"class":1138},[1095,7403,3338],{"class":1565},[1095,7405,1181],{"class":1138},[1095,7407,2410],{"class":1177},[1095,7409,1205],{"class":1138},[1095,7411,7412],{"class":1097,"line":1438},[1095,7413,6508],{"class":1138},[1095,7415,7416],{"class":1097,"line":1462},[1095,7417,5226],{"class":1112},[1095,7419,7420,7422,7424,7426,7428],{"class":1097,"line":1482},[1095,7421,2460],{"class":1108},[1095,7423,2464],{"class":2463},[1095,7425,2467],{"class":1108},[1095,7427,4227],{"class":1112},[1095,7429,2353],{"class":1138},[1095,7431,7432,7434],{"class":1097,"line":1495},[1095,7433,2432],{"class":1108},[1095,7435,1796],{"class":1138},[1095,7437,7438,7440,7442,7444,7446,7448,7450,7452],{"class":1097,"line":1508},[1095,7439,3027],{"class":1184},[1095,7441,7359],{"class":1188},[1095,7443,1185],{"class":1184},[1095,7445,1809],{"class":1138},[1095,7447,7366],{"class":1112},[1095,7449,1139],{"class":1138},[1095,7451,2731],{"class":1171},[1095,7453,1358],{"class":1138},[1095,7455,7456,7458,7460,7462,7464,7466,7468,7470],{"class":1097,"line":1513},[1095,7457,3027],{"class":1184},[1095,7459,2915],{"class":1188},[1095,7461,1185],{"class":1184},[1095,7463,1809],{"class":1138},[1095,7465,1197],{"class":1184},[1095,7467,3406],{"class":1188},[1095,7469,1185],{"class":1184},[1095,7471,1358],{"class":1138},[1095,7473,7474,7476,7478,7480,7482,7484,7486,7488],{"class":1097,"line":1518},[1095,7475,3027],{"class":1184},[1095,7477,2638],{"class":1188},[1095,7479,1185],{"class":1184},[1095,7481,1809],{"class":1138},[1095,7483,2645],{"class":2463},[1095,7485,1181],{"class":1138},[1095,7487,4252],{"class":1177},[1095,7489,1205],{"class":1138},[1095,7491,7492],{"class":1097,"line":1543},[1095,7493,6508],{"class":1138},[1095,7495,7496],{"class":1097,"line":1562},[1095,7497,1154],{"emptyLinePlaceholder":1153},[1095,7499,7500,7502,7505,7507,7509],{"class":1097,"line":2062},[1095,7501,1547],{"class":1546},[1095,7503,7504],{"class":1524}," process_document_rq",[1095,7506,1181],{"class":1138},[1095,7508,2613],{"class":2319},[1095,7510,1559],{"class":1138},[1095,7512,7513,7515,7518],{"class":1097,"line":2076},[1095,7514,2338],{"class":2337},[1095,7516,7517],{"class":2341},"RQ task for document processing",[1095,7519,2345],{"class":2337},[1095,7521,7522,7524,7526,7528],{"class":1097,"line":2096},[1095,7523,7263],{"class":1112},[1095,7525,1225],{"class":1138},[1095,7527,7268],{"class":1177},[1095,7529,1311],{"class":1138},[1095,7531,7532],{"class":1097,"line":2136},[1095,7533,2743],{"class":1112},[1095,7535,7536,7538],{"class":1097,"line":2141},[1095,7537,2350],{"class":1108},[1095,7539,2353],{"class":1138},[1095,7541,7542],{"class":1097,"line":2740},[1095,7543,7544],{"class":1101},"        # Run async processing\n",[1095,7546,7547,7549,7551,7553,7555,7557,7559,7562,7564,7566],{"class":1097,"line":2746},[1095,7548,5413],{"class":1112},[1095,7550,1225],{"class":1138},[1095,7552,2598],{"class":1112},[1095,7554,1139],{"class":1138},[1095,7556,2603],{"class":1177},[1095,7558,1181],{"class":1138},[1095,7560,7561],{"class":1177},"process_document_async_rq",[1095,7563,1181],{"class":1138},[1095,7565,2613],{"class":1177},[1095,7567,2533],{"class":1138},[1095,7569,7570],{"class":1097,"line":2752},[1095,7571,5226],{"class":1112},[1095,7573,7574,7576],{"class":1097,"line":2801},[1095,7575,2432],{"class":1108},[1095,7577,1796],{"class":1138},[1095,7579,7580,7582,7584,7586,7588,7590,7592,7594],{"class":1097,"line":2820},[1095,7581,3027],{"class":1184},[1095,7583,7359],{"class":1188},[1095,7585,1185],{"class":1184},[1095,7587,1809],{"class":1138},[1095,7589,7366],{"class":1112},[1095,7591,1139],{"class":1138},[1095,7593,2731],{"class":1171},[1095,7595,1358],{"class":1138},[1095,7597,7598,7600,7602,7604,7606,7608],{"class":1097,"line":2825},[1095,7599,3027],{"class":1184},[1095,7601,2613],{"class":1188},[1095,7603,1185],{"class":1184},[1095,7605,1809],{"class":1138},[1095,7607,2569],{"class":1112},[1095,7609,1358],{"class":1138},[1095,7611,7612,7614,7616,7618,7620,7622,7624,7626],{"class":1097,"line":2831},[1095,7613,3027],{"class":1184},[1095,7615,2915],{"class":1188},[1095,7617,1185],{"class":1184},[1095,7619,1809],{"class":1138},[1095,7621,1197],{"class":1184},[1095,7623,2924],{"class":1188},[1095,7625,1185],{"class":1184},[1095,7627,1358],{"class":1138},[1095,7629,7630,7632,7634,7636,7638],{"class":1097,"line":2851},[1095,7631,3027],{"class":1184},[1095,7633,3253],{"class":1188},[1095,7635,1185],{"class":1184},[1095,7637,1809],{"class":1138},[1095,7639,7640],{"class":1112}," result\n",[1095,7642,7643],{"class":1097,"line":2856},[1095,7644,6508],{"class":1138},[1095,7646,7647],{"class":1097,"line":2862},[1095,7648,5226],{"class":1112},[1095,7650,7651,7653,7655,7657,7659],{"class":1097,"line":2882},[1095,7652,2460],{"class":1108},[1095,7654,2464],{"class":2463},[1095,7656,2467],{"class":1108},[1095,7658,4227],{"class":1112},[1095,7660,2353],{"class":1138},[1095,7662,7663,7665],{"class":1097,"line":2887},[1095,7664,2432],{"class":1108},[1095,7666,1796],{"class":1138},[1095,7668,7669,7671,7673,7675,7677,7679,7681,7683],{"class":1097,"line":2895},[1095,7670,3027],{"class":1184},[1095,7672,7359],{"class":1188},[1095,7674,1185],{"class":1184},[1095,7676,1809],{"class":1138},[1095,7678,7366],{"class":1112},[1095,7680,1139],{"class":1138},[1095,7682,2731],{"class":1171},[1095,7684,1358],{"class":1138},[1095,7686,7687,7689,7691,7693,7695,7697],{"class":1097,"line":2910},[1095,7688,3027],{"class":1184},[1095,7690,2613],{"class":1188},[1095,7692,1185],{"class":1184},[1095,7694,1809],{"class":1138},[1095,7696,2569],{"class":1112},[1095,7698,1358],{"class":1138},[1095,7700,7701,7703,7705,7707,7709,7711,7713,7715],{"class":1097,"line":2931},[1095,7702,3027],{"class":1184},[1095,7704,2915],{"class":1188},[1095,7706,1185],{"class":1184},[1095,7708,1809],{"class":1138},[1095,7710,1197],{"class":1184},[1095,7712,3406],{"class":1188},[1095,7714,1185],{"class":1184},[1095,7716,1358],{"class":1138},[1095,7718,7719,7721,7723,7725,7727,7729,7731,7733],{"class":1097,"line":2946},[1095,7720,3027],{"class":1184},[1095,7722,2638],{"class":1188},[1095,7724,1185],{"class":1184},[1095,7726,1809],{"class":1138},[1095,7728,2645],{"class":2463},[1095,7730,1181],{"class":1138},[1095,7732,4252],{"class":1177},[1095,7734,1205],{"class":1138},[1095,7736,7737],{"class":1097,"line":2952},[1095,7738,6508],{"class":1138},[1095,7740,7741],{"class":1097,"line":2957},[1095,7742,1154],{"emptyLinePlaceholder":1153},[1095,7744,7745,7747,7749,7752,7754,7756],{"class":1097,"line":2972},[1095,7746,2672],{"class":1546},[1095,7748,2675],{"class":1546},[1095,7750,7751],{"class":1524}," process_document_async_rq",[1095,7753,1181],{"class":1138},[1095,7755,2613],{"class":2319},[1095,7757,1559],{"class":1138},[1095,7759,7760,7762,7765],{"class":1097,"line":2982},[1095,7761,2338],{"class":2337},[1095,7763,7764],{"class":2341},"Async document processing for RQ",[1095,7766,2345],{"class":2337},[1095,7768,7769],{"class":1097,"line":3007},[1095,7770,7771],{"class":1101},"    # Get document\n",[1095,7773,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792,7794,7796,7798,7800,7802],{"class":1097,"line":3024},[1095,7775,2703],{"class":1112},[1095,7777,1225],{"class":1138},[1095,7779,2708],{"class":1108},[1095,7781,2711],{"class":1177},[1095,7783,1181],{"class":1138},[1095,7785,2716],{"class":1177},[1095,7787,1139],{"class":1138},[1095,7789,2721],{"class":1171},[1095,7791,1139],{"class":1138},[1095,7793,1645],{"class":1171},[1095,7795,2728],{"class":1138},[1095,7797,2731],{"class":1275},[1095,7799,1225],{"class":1138},[1095,7801,2613],{"class":1177},[1095,7803,1205],{"class":1138},[1095,7805,7806],{"class":1097,"line":3037},[1095,7807,2743],{"class":1112},[1095,7809,7810],{"class":1097,"line":3059},[1095,7811,7812],{"class":1101},"    # Process with external API\n",[1095,7814,7815,7817,7819,7821,7823,7825,7827,7829,7831],{"class":1097,"line":3085},[1095,7816,2755],{"class":1108},[1095,7818,2758],{"class":1108},[1095,7820,2989],{"class":1112},[1095,7822,1139],{"class":1138},[1095,7824,2994],{"class":1177},[1095,7826,2997],{"class":1138},[1095,7828,2467],{"class":1108},[1095,7830,3002],{"class":1112},[1095,7832,2353],{"class":1138},[1095,7834,7835,7837,7839,7841,7843,7845],{"class":1097,"line":3098},[1095,7836,3010],{"class":1108},[1095,7838,2758],{"class":1108},[1095,7840,3002],{"class":1112},[1095,7842,1139],{"class":1138},[1095,7844,3019],{"class":1177},[1095,7846,1340],{"class":1138},[1095,7848,7849,7851,7854,7856],{"class":1097,"line":3114},[1095,7850,3027],{"class":1184},[1095,7852,7853],{"class":1188},"https://api.processor.com/process",[1095,7855,1185],{"class":1184},[1095,7857,1358],{"class":1138},[1095,7859,7860,7862,7864,7866,7868,7870,7872,7874,7876,7878,7880,7882,7884,7887,7889,7891],{"class":1097,"line":3119},[1095,7861,3040],{"class":1275},[1095,7863,3043],{"class":1138},[1095,7865,1185],{"class":1184},[1095,7867,2613],{"class":1188},[1095,7869,1185],{"class":1184},[1095,7871,1809],{"class":1138},[1095,7873,2569],{"class":1177},[1095,7875,1194],{"class":1138},[1095,7877,1197],{"class":1184},[1095,7879,2846],{"class":1188},[1095,7881,1185],{"class":1184},[1095,7883,1809],{"class":1138},[1095,7885,7886],{"class":1177}," document",[1095,7888,1139],{"class":1138},[1095,7890,2846],{"class":1171},[1095,7892,1926],{"class":1138},[1095,7894,7895,7897,7899,7901],{"class":1097,"line":3136},[1095,7896,3088],{"class":1138},[1095,7898,2467],{"class":1108},[1095,7900,3093],{"class":1112},[1095,7902,2353],{"class":1138},[1095,7904,7905,7907,7909,7911,7913,7915,7917],{"class":1097,"line":3160},[1095,7906,3213],{"class":1112},[1095,7908,1225],{"class":1138},[1095,7910,2708],{"class":1108},[1095,7912,3093],{"class":1112},[1095,7914,1139],{"class":1138},[1095,7916,1353],{"class":1177},[1095,7918,1311],{"class":1138},[1095,7920,7921],{"class":1097,"line":3170},[1095,7922,2743],{"class":1112},[1095,7924,7925],{"class":1097,"line":3181},[1095,7926,7927],{"class":1101},"    # Update document\n",[1095,7929,7930,7933,7935,7938,7940],{"class":1097,"line":3186},[1095,7931,7932],{"class":1112},"    document",[1095,7934,1139],{"class":1138},[1095,7936,7937],{"class":1171},"processed_data",[1095,7939,1633],{"class":1138},[1095,7941,7640],{"class":1112},[1095,7943,7944,7946,7948,7950,7952,7954,7956],{"class":1097,"line":3202},[1095,7945,2865],{"class":1108},[1095,7947,2711],{"class":1177},[1095,7949,1181],{"class":1138},[1095,7951,2771],{"class":1177},[1095,7953,1139],{"class":1138},[1095,7955,2876],{"class":1171},[1095,7957,2879],{"class":1138},[1095,7959,7960],{"class":1097,"line":3210},[1095,7961,2743],{"class":1112},[1095,7963,7964,7966],{"class":1097,"line":3240},[1095,7965,2890],{"class":1108},[1095,7967,7640],{"class":1112},[1095,7969,7970],{"class":1097,"line":3258},[1095,7971,1154],{"emptyLinePlaceholder":1153},[1095,7973,7974,7976,7979,7981,7983,7985,7988],{"class":1097,"line":3272},[1095,7975,1547],{"class":1546},[1095,7977,7978],{"class":1524}," batch_user_update_rq",[1095,7980,1181],{"class":1138},[1095,7982,4360],{"class":2319},[1095,7984,1194],{"class":1138},[1095,7986,7987],{"class":2319}," update_data",[1095,7989,1559],{"class":1138},[1095,7991,7992,7994,7997],{"class":1097,"line":3314},[1095,7993,2338],{"class":2337},[1095,7995,7996],{"class":2341},"RQ task for batch user updates",[1095,7998,2345],{"class":2337},[1095,8000,8001,8003,8005,8007],{"class":1097,"line":3319},[1095,8002,7263],{"class":1112},[1095,8004,1225],{"class":1138},[1095,8006,7268],{"class":1177},[1095,8008,1311],{"class":1138},[1095,8010,8011],{"class":1097,"line":3326},[1095,8012,2743],{"class":1112},[1095,8014,8015,8017],{"class":1097,"line":3349},[1095,8016,2350],{"class":1108},[1095,8018,2353],{"class":1138},[1095,8020,8021,8024,8026,8028,8030,8032,8034,8037,8039,8041,8043,8045],{"class":1097,"line":3401},[1095,8022,8023],{"class":1112},"        results ",[1095,8025,1225],{"class":1138},[1095,8027,2598],{"class":1112},[1095,8029,1139],{"class":1138},[1095,8031,2603],{"class":1177},[1095,8033,1181],{"class":1138},[1095,8035,8036],{"class":1177},"process_users_batch",[1095,8038,1181],{"class":1138},[1095,8040,4360],{"class":1177},[1095,8042,1194],{"class":1138},[1095,8044,7987],{"class":1177},[1095,8046,2533],{"class":1138},[1095,8048,8049],{"class":1097,"line":3441},[1095,8050,5226],{"class":1112},[1095,8052,8053,8055],{"class":1097,"line":3455},[1095,8054,2432],{"class":1108},[1095,8056,1796],{"class":1138},[1095,8058,8059,8061,8063,8065,8067,8069,8071,8073],{"class":1097,"line":3460},[1095,8060,3027],{"class":1184},[1095,8062,7359],{"class":1188},[1095,8064,1185],{"class":1184},[1095,8066,1809],{"class":1138},[1095,8068,7366],{"class":1112},[1095,8070,1139],{"class":1138},[1095,8072,2731],{"class":1171},[1095,8074,1358],{"class":1138},[1095,8076,8077,8079,8081,8083,8085,8087,8089,8091],{"class":1097,"line":3465},[1095,8078,3027],{"class":1184},[1095,8080,6330],{"class":1188},[1095,8082,1185],{"class":1184},[1095,8084,1809],{"class":1138},[1095,8086,3338],{"class":1565},[1095,8088,1181],{"class":1138},[1095,8090,3343],{"class":1177},[1095,8092,3346],{"class":1138},[1095,8094,8095,8097,8099,8101,8103,8105,8107,8109,8111,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8138,8140,8143,8145],{"class":1097,"line":3485},[1095,8096,3027],{"class":1184},[1095,8098,3354],{"class":1188},[1095,8100,1185],{"class":1184},[1095,8102,1809],{"class":1138},[1095,8104,3338],{"class":1565},[1095,8106,3363],{"class":1138},[1095,8108,3366],{"class":1177},[1095,8110,3369],{"class":1108},[1095,8112,3372],{"class":1177},[1095,8114,3195],{"class":1108},[1095,8116,3377],{"class":1177},[1095,8118,3380],{"class":1108},[1095,8120,3395],{"class":1177},[1095,8122,1139],{"class":1138},[1095,8124,1645],{"class":1177},[1095,8126,1181],{"class":1138},[1095,8128,1185],{"class":1184},[1095,8130,2915],{"class":1188},[1095,8132,1185],{"class":1184},[1095,8134,2450],{"class":1138},[1095,8136,8137],{"class":1450}," ==",[1095,8139,1197],{"class":1184},[1095,8141,8142],{"class":1188},"success",[1095,8144,1185],{"class":1184},[1095,8146,3398],{"class":1138},[1095,8148,8149,8151,8153,8155,8157],{"class":1097,"line":3495},[1095,8150,3027],{"class":1184},[1095,8152,3343],{"class":1188},[1095,8154,1185],{"class":1184},[1095,8156,1809],{"class":1138},[1095,8158,3452],{"class":1112},[1095,8160,8161],{"class":1097,"line":3530},[1095,8162,6508],{"class":1138},[1095,8164,8165],{"class":1097,"line":3535},[1095,8166,5226],{"class":1112},[1095,8168,8169,8171,8173,8175,8177],{"class":1097,"line":3556},[1095,8170,2460],{"class":1108},[1095,8172,2464],{"class":2463},[1095,8174,2467],{"class":1108},[1095,8176,4227],{"class":1112},[1095,8178,2353],{"class":1138},[1095,8180,8181,8183],{"class":1097,"line":3562},[1095,8182,2432],{"class":1108},[1095,8184,1796],{"class":1138},[1095,8186,8187,8189,8191,8193,8195,8197,8199,8201],{"class":1097,"line":3578},[1095,8188,3027],{"class":1184},[1095,8190,7359],{"class":1188},[1095,8192,1185],{"class":1184},[1095,8194,1809],{"class":1138},[1095,8196,7366],{"class":1112},[1095,8198,1139],{"class":1138},[1095,8200,2731],{"class":1171},[1095,8202,1358],{"class":1138},[1095,8204,8205,8207,8209,8211,8213,8215,8217,8219],{"class":1097,"line":3597},[1095,8206,3027],{"class":1184},[1095,8208,2915],{"class":1188},[1095,8210,1185],{"class":1184},[1095,8212,1809],{"class":1138},[1095,8214,1197],{"class":1184},[1095,8216,3406],{"class":1188},[1095,8218,1185],{"class":1184},[1095,8220,1358],{"class":1138},[1095,8222,8223,8225,8227,8229,8231,8233,8235,8237],{"class":1097,"line":3603},[1095,8224,3027],{"class":1184},[1095,8226,2638],{"class":1188},[1095,8228,1185],{"class":1184},[1095,8230,1809],{"class":1138},[1095,8232,2645],{"class":2463},[1095,8234,1181],{"class":1138},[1095,8236,4252],{"class":1177},[1095,8238,1205],{"class":1138},[1095,8240,8241],{"class":1097,"line":3617},[1095,8242,6508],{"class":1138},[1095,8244,8245],{"class":1097,"line":3622},[1095,8246,1154],{"emptyLinePlaceholder":1153},[1095,8248,8249,8251,8253,8256,8258,8260,8262,8264],{"class":1097,"line":6325},[1095,8250,2672],{"class":1546},[1095,8252,2675],{"class":1546},[1095,8254,8255],{"class":1524}," process_users_batch",[1095,8257,1181],{"class":1138},[1095,8259,4360],{"class":2319},[1095,8261,1194],{"class":1138},[1095,8263,7987],{"class":2319},[1095,8265,1559],{"class":1138},[1095,8267,8268,8270,8273],{"class":1097,"line":6342},[1095,8269,2338],{"class":2337},[1095,8271,8272],{"class":2341},"Process users in batch asynchronously",[1095,8274,2345],{"class":2337},[1095,8276,8277,8279,8281],{"class":1097,"line":6357},[1095,8278,3173],{"class":1112},[1095,8280,1225],{"class":1138},[1095,8282,3178],{"class":1138},[1095,8284,8285],{"class":1097,"line":6363},[1095,8286,2743],{"class":1112},[1095,8288,8289,8291,8293,8295,8297],{"class":1097,"line":6368},[1095,8290,3189],{"class":1108},[1095,8292,3192],{"class":1112},[1095,8294,3195],{"class":1108},[1095,8296,3150],{"class":1112},[1095,8298,2353],{"class":1138},[1095,8300,8301,8303],{"class":1097,"line":6373},[1095,8302,3205],{"class":1108},[1095,8304,2353],{"class":1138},[1095,8306,8307,8310,8312,8314,8316,8318,8320,8322,8324,8326,8328,8330,8332,8334,8336],{"class":1097,"line":6379},[1095,8308,8309],{"class":1112},"            user ",[1095,8311,1225],{"class":1138},[1095,8313,2708],{"class":1108},[1095,8315,2711],{"class":1177},[1095,8317,1181],{"class":1138},[1095,8319,3509],{"class":1177},[1095,8321,1139],{"class":1138},[1095,8323,2721],{"class":1171},[1095,8325,1139],{"class":1138},[1095,8327,1645],{"class":1171},[1095,8329,2728],{"class":1138},[1095,8331,2731],{"class":1275},[1095,8333,1225],{"class":1138},[1095,8335,3231],{"class":1177},[1095,8337,1205],{"class":1138},[1095,8339,8340],{"class":1097,"line":6391},[1095,8341,4052],{"class":1112},[1095,8343,8344],{"class":1097,"line":6408},[1095,8345,8346],{"class":1101},"            # Update user data\n",[1095,8348,8349,8352,8355,8357,8360,8362,8364,8366,8368],{"class":1097,"line":6440},[1095,8350,8351],{"class":1108},"            for",[1095,8353,8354],{"class":1112}," field",[1095,8356,1194],{"class":1138},[1095,8358,8359],{"class":1112}," value ",[1095,8361,3195],{"class":1108},[1095,8363,7987],{"class":1112},[1095,8365,1139],{"class":1138},[1095,8367,6104],{"class":1177},[1095,8369,4810],{"class":1138},[1095,8371,8372,8375,8377,8379,8381,8383,8385,8388],{"class":1097,"line":6446},[1095,8373,8374],{"class":1565},"                setattr",[1095,8376,1181],{"class":1138},[1095,8378,3573],{"class":1177},[1095,8380,1194],{"class":1138},[1095,8382,8354],{"class":1177},[1095,8384,1194],{"class":1138},[1095,8386,8387],{"class":1177}," value",[1095,8389,1205],{"class":1138},[1095,8391,8392],{"class":1097,"line":6451},[1095,8393,4052],{"class":1112},[1095,8395,8396,8398,8400,8402,8404,8406,8408],{"class":1097,"line":6458},[1095,8397,5456],{"class":1108},[1095,8399,2711],{"class":1177},[1095,8401,1181],{"class":1138},[1095,8403,3573],{"class":1177},[1095,8405,1139],{"class":1138},[1095,8407,2876],{"class":1171},[1095,8409,2879],{"class":1138},[1095,8411,8412],{"class":1097,"line":6477},[1095,8413,4052],{"class":1112},[1095,8415,8416,8418,8420,8422],{"class":1097,"line":6492},[1095,8417,3243],{"class":1112},[1095,8419,1139],{"class":1138},[1095,8421,3248],{"class":1177},[1095,8423,4150],{"class":1138},[1095,8425,8426,8428,8430,8432,8434,8436],{"class":1097,"line":6505},[1095,8427,4155],{"class":1184},[1095,8429,3231],{"class":1188},[1095,8431,1185],{"class":1184},[1095,8433,1809],{"class":1138},[1095,8435,3292],{"class":1177},[1095,8437,1358],{"class":1138},[1095,8439,8440,8442,8444,8446,8448,8450,8452],{"class":1097,"line":6511},[1095,8441,4155],{"class":1184},[1095,8443,2915],{"class":1188},[1095,8445,1185],{"class":1184},[1095,8447,1809],{"class":1138},[1095,8449,1197],{"class":1184},[1095,8451,8142],{"class":1188},[1095,8453,1722],{"class":1184},[1095,8455,8456],{"class":1097,"line":6516},[1095,8457,4212],{"class":1138},[1095,8459,8460],{"class":1097,"line":6529},[1095,8461,4052],{"class":1112},[1095,8463,8464,8466,8468,8470,8472],{"class":1097,"line":6535},[1095,8465,3261],{"class":1108},[1095,8467,2464],{"class":2463},[1095,8469,2467],{"class":1108},[1095,8471,4227],{"class":1112},[1095,8473,2353],{"class":1138},[1095,8475,8476,8478,8480,8482],{"class":1097,"line":6557},[1095,8477,3243],{"class":1112},[1095,8479,1139],{"class":1138},[1095,8481,3248],{"class":1177},[1095,8483,4150],{"class":1138},[1095,8485,8486,8488,8490,8492,8494,8496],{"class":1097,"line":6576},[1095,8487,4155],{"class":1184},[1095,8489,3231],{"class":1188},[1095,8491,1185],{"class":1184},[1095,8493,1809],{"class":1138},[1095,8495,3292],{"class":1177},[1095,8497,1358],{"class":1138},[1095,8499,8500,8502,8504,8506,8508,8510,8512,8514],{"class":1097,"line":6589},[1095,8501,4155],{"class":1184},[1095,8503,2915],{"class":1188},[1095,8505,1185],{"class":1184},[1095,8507,1809],{"class":1138},[1095,8509,1197],{"class":1184},[1095,8511,2638],{"class":1188},[1095,8513,1185],{"class":1184},[1095,8515,1358],{"class":1138},[1095,8517,8518,8520,8522,8524,8526,8528,8530,8532],{"class":1097,"line":6608},[1095,8519,4155],{"class":1184},[1095,8521,2638],{"class":1188},[1095,8523,1185],{"class":1184},[1095,8525,1809],{"class":1138},[1095,8527,2645],{"class":2463},[1095,8529,1181],{"class":1138},[1095,8531,4252],{"class":1177},[1095,8533,1205],{"class":1138},[1095,8535,8536],{"class":1097,"line":6631},[1095,8537,4212],{"class":1138},[1095,8539,8540],{"class":1097,"line":6650},[1095,8541,2743],{"class":1112},[1095,8543,8544,8546],{"class":1097,"line":6655},[1095,8545,2890],{"class":1108},[1095,8547,3452],{"class":1112},[1061,8549,8551],{"id":8550},"rq-integration-with-async-views","RQ Integration with Async Views",[1066,8553,8555],{"className":1089,"code":8554,"language":1091,"meta":1075,"style":1075},"# rq_views.py\nimport json\nfrom django.http import JsonResponse\nfrom django.views import View\nfrom django.utils.decorators import method_decorator\nfrom django.views.decorators.csrf import csrf_exempt\nfrom .rq_config import get_queue\nfrom .rq_tasks import send_email_rq, process_document_rq, batch_user_update_rq\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass RQTaskView(View):\n    \"\"\"Base view for RQ task management\"\"\"\n    \n    async def dispatch(self, request, *args, **kwargs):\n        return await super().dispatch(request, *args, **kwargs)\n\nclass EnqueueEmailView(RQTaskView):\n    \"\"\"Enqueue email sending task\"\"\"\n    \n    async def post(self, request):\n        try:\n            data = json.loads(request.body)\n            \n            subject = data.get('subject')\n            message = data.get('message')\n            recipients = data.get('recipients', [])\n            \n            if not all([subject, message, recipients]):\n                return JsonResponse({\n                    'error': 'subject, message, and recipients required'\n                }, status=400)\n            \n            # Enqueue email task\n            queue = get_queue('email')\n            job = queue.enqueue(\n                send_email_rq,\n                subject,\n                message,\n                recipients,\n                timeout='5m'\n            )\n            \n            return JsonResponse({\n                'job_id': job.id,\n                'status': 'enqueued',\n                'queue': 'email',\n                'recipients': len(recipients)\n            })\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n\nclass EnqueueDocumentProcessingView(RQTaskView):\n    \"\"\"Enqueue document processing task\"\"\"\n    \n    async def post(self, request):\n        try:\n            data = json.loads(request.body)\n            document_id = data.get('document_id')\n            \n            if not document_id:\n                return JsonResponse({'error': 'document_id required'}, status=400)\n            \n            # Enqueue processing task\n            queue = get_queue('media')\n            job = queue.enqueue(\n                process_document_rq,\n                document_id,\n                timeout='30m'\n            )\n            \n            return JsonResponse({\n                'job_id': job.id,\n                'status': 'enqueued',\n                'queue': 'media',\n                'document_id': document_id\n            })\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n\nclass RQJobStatusView(RQTaskView):\n    \"\"\"Check RQ job status\"\"\"\n    \n    async def get(self, request, job_id):\n        try:\n            from rq import Job\n            from .rq_config import redis_conn\n            \n            # Get job\n            job = Job.fetch(job_id, connection=redis_conn)\n            \n            response_data = {\n                'job_id': job_id,\n                'status': job.get_status(),\n                'created_at': job.created_at.isoformat() if job.created_at else None,\n                'started_at': job.started_at.isoformat() if job.started_at else None,\n                'ended_at': job.ended_at.isoformat() if job.ended_at else None,\n            }\n            \n            if job.is_finished:\n                response_data['result'] = job.result\n            elif job.is_failed:\n                response_data['error'] = str(job.exc_info)\n            \n            return JsonResponse(response_data)\n            \n        except Exception as e:\n            return JsonResponse({'error': str(e)}, status=500)\n",[1073,8556,8557,8562,8568,8582,8596,8614,8636,8650,8672,8676,8700,8713,8722,8726,8756,8786,8790,8804,8813,8817,8835,8841,8863,8867,8890,8913,8938,8942,8967,8975,8992,9004,9008,9013,9032,9049,9056,9063,9070,9077,9091,9095,9099,9107,9125,9144,9162,9180,9184,9188,9200,9232,9236,9249,9258,9262,9280,9286,9308,9330,9334,9344,9376,9380,9385,9403,9417,9424,9431,9444,9448,9452,9460,9478,9496,9514,9527,9531,9535,9547,9579,9583,9596,9605,9609,9632,9638,9649,9662,9666,9671,9699,9703,9711,9725,9745,9784,9821,9858,9862,9866,9879,9901,9915,9945,9949,9961,9965,9977],{"__ignoreMap":1075},[1095,8558,8559],{"class":1097,"line":1098},[1095,8560,8561],{"class":1101},"# rq_views.py\n",[1095,8563,8564,8566],{"class":1097,"line":1105},[1095,8565,1109],{"class":1108},[1095,8567,3688],{"class":1112},[1095,8569,8570,8572,8574,8576,8578,8580],{"class":1097,"line":1116},[1095,8571,1119],{"class":1108},[1095,8573,1135],{"class":1112},[1095,8575,1139],{"class":1138},[1095,8577,3699],{"class":1112},[1095,8579,1109],{"class":1108},[1095,8581,3704],{"class":1112},[1095,8583,8584,8586,8588,8590,8592,8594],{"class":1097,"line":1130},[1095,8585,1119],{"class":1108},[1095,8587,1135],{"class":1112},[1095,8589,1139],{"class":1138},[1095,8591,3762],{"class":1112},[1095,8593,1109],{"class":1108},[1095,8595,3767],{"class":1112},[1095,8597,8598,8600,8602,8604,8606,8608,8610,8612],{"class":1097,"line":1150},[1095,8599,1119],{"class":1108},[1095,8601,1135],{"class":1112},[1095,8603,1139],{"class":1138},[1095,8605,3741],{"class":1112},[1095,8607,1139],{"class":1138},[1095,8609,3746],{"class":1112},[1095,8611,1109],{"class":1108},[1095,8613,3751],{"class":1112},[1095,8615,8616,8618,8620,8622,8624,8626,8628,8630,8632,8634],{"class":1097,"line":1157},[1095,8617,1119],{"class":1108},[1095,8619,1135],{"class":1112},[1095,8621,1139],{"class":1138},[1095,8623,3715],{"class":1112},[1095,8625,1139],{"class":1138},[1095,8627,3720],{"class":1112},[1095,8629,1139],{"class":1138},[1095,8631,3725],{"class":1112},[1095,8633,1109],{"class":1108},[1095,8635,3730],{"class":1112},[1095,8637,8638,8640,8642,8645,8647],{"class":1097,"line":1163},[1095,8639,1119],{"class":1108},[1095,8641,2260],{"class":1138},[1095,8643,8644],{"class":1112},"rq_config ",[1095,8646,1109],{"class":1108},[1095,8648,8649],{"class":1112}," get_queue\n",[1095,8651,8652,8654,8656,8659,8661,8663,8665,8667,8669],{"class":1097,"line":1208},[1095,8653,1119],{"class":1108},[1095,8655,2260],{"class":1138},[1095,8657,8658],{"class":1112},"rq_tasks ",[1095,8660,1109],{"class":1108},[1095,8662,7235],{"class":1112},[1095,8664,1194],{"class":1138},[1095,8666,7504],{"class":1112},[1095,8668,1194],{"class":1138},[1095,8670,8671],{"class":1112}," batch_user_update_rq\n",[1095,8673,8674],{"class":1097,"line":1213},[1095,8675,1154],{"emptyLinePlaceholder":1153},[1095,8677,8678,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698],{"class":1097,"line":1219},[1095,8679,1521],{"class":1138},[1095,8681,3925],{"class":1524},[1095,8683,1181],{"class":1138},[1095,8685,3930],{"class":1177},[1095,8687,1194],{"class":1138},[1095,8689,3935],{"class":1275},[1095,8691,1225],{"class":1138},[1095,8693,1185],{"class":1184},[1095,8695,3896],{"class":1188},[1095,8697,1185],{"class":1184},[1095,8699,1205],{"class":1138},[1095,8701,8702,8704,8707,8709,8711],{"class":1097,"line":1242},[1095,8703,3812],{"class":1546},[1095,8705,8706],{"class":3815}," RQTaskView",[1095,8708,1181],{"class":1138},[1095,8710,3822],{"class":3821},[1095,8712,1559],{"class":1138},[1095,8714,8715,8717,8720],{"class":1097,"line":1247},[1095,8716,2338],{"class":2337},[1095,8718,8719],{"class":2341},"Base view for RQ task management",[1095,8721,2345],{"class":2337},[1095,8723,8724],{"class":1097,"line":1253},[1095,8725,2743],{"class":1112},[1095,8727,8728,8730,8732,8734,8736,8738,8740,8742,8744,8746,8748,8750,8752,8754],{"class":1097,"line":1290},[1095,8729,2755],{"class":1546},[1095,8731,2675],{"class":1546},[1095,8733,3846],{"class":1524},[1095,8735,1181],{"class":1138},[1095,8737,1556],{"class":1555},[1095,8739,1194],{"class":1138},[1095,8741,3855],{"class":2319},[1095,8743,1194],{"class":1138},[1095,8745,1451],{"class":1450},[1095,8747,3862],{"class":2319},[1095,8749,1194],{"class":1138},[1095,8751,2519],{"class":1450},[1095,8753,3869],{"class":2319},[1095,8755,1559],{"class":1138},[1095,8757,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784],{"class":1097,"line":1295},[1095,8759,2432],{"class":1108},[1095,8761,2708],{"class":1108},[1095,8763,3890],{"class":2463},[1095,8765,3893],{"class":1138},[1095,8767,3896],{"class":1177},[1095,8769,1181],{"class":1138},[1095,8771,1586],{"class":1177},[1095,8773,1194],{"class":1138},[1095,8775,1451],{"class":1450},[1095,8777,3862],{"class":1177},[1095,8779,1194],{"class":1138},[1095,8781,2519],{"class":1450},[1095,8783,3869],{"class":1177},[1095,8785,1205],{"class":1138},[1095,8787,8788],{"class":1097,"line":1301},[1095,8789,1154],{"emptyLinePlaceholder":1153},[1095,8791,8792,8794,8797,8799,8802],{"class":1097,"line":1314},[1095,8793,3812],{"class":1546},[1095,8795,8796],{"class":3815}," EnqueueEmailView",[1095,8798,1181],{"class":1138},[1095,8800,8801],{"class":3821},"RQTaskView",[1095,8803,1559],{"class":1138},[1095,8805,8806,8808,8811],{"class":1097,"line":1319},[1095,8807,2338],{"class":2337},[1095,8809,8810],{"class":2341},"Enqueue email sending task",[1095,8812,2345],{"class":2337},[1095,8814,8815],{"class":1097,"line":1325},[1095,8816,2743],{"class":1112},[1095,8818,8819,8821,8823,8825,8827,8829,8831,8833],{"class":1097,"line":1343},[1095,8820,2755],{"class":1546},[1095,8822,2675],{"class":1546},[1095,8824,3981],{"class":1524},[1095,8826,1181],{"class":1138},[1095,8828,1556],{"class":1555},[1095,8830,1194],{"class":1138},[1095,8832,3855],{"class":2319},[1095,8834,1559],{"class":1138},[1095,8836,8837,8839],{"class":1097,"line":1361},[1095,8838,3205],{"class":1108},[1095,8840,2353],{"class":1138},[1095,8842,8843,8845,8847,8849,8851,8853,8855,8857,8859,8861],{"class":1097,"line":1379},[1095,8844,4002],{"class":1112},[1095,8846,1225],{"class":1138},[1095,8848,4007],{"class":1112},[1095,8850,1139],{"class":1138},[1095,8852,4012],{"class":1177},[1095,8854,1181],{"class":1138},[1095,8856,1586],{"class":1177},[1095,8858,1139],{"class":1138},[1095,8860,4021],{"class":1171},[1095,8862,1205],{"class":1138},[1095,8864,8865],{"class":1097,"line":1395},[1095,8866,4052],{"class":1112},[1095,8868,8869,8872,8874,8876,8878,8880,8882,8884,8886,8888],{"class":1097,"line":1412},[1095,8870,8871],{"class":1112},"            subject ",[1095,8873,1225],{"class":1138},[1095,8875,4033],{"class":1112},[1095,8877,1139],{"class":1138},[1095,8879,1645],{"class":1177},[1095,8881,1181],{"class":1138},[1095,8883,1185],{"class":1184},[1095,8885,2370],{"class":1188},[1095,8887,1185],{"class":1184},[1095,8889,1205],{"class":1138},[1095,8891,8892,8895,8897,8899,8901,8903,8905,8907,8909,8911],{"class":1097,"line":1426},[1095,8893,8894],{"class":1112},"            message ",[1095,8896,1225],{"class":1138},[1095,8898,4033],{"class":1112},[1095,8900,1139],{"class":1138},[1095,8902,1645],{"class":1177},[1095,8904,1181],{"class":1138},[1095,8906,1185],{"class":1184},[1095,8908,2382],{"class":1188},[1095,8910,1185],{"class":1184},[1095,8912,1205],{"class":1138},[1095,8914,8915,8918,8920,8922,8924,8926,8928,8930,8932,8934,8936],{"class":1097,"line":1438},[1095,8916,8917],{"class":1112},"            recipients ",[1095,8919,1225],{"class":1138},[1095,8921,4033],{"class":1112},[1095,8923,1139],{"class":1138},[1095,8925,1645],{"class":1177},[1095,8927,1181],{"class":1138},[1095,8929,1185],{"class":1184},[1095,8931,7397],{"class":1188},[1095,8933,1185],{"class":1184},[1095,8935,1194],{"class":1138},[1095,8937,4367],{"class":1138},[1095,8939,8940],{"class":1097,"line":1462},[1095,8941,4052],{"class":1112},[1095,8943,8944,8946,8948,8951,8953,8955,8957,8959,8961,8964],{"class":1097,"line":1482},[1095,8945,4057],{"class":1108},[1095,8947,3389],{"class":1450},[1095,8949,8950],{"class":1565}," all",[1095,8952,3363],{"class":1138},[1095,8954,2370],{"class":1177},[1095,8956,1194],{"class":1138},[1095,8958,2325],{"class":1177},[1095,8960,1194],{"class":1138},[1095,8962,8963],{"class":1177}," recipients",[1095,8965,8966],{"class":1138},"]):\n",[1095,8968,8969,8971,8973],{"class":1097,"line":1495},[1095,8970,4068],{"class":1108},[1095,8972,4071],{"class":1177},[1095,8974,4150],{"class":1138},[1095,8976,8977,8979,8981,8983,8985,8987,8990],{"class":1097,"line":1508},[1095,8978,4425],{"class":1184},[1095,8980,2638],{"class":1188},[1095,8982,1185],{"class":1184},[1095,8984,1809],{"class":1138},[1095,8986,1197],{"class":1184},[1095,8988,8989],{"class":1188},"subject, message, and recipients required",[1095,8991,1722],{"class":1184},[1095,8993,8994,8996,8998,9000,9002],{"class":1097,"line":1513},[1095,8995,4443],{"class":1138},[1095,8997,4094],{"class":1275},[1095,8999,1225],{"class":1138},[1095,9001,4099],{"class":1446},[1095,9003,1205],{"class":1138},[1095,9005,9006],{"class":1097,"line":1518},[1095,9007,4052],{"class":1112},[1095,9009,9010],{"class":1097,"line":1543},[1095,9011,9012],{"class":1101},"            # Enqueue email task\n",[1095,9014,9015,9018,9020,9022,9024,9026,9028,9030],{"class":1097,"line":1562},[1095,9016,9017],{"class":1112},"            queue ",[1095,9019,1225],{"class":1138},[1095,9021,7094],{"class":1177},[1095,9023,1181],{"class":1138},[1095,9025,1185],{"class":1184},[1095,9027,1826],{"class":1188},[1095,9029,1185],{"class":1184},[1095,9031,1205],{"class":1138},[1095,9033,9034,9037,9039,9042,9044,9047],{"class":1097,"line":2062},[1095,9035,9036],{"class":1112},"            job ",[1095,9038,1225],{"class":1138},[1095,9040,9041],{"class":1112}," queue",[1095,9043,1139],{"class":1138},[1095,9045,9046],{"class":1177},"enqueue",[1095,9048,1340],{"class":1138},[1095,9050,9051,9054],{"class":1097,"line":2076},[1095,9052,9053],{"class":1177},"                send_email_rq",[1095,9055,1358],{"class":1138},[1095,9057,9058,9061],{"class":1097,"line":2096},[1095,9059,9060],{"class":1177},"                subject",[1095,9062,1358],{"class":1138},[1095,9064,9065,9068],{"class":1097,"line":2136},[1095,9066,9067],{"class":1177},"                message",[1095,9069,1358],{"class":1138},[1095,9071,9072,9075],{"class":1097,"line":2141},[1095,9073,9074],{"class":1177},"                recipients",[1095,9076,1358],{"class":1138},[1095,9078,9079,9082,9084,9086,9089],{"class":1097,"line":2740},[1095,9080,9081],{"class":1275},"                timeout",[1095,9083,1225],{"class":1138},[1095,9085,1185],{"class":1184},[1095,9087,9088],{"class":1188},"5m",[1095,9090,1722],{"class":1184},[1095,9092,9093],{"class":1097,"line":2746},[1095,9094,6443],{"class":1138},[1095,9096,9097],{"class":1097,"line":2752},[1095,9098,4052],{"class":1112},[1095,9100,9101,9103,9105],{"class":1097,"line":2801},[1095,9102,3101],{"class":1108},[1095,9104,4071],{"class":1177},[1095,9106,4150],{"class":1138},[1095,9108,9109,9111,9113,9115,9117,9119,9121,9123],{"class":1097,"line":2820},[1095,9110,4155],{"class":1184},[1095,9112,7359],{"class":1188},[1095,9114,1185],{"class":1184},[1095,9116,1809],{"class":1138},[1095,9118,7366],{"class":1177},[1095,9120,1139],{"class":1138},[1095,9122,2731],{"class":1171},[1095,9124,1358],{"class":1138},[1095,9126,9127,9129,9131,9133,9135,9137,9140,9142],{"class":1097,"line":2825},[1095,9128,4155],{"class":1184},[1095,9130,2915],{"class":1188},[1095,9132,1185],{"class":1184},[1095,9134,1809],{"class":1138},[1095,9136,1197],{"class":1184},[1095,9138,9139],{"class":1188},"enqueued",[1095,9141,1185],{"class":1184},[1095,9143,1358],{"class":1138},[1095,9145,9146,9148,9150,9152,9154,9156,9158,9160],{"class":1097,"line":2831},[1095,9147,4155],{"class":1184},[1095,9149,1817],{"class":1188},[1095,9151,1185],{"class":1184},[1095,9153,1809],{"class":1138},[1095,9155,1197],{"class":1184},[1095,9157,1826],{"class":1188},[1095,9159,1185],{"class":1184},[1095,9161,1358],{"class":1138},[1095,9163,9164,9166,9168,9170,9172,9174,9176,9178],{"class":1097,"line":2851},[1095,9165,4155],{"class":1184},[1095,9167,7397],{"class":1188},[1095,9169,1185],{"class":1184},[1095,9171,1809],{"class":1138},[1095,9173,3338],{"class":1565},[1095,9175,1181],{"class":1138},[1095,9177,7397],{"class":1177},[1095,9179,1205],{"class":1138},[1095,9181,9182],{"class":1097,"line":2856},[1095,9183,4212],{"class":1138},[1095,9185,9186],{"class":1097,"line":2862},[1095,9187,4052],{"class":1112},[1095,9189,9190,9192,9194,9196,9198],{"class":1097,"line":2882},[1095,9191,3261],{"class":1108},[1095,9193,2464],{"class":2463},[1095,9195,2467],{"class":1108},[1095,9197,4227],{"class":1112},[1095,9199,2353],{"class":1138},[1095,9201,9202,9204,9206,9208,9210,9212,9214,9216,9218,9220,9222,9224,9226,9228,9230],{"class":1097,"line":2887},[1095,9203,3101],{"class":1108},[1095,9205,4071],{"class":1177},[1095,9207,3281],{"class":1138},[1095,9209,1185],{"class":1184},[1095,9211,2638],{"class":1188},[1095,9213,1185],{"class":1184},[1095,9215,1809],{"class":1138},[1095,9217,2645],{"class":2463},[1095,9219,1181],{"class":1138},[1095,9221,4252],{"class":1177},[1095,9223,4255],{"class":1138},[1095,9225,4094],{"class":1275},[1095,9227,1225],{"class":1138},[1095,9229,4262],{"class":1446},[1095,9231,1205],{"class":1138},[1095,9233,9234],{"class":1097,"line":2895},[1095,9235,1154],{"emptyLinePlaceholder":1153},[1095,9237,9238,9240,9243,9245,9247],{"class":1097,"line":2910},[1095,9239,3812],{"class":1546},[1095,9241,9242],{"class":3815}," EnqueueDocumentProcessingView",[1095,9244,1181],{"class":1138},[1095,9246,8801],{"class":3821},[1095,9248,1559],{"class":1138},[1095,9250,9251,9253,9256],{"class":1097,"line":2931},[1095,9252,2338],{"class":2337},[1095,9254,9255],{"class":2341},"Enqueue document processing task",[1095,9257,2345],{"class":2337},[1095,9259,9260],{"class":1097,"line":2946},[1095,9261,2743],{"class":1112},[1095,9263,9264,9266,9268,9270,9272,9274,9276,9278],{"class":1097,"line":2952},[1095,9265,2755],{"class":1546},[1095,9267,2675],{"class":1546},[1095,9269,3981],{"class":1524},[1095,9271,1181],{"class":1138},[1095,9273,1556],{"class":1555},[1095,9275,1194],{"class":1138},[1095,9277,3855],{"class":2319},[1095,9279,1559],{"class":1138},[1095,9281,9282,9284],{"class":1097,"line":2957},[1095,9283,3205],{"class":1108},[1095,9285,2353],{"class":1138},[1095,9287,9288,9290,9292,9294,9296,9298,9300,9302,9304,9306],{"class":1097,"line":2972},[1095,9289,4002],{"class":1112},[1095,9291,1225],{"class":1138},[1095,9293,4007],{"class":1112},[1095,9295,1139],{"class":1138},[1095,9297,4012],{"class":1177},[1095,9299,1181],{"class":1138},[1095,9301,1586],{"class":1177},[1095,9303,1139],{"class":1138},[1095,9305,4021],{"class":1171},[1095,9307,1205],{"class":1138},[1095,9309,9310,9312,9314,9316,9318,9320,9322,9324,9326,9328],{"class":1097,"line":2982},[1095,9311,4028],{"class":1112},[1095,9313,1225],{"class":1138},[1095,9315,4033],{"class":1112},[1095,9317,1139],{"class":1138},[1095,9319,1645],{"class":1177},[1095,9321,1181],{"class":1138},[1095,9323,1185],{"class":1184},[1095,9325,2613],{"class":1188},[1095,9327,1185],{"class":1184},[1095,9329,1205],{"class":1138},[1095,9331,9332],{"class":1097,"line":3007},[1095,9333,4052],{"class":1112},[1095,9335,9336,9338,9340,9342],{"class":1097,"line":3024},[1095,9337,4057],{"class":1108},[1095,9339,3389],{"class":1450},[1095,9341,2569],{"class":1112},[1095,9343,2353],{"class":1138},[1095,9345,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368,9370,9372,9374],{"class":1097,"line":3037},[1095,9347,4068],{"class":1108},[1095,9349,4071],{"class":1177},[1095,9351,3281],{"class":1138},[1095,9353,1185],{"class":1184},[1095,9355,2638],{"class":1188},[1095,9357,1185],{"class":1184},[1095,9359,1809],{"class":1138},[1095,9361,1197],{"class":1184},[1095,9363,4086],{"class":1188},[1095,9365,1185],{"class":1184},[1095,9367,4091],{"class":1138},[1095,9369,4094],{"class":1275},[1095,9371,1225],{"class":1138},[1095,9373,4099],{"class":1446},[1095,9375,1205],{"class":1138},[1095,9377,9378],{"class":1097,"line":3059},[1095,9379,4052],{"class":1112},[1095,9381,9382],{"class":1097,"line":3085},[1095,9383,9384],{"class":1101},"            # Enqueue processing task\n",[1095,9386,9387,9389,9391,9393,9395,9397,9399,9401],{"class":1097,"line":3098},[1095,9388,9017],{"class":1112},[1095,9390,1225],{"class":1138},[1095,9392,7094],{"class":1177},[1095,9394,1181],{"class":1138},[1095,9396,1185],{"class":1184},[1095,9398,1857],{"class":1188},[1095,9400,1185],{"class":1184},[1095,9402,1205],{"class":1138},[1095,9404,9405,9407,9409,9411,9413,9415],{"class":1097,"line":3114},[1095,9406,9036],{"class":1112},[1095,9408,1225],{"class":1138},[1095,9410,9041],{"class":1112},[1095,9412,1139],{"class":1138},[1095,9414,9046],{"class":1177},[1095,9416,1340],{"class":1138},[1095,9418,9419,9422],{"class":1097,"line":3119},[1095,9420,9421],{"class":1177},"                process_document_rq",[1095,9423,1358],{"class":1138},[1095,9425,9426,9429],{"class":1097,"line":3136},[1095,9427,9428],{"class":1177},"                document_id",[1095,9430,1358],{"class":1138},[1095,9432,9433,9435,9437,9439,9442],{"class":1097,"line":3160},[1095,9434,9081],{"class":1275},[1095,9436,1225],{"class":1138},[1095,9438,1185],{"class":1184},[1095,9440,9441],{"class":1188},"30m",[1095,9443,1722],{"class":1184},[1095,9445,9446],{"class":1097,"line":3170},[1095,9447,6443],{"class":1138},[1095,9449,9450],{"class":1097,"line":3181},[1095,9451,4052],{"class":1112},[1095,9453,9454,9456,9458],{"class":1097,"line":3186},[1095,9455,3101],{"class":1108},[1095,9457,4071],{"class":1177},[1095,9459,4150],{"class":1138},[1095,9461,9462,9464,9466,9468,9470,9472,9474,9476],{"class":1097,"line":3202},[1095,9463,4155],{"class":1184},[1095,9465,7359],{"class":1188},[1095,9467,1185],{"class":1184},[1095,9469,1809],{"class":1138},[1095,9471,7366],{"class":1177},[1095,9473,1139],{"class":1138},[1095,9475,2731],{"class":1171},[1095,9477,1358],{"class":1138},[1095,9479,9480,9482,9484,9486,9488,9490,9492,9494],{"class":1097,"line":3210},[1095,9481,4155],{"class":1184},[1095,9483,2915],{"class":1188},[1095,9485,1185],{"class":1184},[1095,9487,1809],{"class":1138},[1095,9489,1197],{"class":1184},[1095,9491,9139],{"class":1188},[1095,9493,1185],{"class":1184},[1095,9495,1358],{"class":1138},[1095,9497,9498,9500,9502,9504,9506,9508,9510,9512],{"class":1097,"line":3240},[1095,9499,4155],{"class":1184},[1095,9501,1817],{"class":1188},[1095,9503,1185],{"class":1184},[1095,9505,1809],{"class":1138},[1095,9507,1197],{"class":1184},[1095,9509,1857],{"class":1188},[1095,9511,1185],{"class":1184},[1095,9513,1358],{"class":1138},[1095,9515,9516,9518,9520,9522,9524],{"class":1097,"line":3258},[1095,9517,4155],{"class":1184},[1095,9519,2613],{"class":1188},[1095,9521,1185],{"class":1184},[1095,9523,1809],{"class":1138},[1095,9525,9526],{"class":1177}," document_id\n",[1095,9528,9529],{"class":1097,"line":3272},[1095,9530,4212],{"class":1138},[1095,9532,9533],{"class":1097,"line":3314},[1095,9534,4052],{"class":1112},[1095,9536,9537,9539,9541,9543,9545],{"class":1097,"line":3319},[1095,9538,3261],{"class":1108},[1095,9540,2464],{"class":2463},[1095,9542,2467],{"class":1108},[1095,9544,4227],{"class":1112},[1095,9546,2353],{"class":1138},[1095,9548,9549,9551,9553,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575,9577],{"class":1097,"line":3326},[1095,9550,3101],{"class":1108},[1095,9552,4071],{"class":1177},[1095,9554,3281],{"class":1138},[1095,9556,1185],{"class":1184},[1095,9558,2638],{"class":1188},[1095,9560,1185],{"class":1184},[1095,9562,1809],{"class":1138},[1095,9564,2645],{"class":2463},[1095,9566,1181],{"class":1138},[1095,9568,4252],{"class":1177},[1095,9570,4255],{"class":1138},[1095,9572,4094],{"class":1275},[1095,9574,1225],{"class":1138},[1095,9576,4262],{"class":1446},[1095,9578,1205],{"class":1138},[1095,9580,9581],{"class":1097,"line":3349},[1095,9582,1154],{"emptyLinePlaceholder":1153},[1095,9584,9585,9587,9590,9592,9594],{"class":1097,"line":3401},[1095,9586,3812],{"class":1546},[1095,9588,9589],{"class":3815}," RQJobStatusView",[1095,9591,1181],{"class":1138},[1095,9593,8801],{"class":3821},[1095,9595,1559],{"class":1138},[1095,9597,9598,9600,9603],{"class":1097,"line":3441},[1095,9599,2338],{"class":2337},[1095,9601,9602],{"class":2341},"Check RQ job status",[1095,9604,2345],{"class":2337},[1095,9606,9607],{"class":1097,"line":3455},[1095,9608,2743],{"class":1112},[1095,9610,9611,9613,9615,9617,9619,9621,9623,9625,9627,9630],{"class":1097,"line":3460},[1095,9612,2755],{"class":1546},[1095,9614,2675],{"class":1546},[1095,9616,4660],{"class":1524},[1095,9618,1181],{"class":1138},[1095,9620,1556],{"class":1555},[1095,9622,1194],{"class":1138},[1095,9624,3855],{"class":2319},[1095,9626,1194],{"class":1138},[1095,9628,9629],{"class":2319}," job_id",[1095,9631,1559],{"class":1138},[1095,9633,9634,9636],{"class":1097,"line":3465},[1095,9635,3205],{"class":1108},[1095,9637,2353],{"class":1138},[1095,9639,9640,9642,9644,9646],{"class":1097,"line":3485},[1095,9641,4686],{"class":1108},[1095,9643,6705],{"class":1112},[1095,9645,1109],{"class":1108},[1095,9647,9648],{"class":1112}," Job\n",[1095,9650,9651,9653,9655,9657,9659],{"class":1097,"line":3495},[1095,9652,4686],{"class":1108},[1095,9654,2260],{"class":1138},[1095,9656,8644],{"class":1112},[1095,9658,1109],{"class":1108},[1095,9660,9661],{"class":1112}," redis_conn\n",[1095,9663,9664],{"class":1097,"line":3530},[1095,9665,4052],{"class":1112},[1095,9667,9668],{"class":1097,"line":3535},[1095,9669,9670],{"class":1101},"            # Get job\n",[1095,9672,9673,9675,9677,9680,9682,9685,9687,9689,9691,9693,9695,9697],{"class":1097,"line":3556},[1095,9674,9036],{"class":1112},[1095,9676,1225],{"class":1138},[1095,9678,9679],{"class":1112}," Job",[1095,9681,1139],{"class":1138},[1095,9683,9684],{"class":1177},"fetch",[1095,9686,1181],{"class":1138},[1095,9688,7359],{"class":1177},[1095,9690,1194],{"class":1138},[1095,9692,6913],{"class":1275},[1095,9694,1225],{"class":1138},[1095,9696,6918],{"class":1177},[1095,9698,1205],{"class":1138},[1095,9700,9701],{"class":1097,"line":3562},[1095,9702,4052],{"class":1112},[1095,9704,9705,9707,9709],{"class":1097,"line":3578},[1095,9706,4732],{"class":1112},[1095,9708,1225],{"class":1138},[1095,9710,1796],{"class":1138},[1095,9712,9713,9715,9717,9719,9721,9723],{"class":1097,"line":3597},[1095,9714,4155],{"class":1184},[1095,9716,7359],{"class":1188},[1095,9718,1185],{"class":1184},[1095,9720,1809],{"class":1138},[1095,9722,9629],{"class":1112},[1095,9724,1358],{"class":1138},[1095,9726,9727,9729,9731,9733,9735,9737,9739,9742],{"class":1097,"line":3603},[1095,9728,4155],{"class":1184},[1095,9730,2915],{"class":1188},[1095,9732,1185],{"class":1184},[1095,9734,1809],{"class":1138},[1095,9736,7366],{"class":1112},[1095,9738,1139],{"class":1138},[1095,9740,9741],{"class":1177},"get_status",[1095,9743,9744],{"class":1138},"(),\n",[1095,9746,9747,9749,9752,9754,9756,9758,9760,9762,9764,9767,9769,9771,9773,9775,9777,9779,9782],{"class":1097,"line":3617},[1095,9748,4155],{"class":1184},[1095,9750,9751],{"class":1188},"created_at",[1095,9753,1185],{"class":1184},[1095,9755,1809],{"class":1138},[1095,9757,7366],{"class":1112},[1095,9759,1139],{"class":1138},[1095,9761,9751],{"class":1171},[1095,9763,1139],{"class":1138},[1095,9765,9766],{"class":1177},"isoformat",[1095,9768,2997],{"class":1138},[1095,9770,4939],{"class":1108},[1095,9772,7366],{"class":1112},[1095,9774,1139],{"class":1138},[1095,9776,9751],{"class":1171},[1095,9778,4948],{"class":1108},[1095,9780,9781],{"class":1420}," None",[1095,9783,1358],{"class":1138},[1095,9785,9786,9788,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809,9811,9813,9815,9817,9819],{"class":1097,"line":3622},[1095,9787,4155],{"class":1184},[1095,9789,9790],{"class":1188},"started_at",[1095,9792,1185],{"class":1184},[1095,9794,1809],{"class":1138},[1095,9796,7366],{"class":1112},[1095,9798,1139],{"class":1138},[1095,9800,9790],{"class":1171},[1095,9802,1139],{"class":1138},[1095,9804,9766],{"class":1177},[1095,9806,2997],{"class":1138},[1095,9808,4939],{"class":1108},[1095,9810,7366],{"class":1112},[1095,9812,1139],{"class":1138},[1095,9814,9790],{"class":1171},[1095,9816,4948],{"class":1108},[1095,9818,9781],{"class":1420},[1095,9820,1358],{"class":1138},[1095,9822,9823,9825,9828,9830,9832,9834,9836,9838,9840,9842,9844,9846,9848,9850,9852,9854,9856],{"class":1097,"line":6325},[1095,9824,4155],{"class":1184},[1095,9826,9827],{"class":1188},"ended_at",[1095,9829,1185],{"class":1184},[1095,9831,1809],{"class":1138},[1095,9833,7366],{"class":1112},[1095,9835,1139],{"class":1138},[1095,9837,9827],{"class":1171},[1095,9839,1139],{"class":1138},[1095,9841,9766],{"class":1177},[1095,9843,2997],{"class":1138},[1095,9845,4939],{"class":1108},[1095,9847,7366],{"class":1112},[1095,9849,1139],{"class":1138},[1095,9851,9827],{"class":1171},[1095,9853,4948],{"class":1108},[1095,9855,9781],{"class":1420},[1095,9857,1358],{"class":1138},[1095,9859,9860],{"class":1097,"line":6342},[1095,9861,4793],{"class":1138},[1095,9863,9864],{"class":1097,"line":6357},[1095,9865,4052],{"class":1112},[1095,9867,9868,9870,9872,9874,9877],{"class":1097,"line":6363},[1095,9869,4057],{"class":1108},[1095,9871,7366],{"class":1112},[1095,9873,1139],{"class":1138},[1095,9875,9876],{"class":1171},"is_finished",[1095,9878,2353],{"class":1138},[1095,9880,9881,9883,9885,9887,9889,9891,9893,9895,9897,9899],{"class":1097,"line":6368},[1095,9882,4896],{"class":1112},[1095,9884,4831],{"class":1138},[1095,9886,1185],{"class":1184},[1095,9888,3253],{"class":1188},[1095,9890,1185],{"class":1184},[1095,9892,4840],{"class":1138},[1095,9894,1633],{"class":1138},[1095,9896,7366],{"class":1112},[1095,9898,1139],{"class":1138},[1095,9900,4849],{"class":1171},[1095,9902,9903,9906,9908,9910,9913],{"class":1097,"line":6373},[1095,9904,9905],{"class":1108},"            elif",[1095,9907,7366],{"class":1112},[1095,9909,1139],{"class":1138},[1095,9911,9912],{"class":1171},"is_failed",[1095,9914,2353],{"class":1138},[1095,9916,9917,9919,9921,9923,9925,9927,9929,9931,9933,9935,9938,9940,9943],{"class":1097,"line":6379},[1095,9918,4896],{"class":1112},[1095,9920,4831],{"class":1138},[1095,9922,1185],{"class":1184},[1095,9924,2638],{"class":1188},[1095,9926,1185],{"class":1184},[1095,9928,4840],{"class":1138},[1095,9930,1633],{"class":1138},[1095,9932,2645],{"class":2463},[1095,9934,1181],{"class":1138},[1095,9936,9937],{"class":1177},"job",[1095,9939,1139],{"class":1138},[1095,9941,9942],{"class":1171},"exc_info",[1095,9944,1205],{"class":1138},[1095,9946,9947],{"class":1097,"line":6391},[1095,9948,4052],{"class":1112},[1095,9950,9951,9953,9955,9957,9959],{"class":1097,"line":6408},[1095,9952,3101],{"class":1108},[1095,9954,4071],{"class":1177},[1095,9956,1181],{"class":1138},[1095,9958,4966],{"class":1177},[1095,9960,1205],{"class":1138},[1095,9962,9963],{"class":1097,"line":6440},[1095,9964,4052],{"class":1112},[1095,9966,9967,9969,9971,9973,9975],{"class":1097,"line":6446},[1095,9968,3261],{"class":1108},[1095,9970,2464],{"class":2463},[1095,9972,2467],{"class":1108},[1095,9974,4227],{"class":1112},[1095,9976,2353],{"class":1138},[1095,9978,9979,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999,10001,10003,10005,10007],{"class":1097,"line":6451},[1095,9980,3101],{"class":1108},[1095,9982,4071],{"class":1177},[1095,9984,3281],{"class":1138},[1095,9986,1185],{"class":1184},[1095,9988,2638],{"class":1188},[1095,9990,1185],{"class":1184},[1095,9992,1809],{"class":1138},[1095,9994,2645],{"class":2463},[1095,9996,1181],{"class":1138},[1095,9998,4252],{"class":1177},[1095,10000,4255],{"class":1138},[1095,10002,4094],{"class":1275},[1095,10004,1225],{"class":1138},[1095,10006,4262],{"class":1446},[1095,10008,1205],{"class":1138},[10010,10011,10012],"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 .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}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 .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 .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--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 .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}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 .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--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 pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--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 .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 .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}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}",{"title":1075,"searchDepth":1098,"depth":1105,"links":10014},[10015,10018,10025],{"id":1032,"depth":1105,"text":1033,"children":10016},[10017],{"id":1063,"depth":1116,"text":1064},{"id":1078,"depth":1105,"text":1079,"children":10019},[10020,10021,10022,10023,10024],{"id":1085,"depth":1116,"text":1086},{"id":1599,"depth":1116,"text":1600},{"id":2146,"depth":1116,"text":2147},{"id":3670,"depth":1116,"text":3671},{"id":5019,"depth":1116,"text":5020},{"id":6667,"depth":1105,"text":6668,"children":10026},[10027,10028,10029],{"id":6674,"depth":1116,"text":6675},{"id":7142,"depth":1116,"text":7143},{"id":8550,"depth":1116,"text":8551},"md",null,{},{"title":725,"description":1028},"xe4eWkTeQPyFisVbnU8d7st_pLvNNdQVU2p2IVa6MWg",[10036,10038],{"title":721,"path":722,"stem":723,"description":10037,"children":-1},"Django Channels extends Django to handle WebSockets, HTTP/2, and other protocols beyond traditional HTTP. This enables building real-time applications like chat systems, live notifications, collaborative tools, and streaming dashboards. This chapter covers Channels architecture, WebSocket consumers, real-time communication patterns, and production deployment strategies.",{"title":729,"path":730,"stem":731,"description":10039,"children":-1},"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.",1772474950186]