[{"data":1,"prerenderedAt":1200},["ShallowReactive",2],{"versions":3,"plugin-litestar-saq":6,"readme-litestar-saq":49},{"v3":4,"v4":5},"3.21.10","4.5.1",{"id":7,"title":8,"body":9,"category":10,"changelog":11,"compatibility":12,"created_at":14,"description":15,"documentation":16,"extension":17,"github":16,"icon":18,"issues":19,"key":20,"latest_version":21,"license":9,"maintainers":22,"meta":27,"monthly_downloads":28,"name":29,"navigation":30,"path":31,"pypi":20,"python_compatibility":32,"python_compatibility_raw":33,"repo":41,"seo":42,"sponsor":43,"stars":44,"stem":45,"type":46,"updated_at":47,"website":16,"__hash__":48},"plugins\u002Fplugins\u002Flitestar-saq.yml","Litestar Saq",null,"Background Processing","https:\u002F\u002Fcofin.github.io\u002Flitesatr-saq\u002Flatest\u002Fchangelog",{"litestar":13},">=2.0.1","2023-10-04T03:57:48","Litestar integration for SAQ","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Flitestar-saq","yml","_default_icon.svg","https:\u002F\u002Fgithub.com\u002Fcofin\u002Flitestar-saq\u002Fissues\u002F","litestar-saq","0.8.0",[23],{"name":24,"github":25,"avatar":26},"Cody Fincher","cofin","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F204685?v=4",{},18416,"Litestar SAQ",true,"\u002Fplugins\u002Flitestar-saq",{"raw":33,"specifier_set":33,"compatible":34},">=3.9",[35,36,37,38,39,40],"3.9","3.10","3.11","3.12","3.13","3.14","litestar-org\u002Flitestar-saq",{"description":15},false,30,"plugins\u002Flitestar-saq","official","2026-06-03T21:07:52","Lsd8xAFL4AHKVUCHRkD87g-C80S_Ibi789Un5fypB0w",{"id":50,"extension":51,"meta":52,"stem":1198,"__hash__":1199},"readme\u002Freadmes\u002Flitestar-saq.md","md",{"body":53},{"type":54,"value":55,"toc":1190},"minimark",[56,61,87,91,105,109,112,295,298,465,468,604,607,842,846,853,1048,1052,1055,1060,1146,1149,1172,1186],[57,58,60],"h2",{"id":59},"installation","Installation",[62,63,68],"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-shell shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","pip install litestar-saq\n","shell","",[69,70,71],"code",{"__ignoreMap":67},[72,73,76,80,84],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"s52Pk","pip",[72,81,83],{"class":82},"sGFVr"," install",[72,85,86],{"class":82}," litestar-saq\n",[88,89,90],"p",{},"For OpenTelemetry support:",[62,92,94],{"className":64,"code":93,"language":66,"meta":67,"style":67},"pip install litestar-saq[otel]\n",[69,95,96],{"__ignoreMap":67},[72,97,98,100,102],{"class":74,"line":75},[72,99,79],{"class":78},[72,101,83],{"class":82},[72,103,104],{"class":82}," litestar-saq[otel]\n",[57,106,108],{"id":107},"usage","Usage",[88,110,111],{},"Here is a basic application that demonstrates how to use the plugin.",[62,113,117],{"className":114,"code":115,"language":116,"meta":67,"style":67},"language-python shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","from litestar import Litestar\nfrom litestar_saq import QueueConfig, SAQConfig, SAQPlugin\n\nsaq = SAQPlugin(\n    config=SAQConfig(\n        use_server_lifespan=True,\n        queue_configs=[\n            QueueConfig(name=\"samples\", dsn=\"redis:\u002F\u002Flocalhost:6379\u002F0\")\n        ],\n    )\n)\napp = Litestar(plugins=[saq])\n","python",[69,118,119,135,160,166,182,196,205,214,253,259,265,270],{"__ignoreMap":67},[72,120,121,125,129,132],{"class":74,"line":75},[72,122,124],{"class":123},"s8R28","from",[72,126,128],{"class":127},"sZSNi"," litestar ",[72,130,131],{"class":123},"import",[72,133,134],{"class":127}," Litestar\n",[72,136,138,140,143,145,148,152,155,157],{"class":74,"line":137},2,[72,139,124],{"class":123},[72,141,142],{"class":127}," litestar_saq ",[72,144,131],{"class":123},[72,146,147],{"class":127}," QueueConfig",[72,149,151],{"class":150},"sDfIl",",",[72,153,154],{"class":127}," SAQConfig",[72,156,151],{"class":150},[72,158,159],{"class":127}," SAQPlugin\n",[72,161,163],{"class":74,"line":162},3,[72,164,165],{"emptyLinePlaceholder":30},"\n",[72,167,169,172,175,179],{"class":74,"line":168},4,[72,170,171],{"class":127},"saq ",[72,173,174],{"class":150},"=",[72,176,178],{"class":177},"s3cPz"," SAQPlugin",[72,180,181],{"class":150},"(\n",[72,183,185,189,191,194],{"class":74,"line":184},5,[72,186,188],{"class":187},"s1nJG","    config",[72,190,174],{"class":150},[72,192,193],{"class":177},"SAQConfig",[72,195,181],{"class":150},[72,197,199,202],{"class":74,"line":198},6,[72,200,201],{"class":187},"        use_server_lifespan",[72,203,204],{"class":150},"=True,\n",[72,206,208,211],{"class":74,"line":207},7,[72,209,210],{"class":187},"        queue_configs",[72,212,213],{"class":150},"=[\n",[72,215,217,220,223,226,228,231,234,236,238,241,243,245,248,250],{"class":74,"line":216},8,[72,218,219],{"class":177},"            QueueConfig",[72,221,222],{"class":150},"(",[72,224,225],{"class":187},"name",[72,227,174],{"class":150},[72,229,230],{"class":150},"\"",[72,232,233],{"class":82},"samples",[72,235,230],{"class":150},[72,237,151],{"class":150},[72,239,240],{"class":187}," dsn",[72,242,174],{"class":150},[72,244,230],{"class":150},[72,246,247],{"class":82},"redis:\u002F\u002Flocalhost:6379\u002F0",[72,249,230],{"class":150},[72,251,252],{"class":150},")\n",[72,254,256],{"class":74,"line":255},9,[72,257,258],{"class":150},"        ],\n",[72,260,262],{"class":74,"line":261},10,[72,263,264],{"class":150},"    )\n",[72,266,268],{"class":74,"line":267},11,[72,269,252],{"class":150},[72,271,273,276,278,281,283,286,289,292],{"class":74,"line":272},12,[72,274,275],{"class":127},"app ",[72,277,174],{"class":150},[72,279,280],{"class":177}," Litestar",[72,282,222],{"class":150},[72,284,285],{"class":187},"plugins",[72,287,288],{"class":150},"=[",[72,290,291],{"class":177},"saq",[72,293,294],{"class":150},"])\n",[88,296,297],{},"You can start a background worker with the following command now:",[62,299,301],{"className":64,"code":300,"language":66,"meta":67,"style":67},"litestar --app-dir=examples\u002F --app basic:app workers run\nUsing Litestar app from env: 'basic:app'\nStarting SAQ Workers ──────────────────────────────────────────────────────────────────\nINFO - 2023-10-04 17:39:03,255 - saq - worker - Worker starting: Queue\u003Credis=Redis\u003CConnectionPool\u003CConnection\u003Chost=localhost,port=6379,db=0>>>, name='samples'>\nINFO - 2023-10-04 17:39:06,545 - saq - worker - Worker shutting down\n",[69,302,303,323,348,362,436],{"__ignoreMap":67},[72,304,305,308,311,314,317,320],{"class":74,"line":75},[72,306,307],{"class":78},"litestar",[72,309,310],{"class":82}," --app-dir=examples\u002F",[72,312,313],{"class":82}," --app",[72,315,316],{"class":82}," basic:app",[72,318,319],{"class":82}," workers",[72,321,322],{"class":82}," run\n",[72,324,325,328,330,333,336,339,342,345],{"class":74,"line":137},[72,326,327],{"class":78},"Using",[72,329,280],{"class":82},[72,331,332],{"class":82}," app",[72,334,335],{"class":82}," from",[72,337,338],{"class":82}," env:",[72,340,341],{"class":150}," '",[72,343,344],{"class":82},"basic:app",[72,346,347],{"class":150},"'\n",[72,349,350,353,356,359],{"class":74,"line":162},[72,351,352],{"class":78},"Starting",[72,354,355],{"class":82}," SAQ",[72,357,358],{"class":82}," Workers",[72,360,361],{"class":82}," ──────────────────────────────────────────────────────────────────\n",[72,363,364,367,370,373,376,378,381,383,386,388,391,394,397,400,403,405,408,410,413,415,418,421,423,426,429,431,433],{"class":74,"line":168},[72,365,366],{"class":78},"INFO",[72,368,369],{"class":82}," -",[72,371,372],{"class":82}," 2023-10-04",[72,374,375],{"class":82}," 17:39:03,255",[72,377,369],{"class":82},[72,379,380],{"class":82}," saq",[72,382,369],{"class":82},[72,384,385],{"class":82}," worker",[72,387,369],{"class":82},[72,389,390],{"class":82}," Worker",[72,392,393],{"class":82}," starting:",[72,395,396],{"class":82}," Queue",[72,398,399],{"class":150},"\u003C",[72,401,402],{"class":82},"redis=Redis",[72,404,399],{"class":150},[72,406,407],{"class":82},"ConnectionPool",[72,409,399],{"class":150},[72,411,412],{"class":82},"Connection",[72,414,399],{"class":150},[72,416,417],{"class":82},"host=localhost,port=6379,db=",[72,419,420],{"class":127},"0>>>",[72,422,151],{"class":82},[72,424,425],{"class":82}," name=",[72,427,428],{"class":150},"'",[72,430,233],{"class":82},[72,432,428],{"class":150},[72,434,435],{"class":150},">\n",[72,437,438,440,442,444,447,449,451,453,455,457,459,462],{"class":74,"line":184},[72,439,366],{"class":78},[72,441,369],{"class":82},[72,443,372],{"class":82},[72,445,446],{"class":82}," 17:39:06,545",[72,448,369],{"class":82},[72,450,380],{"class":82},[72,452,369],{"class":82},[72,454,385],{"class":82},[72,456,369],{"class":82},[72,458,390],{"class":82},[72,460,461],{"class":82}," shutting",[72,463,464],{"class":82}," down\n",[88,466,467],{},"You can also start the process for only specific queues. This is helpful if you want separated processes working on different queues instead of combining them.",[62,469,471],{"className":64,"code":470,"language":66,"meta":67,"style":67},"litestar --app-dir=examples\u002F --app basic:app workers run --queues sample\nUsing Litestar app from env: 'basic:app'\nStarting SAQ Workers ──────────────────────────────────────────────────────────────────\nINFO - 2023-10-04 17:39:03,255 - saq - worker - Worker starting: Queue\u003Credis=Redis\u003CConnectionPool\u003CConnection\u003Chost=localhost,port=6379,db=0>>>, name='samples'>\nINFO - 2023-10-04 17:39:06,545 - saq - worker - Worker shutting down\n",[69,472,473,494,512,522,578],{"__ignoreMap":67},[72,474,475,477,479,481,483,485,488,491],{"class":74,"line":75},[72,476,307],{"class":78},[72,478,310],{"class":82},[72,480,313],{"class":82},[72,482,316],{"class":82},[72,484,319],{"class":82},[72,486,487],{"class":82}," run",[72,489,490],{"class":82}," --queues",[72,492,493],{"class":82}," sample\n",[72,495,496,498,500,502,504,506,508,510],{"class":74,"line":137},[72,497,327],{"class":78},[72,499,280],{"class":82},[72,501,332],{"class":82},[72,503,335],{"class":82},[72,505,338],{"class":82},[72,507,341],{"class":150},[72,509,344],{"class":82},[72,511,347],{"class":150},[72,513,514,516,518,520],{"class":74,"line":162},[72,515,352],{"class":78},[72,517,355],{"class":82},[72,519,358],{"class":82},[72,521,361],{"class":82},[72,523,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576],{"class":74,"line":168},[72,525,366],{"class":78},[72,527,369],{"class":82},[72,529,372],{"class":82},[72,531,375],{"class":82},[72,533,369],{"class":82},[72,535,380],{"class":82},[72,537,369],{"class":82},[72,539,385],{"class":82},[72,541,369],{"class":82},[72,543,390],{"class":82},[72,545,393],{"class":82},[72,547,396],{"class":82},[72,549,399],{"class":150},[72,551,402],{"class":82},[72,553,399],{"class":150},[72,555,407],{"class":82},[72,557,399],{"class":150},[72,559,412],{"class":82},[72,561,399],{"class":150},[72,563,417],{"class":82},[72,565,420],{"class":127},[72,567,151],{"class":82},[72,569,425],{"class":82},[72,571,428],{"class":150},[72,573,233],{"class":82},[72,575,428],{"class":150},[72,577,435],{"class":150},[72,579,580,582,584,586,588,590,592,594,596,598,600,602],{"class":74,"line":184},[72,581,366],{"class":78},[72,583,369],{"class":82},[72,585,372],{"class":82},[72,587,446],{"class":82},[72,589,369],{"class":82},[72,591,380],{"class":82},[72,593,369],{"class":82},[72,595,385],{"class":82},[72,597,369],{"class":82},[72,599,390],{"class":82},[72,601,461],{"class":82},[72,603,464],{"class":82},[88,605,606],{},"If you are starting the process for only specific queues and still want to read from the other queues or enqueue a task into another queue that was not initialized in your worker or is found somewhere else, you can do so like here",[62,608,610],{"className":114,"code":609,"language":116,"meta":67,"style":67},"import os\nfrom saq import Queue\n\ndef get_queue_directly(queue_name: str, redis_url: str) -> Queue:\n    return Queue.from_url(redis_url, name=queue_name)\n\nredis_url = os.getenv(\"REDIS_URL\")\nqueue = get_queue_directly(\"queue-in-other-process\", redis_url)\n\n# Get queue info\ninfo = await queue.info(jobs=True)\n\n# Enqueue new task\nawait queue.enqueue(\"task_name\", arg1=\"value1\")\n",[69,611,612,619,631,635,675,704,708,734,758,762,768,794,798,804],{"__ignoreMap":67},[72,613,614,616],{"class":74,"line":75},[72,615,131],{"class":123},[72,617,618],{"class":127}," os\n",[72,620,621,623,626,628],{"class":74,"line":137},[72,622,124],{"class":123},[72,624,625],{"class":127}," saq ",[72,627,131],{"class":123},[72,629,630],{"class":127}," Queue\n",[72,632,633],{"class":74,"line":162},[72,634,165],{"emptyLinePlaceholder":30},[72,636,637,641,644,646,649,652,655,657,660,662,664,667,670,672],{"class":74,"line":168},[72,638,640],{"class":639},"smZ93","def",[72,642,643],{"class":177}," get_queue_directly",[72,645,222],{"class":150},[72,647,648],{"class":187},"queue_name",[72,650,651],{"class":150},":",[72,653,654],{"class":78}," str",[72,656,151],{"class":150},[72,658,659],{"class":187}," redis_url",[72,661,651],{"class":150},[72,663,654],{"class":78},[72,665,666],{"class":150},")",[72,668,669],{"class":150}," ->",[72,671,396],{"class":127},[72,673,674],{"class":150},":\n",[72,676,677,680,682,685,688,690,693,695,698,700,702],{"class":74,"line":184},[72,678,679],{"class":123},"    return",[72,681,396],{"class":127},[72,683,684],{"class":150},".",[72,686,687],{"class":177},"from_url",[72,689,222],{"class":150},[72,691,692],{"class":177},"redis_url",[72,694,151],{"class":150},[72,696,697],{"class":187}," name",[72,699,174],{"class":150},[72,701,648],{"class":177},[72,703,252],{"class":150},[72,705,706],{"class":74,"line":198},[72,707,165],{"emptyLinePlaceholder":30},[72,709,710,713,715,718,720,723,725,727,730,732],{"class":74,"line":207},[72,711,712],{"class":127},"redis_url ",[72,714,174],{"class":150},[72,716,717],{"class":127}," os",[72,719,684],{"class":150},[72,721,722],{"class":177},"getenv",[72,724,222],{"class":150},[72,726,230],{"class":150},[72,728,729],{"class":82},"REDIS_URL",[72,731,230],{"class":150},[72,733,252],{"class":150},[72,735,736,739,741,743,745,747,750,752,754,756],{"class":74,"line":216},[72,737,738],{"class":127},"queue ",[72,740,174],{"class":150},[72,742,643],{"class":177},[72,744,222],{"class":150},[72,746,230],{"class":150},[72,748,749],{"class":82},"queue-in-other-process",[72,751,230],{"class":150},[72,753,151],{"class":150},[72,755,659],{"class":177},[72,757,252],{"class":150},[72,759,760],{"class":74,"line":255},[72,761,165],{"emptyLinePlaceholder":30},[72,763,764],{"class":74,"line":261},[72,765,767],{"class":766},"sWuyu","# Get queue info\n",[72,769,770,773,775,778,781,783,786,788,791],{"class":74,"line":267},[72,771,772],{"class":127},"info ",[72,774,174],{"class":150},[72,776,777],{"class":123}," await",[72,779,780],{"class":127}," queue",[72,782,684],{"class":150},[72,784,785],{"class":177},"info",[72,787,222],{"class":150},[72,789,790],{"class":187},"jobs",[72,792,793],{"class":150},"=True)\n",[72,795,796],{"class":74,"line":272},[72,797,165],{"emptyLinePlaceholder":30},[72,799,801],{"class":74,"line":800},13,[72,802,803],{"class":766},"# Enqueue new task\n",[72,805,807,810,812,814,817,819,821,824,826,828,831,833,835,838,840],{"class":74,"line":806},14,[72,808,809],{"class":123},"await",[72,811,780],{"class":127},[72,813,684],{"class":150},[72,815,816],{"class":177},"enqueue",[72,818,222],{"class":150},[72,820,230],{"class":150},[72,822,823],{"class":82},"task_name",[72,825,230],{"class":150},[72,827,151],{"class":150},[72,829,830],{"class":187}," arg1",[72,832,174],{"class":150},[72,834,230],{"class":150},[72,836,837],{"class":82},"value1",[72,839,230],{"class":150},[72,841,252],{"class":150},[57,843,845],{"id":844},"monitored-jobs","Monitored Jobs",[88,847,848,849,852],{},"For long-running tasks, use the ",[69,850,851],{},"monitored_job"," decorator to automatically send heartbeats and prevent SAQ from marking jobs as stuck:",[62,854,856],{"className":114,"code":855,"language":116,"meta":67,"style":67},"from litestar_saq import monitored_job\n\n@monitored_job()  # Auto-calculates interval from job.heartbeat\nasync def long_running_task(ctx):\n    await process_large_dataset()\n    return {\"status\": \"complete\"}\n\n@monitored_job(interval=30.0)  # Explicit 30-second interval\nasync def train_model(ctx, model_id: str):\n    for epoch in range(100):\n        await train_epoch(model)\n    return {\"model_id\": model_id}\n",[69,857,858,869,873,886,905,916,943,947,969,993,1014,1029],{"__ignoreMap":67},[72,859,860,862,864,866],{"class":74,"line":75},[72,861,124],{"class":123},[72,863,142],{"class":127},[72,865,131],{"class":123},[72,867,868],{"class":127}," monitored_job\n",[72,870,871],{"class":74,"line":137},[72,872,165],{"emptyLinePlaceholder":30},[72,874,875,878,880,883],{"class":74,"line":162},[72,876,877],{"class":150},"@",[72,879,851],{"class":177},[72,881,882],{"class":150},"()",[72,884,885],{"class":766},"  # Auto-calculates interval from job.heartbeat\n",[72,887,888,891,894,897,899,902],{"class":74,"line":168},[72,889,890],{"class":639},"async",[72,892,893],{"class":639}," def",[72,895,896],{"class":177}," long_running_task",[72,898,222],{"class":150},[72,900,901],{"class":187},"ctx",[72,903,904],{"class":150},"):\n",[72,906,907,910,913],{"class":74,"line":184},[72,908,909],{"class":123},"    await",[72,911,912],{"class":177}," process_large_dataset",[72,914,915],{"class":150},"()\n",[72,917,918,920,923,925,928,930,932,935,938,940],{"class":74,"line":198},[72,919,679],{"class":123},[72,921,922],{"class":150}," {",[72,924,230],{"class":150},[72,926,927],{"class":82},"status",[72,929,230],{"class":150},[72,931,651],{"class":150},[72,933,934],{"class":150}," \"",[72,936,937],{"class":82},"complete",[72,939,230],{"class":150},[72,941,942],{"class":150},"}\n",[72,944,945],{"class":74,"line":207},[72,946,165],{"emptyLinePlaceholder":30},[72,948,949,951,953,955,958,960,964,966],{"class":74,"line":216},[72,950,877],{"class":150},[72,952,851],{"class":177},[72,954,222],{"class":150},[72,956,957],{"class":187},"interval",[72,959,174],{"class":150},[72,961,963],{"class":962},"sYRBq","30.0",[72,965,666],{"class":150},[72,967,968],{"class":766},"  # Explicit 30-second interval\n",[72,970,971,973,975,978,980,982,984,987,989,991],{"class":74,"line":255},[72,972,890],{"class":639},[72,974,893],{"class":639},[72,976,977],{"class":177}," train_model",[72,979,222],{"class":150},[72,981,901],{"class":187},[72,983,151],{"class":150},[72,985,986],{"class":187}," model_id",[72,988,651],{"class":150},[72,990,654],{"class":78},[72,992,904],{"class":150},[72,994,995,998,1001,1004,1007,1009,1012],{"class":74,"line":261},[72,996,997],{"class":123},"    for",[72,999,1000],{"class":127}," epoch ",[72,1002,1003],{"class":123},"in",[72,1005,1006],{"class":177}," range",[72,1008,222],{"class":150},[72,1010,1011],{"class":962},"100",[72,1013,904],{"class":150},[72,1015,1016,1019,1022,1024,1027],{"class":74,"line":267},[72,1017,1018],{"class":123},"        await",[72,1020,1021],{"class":177}," train_epoch",[72,1023,222],{"class":150},[72,1025,1026],{"class":177},"model",[72,1028,252],{"class":150},[72,1030,1031,1033,1035,1037,1040,1042,1044,1046],{"class":74,"line":272},[72,1032,679],{"class":123},[72,1034,922],{"class":150},[72,1036,230],{"class":150},[72,1038,1039],{"class":82},"model_id",[72,1041,230],{"class":150},[72,1043,651],{"class":150},[72,1045,986],{"class":127},[72,1047,942],{"class":150},[57,1049,1051],{"id":1050},"opentelemetry-integration","OpenTelemetry Integration",[88,1053,1054],{},"litestar-saq supports optional OpenTelemetry instrumentation for distributed tracing.",[1056,1057,1059],"h3",{"id":1058},"configuration","Configuration",[62,1061,1063],{"className":114,"code":1062,"language":116,"meta":67,"style":67},"from litestar_saq import SAQConfig, QueueConfig\n\nconfig = SAQConfig(\n    queue_configs=[QueueConfig(dsn=\"redis:\u002F\u002Flocalhost:6379\u002F0\")],\n    enable_otel=None,  # Auto-detect (default) - enabled if OTEL installed AND Litestar OpenTelemetryPlugin is active\n    # enable_otel=True,  # Force enable (raises error if not installed)\n    # enable_otel=False,  # Force disable\n)\n",[69,1064,1065,1080,1084,1095,1121,1132,1137,1142],{"__ignoreMap":67},[72,1066,1067,1069,1071,1073,1075,1077],{"class":74,"line":75},[72,1068,124],{"class":123},[72,1070,142],{"class":127},[72,1072,131],{"class":123},[72,1074,154],{"class":127},[72,1076,151],{"class":150},[72,1078,1079],{"class":127}," QueueConfig\n",[72,1081,1082],{"class":74,"line":137},[72,1083,165],{"emptyLinePlaceholder":30},[72,1085,1086,1089,1091,1093],{"class":74,"line":162},[72,1087,1088],{"class":127},"config ",[72,1090,174],{"class":150},[72,1092,154],{"class":177},[72,1094,181],{"class":150},[72,1096,1097,1100,1102,1105,1107,1110,1112,1114,1116,1118],{"class":74,"line":168},[72,1098,1099],{"class":187},"    queue_configs",[72,1101,288],{"class":150},[72,1103,1104],{"class":177},"QueueConfig",[72,1106,222],{"class":150},[72,1108,1109],{"class":187},"dsn",[72,1111,174],{"class":150},[72,1113,230],{"class":150},[72,1115,247],{"class":82},[72,1117,230],{"class":150},[72,1119,1120],{"class":150},")],\n",[72,1122,1123,1126,1129],{"class":74,"line":184},[72,1124,1125],{"class":187},"    enable_otel",[72,1127,1128],{"class":150},"=None,",[72,1130,1131],{"class":766},"  # Auto-detect (default) - enabled if OTEL installed AND Litestar OpenTelemetryPlugin is active\n",[72,1133,1134],{"class":74,"line":198},[72,1135,1136],{"class":766},"    # enable_otel=True,  # Force enable (raises error if not installed)\n",[72,1138,1139],{"class":74,"line":207},[72,1140,1141],{"class":766},"    # enable_otel=False,  # Force disable\n",[72,1143,1144],{"class":74,"line":216},[72,1145,252],{"class":150},[88,1147,1148],{},"When enabled, the plugin creates:",[1150,1151,1152,1160,1166],"ul",{},[1153,1154,1155,1159],"li",{},[1156,1157,1158],"strong",{},"CONSUMER spans"," for job processing",[1153,1161,1162,1165],{},[1156,1163,1164],{},"PRODUCER spans"," for job enqueue operations",[1153,1167,1168,1171],{},[1156,1169,1170],{},"Automatic context propagation"," across process boundaries",[88,1173,1174,1175,1182,1183,684],{},"Spans follow ",[1176,1177,1181],"a",{"href":1178,"rel":1179},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fmessaging\u002F",[1180],"nofollow","OpenTelemetry messaging semantic conventions"," with ",[69,1184,1185],{},"messaging.system = \"saq\"",[1187,1188,1189],"style",{},"html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}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 .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .s1nJG, html code.shiki .s1nJG{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}",{"title":67,"searchDepth":137,"depth":137,"links":1191},[1192,1193,1194,1195],{"id":59,"depth":137,"text":60},{"id":107,"depth":137,"text":108},{"id":844,"depth":137,"text":845},{"id":1050,"depth":137,"text":1051,"children":1196},[1197],{"id":1058,"depth":162,"text":1059},"readmes\u002Flitestar-saq","sGUDTeZWwq_CILpOjuJyzqhfBefw7HVJ-xQeF8wbOaA",1785155663550]