Compare commits

..

3 Commits

Author SHA1 Message Date
37f2fbf4b9 docs(wiki): added copyable prompt to generate wiki in doc-forge wiki 2026-09-14 23:10:04 +05:30
49a00351bb docs: collect mongo-ops lib (mkdocstrings) + wiki into separate site subpaths, fix mcp server name, expose port 8007
- mongo-ops now serves /mongo-ops/wiki/ and /mongo-ops/lib/ independently
- add mongo-ops MCP bundle under mcp/mongo-ops
- fix copy-paste mcp server (jwtlib -> mongo_ops) in config.yml
- .drone.yml/Dockerfile: publish port 8007 for mongo-ops MCP
2026-09-14 22:33:34 +05:30
1bfbbebfa3 docs: collect mongo-ops wiki (UC 18 aggregation + UC 19 bulk ops in Advanced Usage, Testing merged into top-level tab, Common Patterns removed, prev/next footer enabled) 2026-09-14 21:16:46 +05:30
164 changed files with 58328 additions and 5907 deletions

View File

@@ -73,6 +73,7 @@ steps:
-p 8004:8004 \
-p 8005:8005 \
-p 8006:8006 \
-p 8007:8007 \
--restart always \
aetos/docs:latest

View File

@@ -46,6 +46,6 @@ COPY media-manager /usr/share/nginx/html/media-manager
# --- MCP bundles -----------------------------------------------------------
COPY mcp /app/mcp
EXPOSE 8000 8001 8002 8003 8004 8005 8006 9000
EXPOSE 8000 8001 8002 8003 8004 8005 8006 8007 9000
CMD ["python", "main.py"]

View File

@@ -177,7 +177,8 @@
<h3>Mongo Ops</h3>
<p>A modular, async MongoDB operations layer for FastAPI microservices. Simplifies CRUD, transactions, and model management.</p>
<div class="card-actions">
<a href="/mongo-ops/" target="_blank">view wiki</a>
<a href="/mongo-ops/wiki/" target="_blank">view wiki</a>
<a href="/mongo-ops/lib/" target="_blank">view lib</a>
</div>
</div>
</div>

View File

@@ -91,6 +91,8 @@ repos:
section: libraries
docs:
wiki: site
lib: site
mcp: { bundle: docs/mcp, server: mongo_ops, port: 8007 }
- name: auth-server
source: ../auth-server

Binary file not shown.

View File

@@ -764,8 +764,530 @@ OpenAPI-based API docs.</p>
<h2 id="related-resources">🔗 Related Resources</h2>
<ul>
<li><strong>Source Code:</strong> the <code>doc-forge</code> repository</li>
<li><strong>Wiki Kind:</strong> hand-written content lives in <code>docs/wiki/</code></li>
<li><strong>MCP Bundle:</strong> generated by <code>doc-forge build --mcp --module docforge</code> into <code>docs/mcp/</code></li>
<li><strong>Wiki Kind:</strong> hand-written content lives in <code>docs/wiki/</code> or use the prompt mentioned below
<div class="language-markdown highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-0-100">100</a></span>
<span class="normal"><a href="#__codelineno-0-101">101</a></span>
<span class="normal"><a href="#__codelineno-0-102">102</a></span>
<span class="normal"><a href="#__codelineno-0-103">103</a></span>
<span class="normal"><a href="#__codelineno-0-104">104</a></span>
<span class="normal"><a href="#__codelineno-0-105">105</a></span>
<span class="normal"><a href="#__codelineno-0-106">106</a></span>
<span class="normal"><a href="#__codelineno-0-107">107</a></span>
<span class="normal"><a href="#__codelineno-0-108">108</a></span>
<span class="normal"><a href="#__codelineno-0-109">109</a></span>
<span class="normal"><a href="#__codelineno-0-110">110</a></span>
<span class="normal"><a href="#__codelineno-0-111">111</a></span>
<span class="normal"><a href="#__codelineno-0-112">112</a></span>
<span class="normal"><a href="#__codelineno-0-113">113</a></span>
<span class="normal"><a href="#__codelineno-0-114">114</a></span>
<span class="normal"><a href="#__codelineno-0-115">115</a></span>
<span class="normal"><a href="#__codelineno-0-116">116</a></span>
<span class="normal"><a href="#__codelineno-0-117">117</a></span>
<span class="normal"><a href="#__codelineno-0-118">118</a></span>
<span class="normal"><a href="#__codelineno-0-119">119</a></span>
<span class="normal"><a href="#__codelineno-0-120">120</a></span>
<span class="normal"><a href="#__codelineno-0-121">121</a></span>
<span class="normal"><a href="#__codelineno-0-122">122</a></span>
<span class="normal"><a href="#__codelineno-0-123">123</a></span>
<span class="normal"><a href="#__codelineno-0-124">124</a></span>
<span class="normal"><a href="#__codelineno-0-125">125</a></span>
<span class="normal"><a href="#__codelineno-0-126">126</a></span>
<span class="normal"><a href="#__codelineno-0-127">127</a></span>
<span class="normal"><a href="#__codelineno-0-128">128</a></span>
<span class="normal"><a href="#__codelineno-0-129">129</a></span>
<span class="normal"><a href="#__codelineno-0-130">130</a></span>
<span class="normal"><a href="#__codelineno-0-131">131</a></span>
<span class="normal"><a href="#__codelineno-0-132">132</a></span>
<span class="normal"><a href="#__codelineno-0-133">133</a></span>
<span class="normal"><a href="#__codelineno-0-134">134</a></span>
<span class="normal"><a href="#__codelineno-0-135">135</a></span>
<span class="normal"><a href="#__codelineno-0-136">136</a></span>
<span class="normal"><a href="#__codelineno-0-137">137</a></span>
<span class="normal"><a href="#__codelineno-0-138">138</a></span>
<span class="normal"><a href="#__codelineno-0-139">139</a></span>
<span class="normal"><a href="#__codelineno-0-140">140</a></span>
<span class="normal"><a href="#__codelineno-0-141">141</a></span>
<span class="normal"><a href="#__codelineno-0-142">142</a></span>
<span class="normal"><a href="#__codelineno-0-143">143</a></span>
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
<span class="normal"><a href="#__codelineno-0-148">148</a></span>
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
<span class="normal"><a href="#__codelineno-0-153">153</a></span>
<span class="normal"><a href="#__codelineno-0-154">154</a></span>
<span class="normal"><a href="#__codelineno-0-155">155</a></span>
<span class="normal"><a href="#__codelineno-0-156">156</a></span>
<span class="normal"><a href="#__codelineno-0-157">157</a></span>
<span class="normal"><a href="#__codelineno-0-158">158</a></span>
<span class="normal"><a href="#__codelineno-0-159">159</a></span>
<span class="normal"><a href="#__codelineno-0-160">160</a></span>
<span class="normal"><a href="#__codelineno-0-161">161</a></span>
<span class="normal"><a href="#__codelineno-0-162">162</a></span>
<span class="normal"><a href="#__codelineno-0-163">163</a></span>
<span class="normal"><a href="#__codelineno-0-164">164</a></span>
<span class="normal"><a href="#__codelineno-0-165">165</a></span>
<span class="normal"><a href="#__codelineno-0-166">166</a></span>
<span class="normal"><a href="#__codelineno-0-167">167</a></span>
<span class="normal"><a href="#__codelineno-0-168">168</a></span>
<span class="normal"><a href="#__codelineno-0-169">169</a></span>
<span class="normal"><a href="#__codelineno-0-170">170</a></span>
<span class="normal"><a href="#__codelineno-0-171">171</a></span>
<span class="normal"><a href="#__codelineno-0-172">172</a></span>
<span class="normal"><a href="#__codelineno-0-173">173</a></span>
<span class="normal"><a href="#__codelineno-0-174">174</a></span>
<span class="normal"><a href="#__codelineno-0-175">175</a></span>
<span class="normal"><a href="#__codelineno-0-176">176</a></span>
<span class="normal"><a href="#__codelineno-0-177">177</a></span>
<span class="normal"><a href="#__codelineno-0-178">178</a></span>
<span class="normal"><a href="#__codelineno-0-179">179</a></span>
<span class="normal"><a href="#__codelineno-0-180">180</a></span>
<span class="normal"><a href="#__codelineno-0-181">181</a></span>
<span class="normal"><a href="#__codelineno-0-182">182</a></span>
<span class="normal"><a href="#__codelineno-0-183">183</a></span>
<span class="normal"><a href="#__codelineno-0-184">184</a></span>
<span class="normal"><a href="#__codelineno-0-185">185</a></span>
<span class="normal"><a href="#__codelineno-0-186">186</a></span>
<span class="normal"><a href="#__codelineno-0-187">187</a></span>
<span class="normal"><a href="#__codelineno-0-188">188</a></span>
<span class="normal"><a href="#__codelineno-0-189">189</a></span>
<span class="normal"><a href="#__codelineno-0-190">190</a></span>
<span class="normal"><a href="#__codelineno-0-191">191</a></span>
<span class="normal"><a href="#__codelineno-0-192">192</a></span>
<span class="normal"><a href="#__codelineno-0-193">193</a></span>
<span class="normal"><a href="#__codelineno-0-194">194</a></span>
<span class="normal"><a href="#__codelineno-0-195">195</a></span>
<span class="normal"><a href="#__codelineno-0-196">196</a></span>
<span class="normal"><a href="#__codelineno-0-197">197</a></span>
<span class="normal"><a href="#__codelineno-0-198">198</a></span>
<span class="normal"><a href="#__codelineno-0-199">199</a></span>
<span class="normal"><a href="#__codelineno-0-200">200</a></span>
<span class="normal"><a href="#__codelineno-0-201">201</a></span>
<span class="normal"><a href="#__codelineno-0-202">202</a></span>
<span class="normal"><a href="#__codelineno-0-203">203</a></span>
<span class="normal"><a href="#__codelineno-0-204">204</a></span>
<span class="normal"><a href="#__codelineno-0-205">205</a></span>
<span class="normal"><a href="#__codelineno-0-206">206</a></span>
<span class="normal"><a href="#__codelineno-0-207">207</a></span>
<span class="normal"><a href="#__codelineno-0-208">208</a></span>
<span class="normal"><a href="#__codelineno-0-209">209</a></span>
<span class="normal"><a href="#__codelineno-0-210">210</a></span>
<span class="normal"><a href="#__codelineno-0-211">211</a></span>
<span class="normal"><a href="#__codelineno-0-212">212</a></span>
<span class="normal"><a href="#__codelineno-0-213">213</a></span>
<span class="normal"><a href="#__codelineno-0-214">214</a></span>
<span class="normal"><a href="#__codelineno-0-215">215</a></span>
<span class="normal"><a href="#__codelineno-0-216">216</a></span>
<span class="normal"><a href="#__codelineno-0-217">217</a></span>
<span class="normal"><a href="#__codelineno-0-218">218</a></span>
<span class="normal"><a href="#__codelineno-0-219">219</a></span>
<span class="normal"><a href="#__codelineno-0-220">220</a></span>
<span class="normal"><a href="#__codelineno-0-221">221</a></span>
<span class="normal"><a href="#__codelineno-0-222">222</a></span>
<span class="normal"><a href="#__codelineno-0-223">223</a></span>
<span class="normal"><a href="#__codelineno-0-224">224</a></span>
<span class="normal"><a href="#__codelineno-0-225">225</a></span>
<span class="normal"><a href="#__codelineno-0-226">226</a></span>
<span class="normal"><a href="#__codelineno-0-227">227</a></span>
<span class="normal"><a href="#__codelineno-0-228">228</a></span>
<span class="normal"><a href="#__codelineno-0-229">229</a></span>
<span class="normal"><a href="#__codelineno-0-230">230</a></span>
<span class="normal"><a href="#__codelineno-0-231">231</a></span>
<span class="normal"><a href="#__codelineno-0-232">232</a></span>
<span class="normal"><a href="#__codelineno-0-233">233</a></span>
<span class="normal"><a href="#__codelineno-0-234">234</a></span>
<span class="normal"><a href="#__codelineno-0-235">235</a></span>
<span class="normal"><a href="#__codelineno-0-236">236</a></span>
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
<span class="normal"><a href="#__codelineno-0-241">241</a></span>
<span class="normal"><a href="#__codelineno-0-242">242</a></span>
<span class="normal"><a href="#__codelineno-0-243">243</a></span>
<span class="normal"><a href="#__codelineno-0-244">244</a></span>
<span class="normal"><a href="#__codelineno-0-245">245</a></span>
<span class="normal"><a href="#__codelineno-0-246">246</a></span>
<span class="normal"><a href="#__codelineno-0-247">247</a></span>
<span class="normal"><a href="#__codelineno-0-248">248</a></span>
<span class="normal"><a href="#__codelineno-0-249">249</a></span>
<span class="normal"><a href="#__codelineno-0-250">250</a></span>
<span class="normal"><a href="#__codelineno-0-251">251</a></span>
<span class="normal"><a href="#__codelineno-0-252">252</a></span>
<span class="normal"><a href="#__codelineno-0-253">253</a></span>
<span class="normal"><a href="#__codelineno-0-254">254</a></span>
<span class="normal"><a href="#__codelineno-0-255">255</a></span>
<span class="normal"><a href="#__codelineno-0-256">256</a></span>
<span class="normal"><a href="#__codelineno-0-257">257</a></span>
<span class="normal"><a href="#__codelineno-0-258">258</a></span>
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
<span class="normal"><a href="#__codelineno-0-261">261</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="gh"># AGENTS.md — Wiki Authoring Guide (Aetoskia)</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a>This file instructs AI agents how to create, extend, and maintain the wiki
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a>(<span class="sb">`docs/wiki/**`</span>) for any Aetoskia repository. The reference implementation is
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="sb">`mongo-ops`</span> — its wiki went through several revisions to reach the structure
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a>below and should be treated as the canonical example.
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a>---
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9"></a>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="gu">## 1. Doc model — know the two sources of truth</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11"></a>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12"></a>Every repo keeps two distinct kinds of documentation that must <span class="gs">**not**</span> bleed
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13"></a>into each other:
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14"></a>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15"></a>| Kind | Source | Where | Audience |
</span><span id="__span-0-16"><a id="__codelineno-0-16" name="__codelineno-0-16"></a>|-------------------|-----------------------|------------------------------------------|------------------------------------|
</span><span id="__span-0-17"><a id="__codelineno-0-17" name="__codelineno-0-17"></a>| <span class="gs">**Wiki**</span> | Hand-written markdown | <span class="sb">`docs/wiki/**`</span> | Humans (how-to, examples, testing) |
</span><span id="__span-0-18"><a id="__codelineno-0-18" name="__codelineno-0-18"></a>| <span class="gs">**API reference**</span> | Docstrings (GSDFC) | Generated → <span class="sb">`docs/lib/**`</span>, <span class="sb">`docs/mcp/**`</span> | Consumers (exact contracts) |
</span><span id="__span-0-19"><a id="__codelineno-0-19" name="__codelineno-0-19"></a>
</span><span id="__span-0-20"><a id="__codelineno-0-20" name="__codelineno-0-20"></a>Rules:
</span><span id="__span-0-21"><a id="__codelineno-0-21" name="__codelineno-0-21"></a>
</span><span id="__span-0-22"><a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="k">-</span><span class="w"> </span>The wiki is written <span class="gs">**for humans**</span> — how-to guides, recipes, and testing
</span><span id="__span-0-23"><a id="__codelineno-0-23" name="__codelineno-0-23"></a> patterns. It is never generated.
</span><span id="__span-0-24"><a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="k">-</span><span class="w"> </span>API contracts (signatures, parameter types, exact behavior) live in the
</span><span id="__span-0-25"><a id="__codelineno-0-25" name="__codelineno-0-25"></a> docstrings and the machine-readable bundle under <span class="sb">`docs/mcp/`</span>. <span class="gs">**Never**</span>
</span><span id="__span-0-26"><a id="__codelineno-0-26" name="__codelineno-0-26"></a> duplicate full API documentation in the wiki — link to the lib site instead.
</span><span id="__span-0-27"><a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="k">-</span><span class="w"> </span>If a page starts to drift into contract territory, cut it down to usage and
</span><span id="__span-0-28"><a id="__codelineno-0-28" name="__codelineno-0-28"></a> point at <span class="sb">`docs/lib/`</span>.
</span><span id="__span-0-29"><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">-</span><span class="w"> </span>This doc model is stated on every index page as a blockquote; keep it there:
</span><span id="__span-0-30"><a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="k"> &gt; </span><span class="ge">**Doc model:** this wiki is written for humans — how‑to guides, examples,</span>
</span><span id="__span-0-31"><a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="k"> &gt; </span><span class="ge">and testing recipes. The authoritative API contracts live in the code</span>
</span><span id="__span-0-32"><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k"> &gt; </span><span class="ge">(docstrings) and the machine‑readable bundle under `docs/mcp/`.</span>
</span><span id="__span-0-33"><a id="__codelineno-0-33" name="__codelineno-0-33"></a>
</span><span id="__span-0-34"><a id="__codelineno-0-34" name="__codelineno-0-34"></a>---
</span><span id="__span-0-35"><a id="__codelineno-0-35" name="__codelineno-0-35"></a>
</span><span id="__span-0-36"><a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="gu">## 2. Directory layout &amp; file naming</span>
</span><span id="__span-0-37"><a id="__codelineno-0-37" name="__codelineno-0-37"></a>
</span><span id="__span-0-38"><a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sb">```</span>
</span><span id="__span-0-39"><a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sb">docs/wiki/</span>
</span><span id="__span-0-40"><a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sb">├── index.md # site Home</span>
</span><span id="__span-0-41"><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sb">├── 01_overview.md</span>
</span><span id="__span-0-42"><a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sb">├── 02_components.md</span>
</span><span id="__span-0-43"><a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sb">├── 03_use_cases/ # nested directory → nav group</span>
</span><span id="__span-0-44"><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sb">│ ├── 01_basic_crud.md</span>
</span><span id="__span-0-45"><a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sb">│ ├── 02_custom_repo.md</span>
</span><span id="__span-0-46"><a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sb">│ └── ...</span>
</span><span id="__span-0-47"><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sb">├── 04_best_practices.md</span>
</span><span id="__span-0-48"><a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sb">├── 06_error_handling.md</span>
</span><span id="__span-0-49"><a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sb">└── 07_testing_example.md</span>
</span><span id="__span-0-50"><a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sb">```</span>
</span><span id="__span-0-51"><a id="__codelineno-0-51" name="__codelineno-0-51"></a>
</span><span id="__span-0-52"><a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="k">-</span><span class="w"> </span>Location: <span class="sb">`docs/wiki/`</span> (hand-written only).
</span><span id="__span-0-53"><a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="k">-</span><span class="w"> </span>File names: <span class="sb">`NN_snake_case_name.md`</span> with a <span class="gs">**zero-padded two-digit**</span> numeric
</span><span id="__span-0-54"><a id="__codelineno-0-54" name="__codelineno-0-54"></a> prefix. e.g. <span class="sb">`01_overview.md`</span>, <span class="sb">`03_use_cases/07_caching.md`</span>.
</span><span id="__span-0-55"><a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="k">-</span><span class="w"> </span>Top-level pages use <span class="sb">`NN_name.md`</span> directly. High-volume sections get their own
</span><span id="__span-0-56"><a id="__codelineno-0-56" name="__codelineno-0-56"></a> directory, e.g. <span class="sb">`03_use_cases/NN_name.md`</span> (nav group &quot;Use Cases&quot;).
</span><span id="__span-0-57"><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="k">-</span><span class="w"> </span><span class="gs">**No frontmatter.**</span> Every file opens directly with an H1 <span class="sb">`# Title`</span>.
</span><span id="__span-0-58"><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">-</span><span class="w"> </span>Navigation labels are short human titles set explicitly in
</span><span id="__span-0-59"><a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="sb">`docs/mkdocs.wiki.yml`</span> (title case) — often <span class="gs">**shorter**</span> than the page H1.
</span><span id="__span-0-60"><a id="__codelineno-0-60" name="__codelineno-0-60"></a> Example: nav label <span class="sb">`Basic CRUD`</span> vs page H1 <span class="sb">`Use Case 1: Basic FastAPI CRUD API`</span>.
</span><span id="__span-0-61"><a id="__codelineno-0-61" name="__codelineno-0-61"></a> Never use the raw filename slug as the label.
</span><span id="__span-0-62"><a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="k">-</span><span class="w"> </span>Renumbering: prefixes order pages. When inserting a page, pick the next
</span><span id="__span-0-63"><a id="__codelineno-0-63" name="__codelineno-0-63"></a> number in the relevant group (subgroup numbers stay grouped).
</span><span id="__span-0-64"><a id="__codelineno-0-64" name="__codelineno-0-64"></a>
</span><span id="__span-0-65"><a id="__codelineno-0-65" name="__codelineno-0-65"></a>---
</span><span id="__span-0-66"><a id="__codelineno-0-66" name="__codelineno-0-66"></a>
</span><span id="__span-0-67"><a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="gu">## 3. Navigation — `docs/mkdocs.wiki.yml` is the source of truth</span>
</span><span id="__span-0-68"><a id="__codelineno-0-68" name="__codelineno-0-68"></a>
</span><span id="__span-0-69"><a id="__codelineno-0-69" name="__codelineno-0-69"></a>Every wiki page <span class="gs">**must**</span> be wired into the nav defined in
</span><span id="__span-0-70"><a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sb">`docs/mkdocs.wiki.yml`</span>. If a page is not in the nav, it is orphaned.
</span><span id="__span-0-71"><a id="__codelineno-0-71" name="__codelineno-0-71"></a>
</span><span id="__span-0-72"><a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="k">-</span><span class="w"> </span>The <span class="sb">`nav:`</span> block mirrors the directory tree; directories become nested
</span><span id="__span-0-73"><a id="__codelineno-0-73" name="__codelineno-0-73"></a> groups.
</span><span id="__span-0-74"><a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="k">-</span><span class="w"> </span>When a section has many pages, group them <span class="gs">**by theme**</span> into nested
</span><span id="__span-0-75"><a id="__codelineno-0-75" name="__codelineno-0-75"></a> subgroups. mongo-ops groups its use cases into:
</span><span id="__span-0-76"><a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="sb">`Getting Started`</span>, <span class="sb">`Data &amp; Queries`</span>, <span class="sb">`Caching`</span>, <span class="sb">`Population`</span>,
</span><span id="__span-0-77"><a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="sb">`Advanced Usage`</span>.
</span><span id="__span-0-78"><a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="k">-</span><span class="w"> </span>Keep <span class="sb">`index.md`</span>&#39;s <span class="gs">**Documentation Structure**</span> table in sync with the nav —
</span><span id="__span-0-79"><a id="__codelineno-0-79" name="__codelineno-0-79"></a> it is the human-facing version of the same TOC. Every nav entry needs a row
</span><span id="__span-0-80"><a id="__codelineno-0-80" name="__codelineno-0-80"></a> (or nested bullet group) there.
</span><span id="__span-0-81"><a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="k">-</span><span class="w"> </span>Nav label = human title (title case), not the filename slug.
</span><span id="__span-0-82"><a id="__codelineno-0-82" name="__codelineno-0-82"></a>
</span><span id="__span-0-83"><a id="__codelineno-0-83" name="__codelineno-0-83"></a>---
</span><span id="__span-0-84"><a id="__codelineno-0-84" name="__codelineno-0-84"></a>
</span><span id="__span-0-85"><a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="gu">## 4. Page anatomy</span>
</span><span id="__span-0-86"><a id="__codelineno-0-86" name="__codelineno-0-86"></a>
</span><span id="__span-0-87"><a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="gu">### 4.1 `index.md` (Home)</span>
</span><span id="__span-0-88"><a id="__codelineno-0-88" name="__codelineno-0-88"></a>
</span><span id="__span-0-89"><a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sb">```</span>
</span><span id="__span-0-90"><a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sb"># 🧩 &lt;package&gt; — &lt;slogan&gt;</span>
</span><span id="__span-0-91"><a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sb">&lt;one-paragraph pitch&gt;</span>
</span><span id="__span-0-92"><a id="__codelineno-0-92" name="__codelineno-0-92"></a>
</span><span id="__span-0-93"><a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sb">&gt; **Doc model:** … (see §1)</span>
</span><span id="__span-0-94"><a id="__codelineno-0-94" name="__codelineno-0-94"></a>
</span><span id="__span-0-95"><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sb">---</span>
</span><span id="__span-0-96"><a id="__codelineno-0-96" name="__codelineno-0-96"></a>
</span><span id="__span-0-97"><a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sb">## 🚀 Key Features (bullet list, emoji per feature)</span>
</span><span id="__span-0-98"><a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sb">## 📦 Installation (code blocks: internal PyPI, extras, local source)</span>
</span><span id="__span-0-99"><a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sb">## 📁 Documentation Structure (table = TOC, mirrors nav exactly)</span>
</span><span id="__span-0-100"><a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sb">## 🔗 Related Resources (bullets: source repo, internal PyPI, CI)</span>
</span><span id="__span-0-101"><a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sb">---</span>
</span><span id="__span-0-102"><a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sb">© Aetoskia Internal — `&lt;package&gt;` &lt;version&gt;</span>
</span><span id="__span-0-103"><a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sb">```</span>
</span><span id="__span-0-104"><a id="__codelineno-0-104" name="__codelineno-0-104"></a>
</span><span id="__span-0-105"><a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="gu">### 4.2 Overview page (`01_*`)</span>
</span><span id="__span-0-106"><a id="__codelineno-0-106" name="__codelineno-0-106"></a>
</span><span id="__span-0-107"><a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="k">-</span><span class="w"> </span>Opens with <span class="sb">`# Library Overview`</span>, one sentence about what the library does,
</span><span id="__span-0-108"><a id="__codelineno-0-108" name="__codelineno-0-108"></a> then a line stating the page builds the mental model.
</span><span id="__span-0-109"><a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="k">-</span><span class="w"> </span>Sections: <span class="sb">`## 🏗️ Architecture`</span> (ASCII diagram + numbered layer list),
</span><span id="__span-0-110"><a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="sb">`## 🔄 Lifecycle Rules`</span> (table: step / call / why),
</span><span id="__span-0-111"><a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="sb">`## 🧭 Which … Should You Use?`</span> (decision table).
</span><span id="__span-0-112"><a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="k">-</span><span class="w"> </span>Ends with <span class="sb">`## ➡️ Read Next`</span> (cross-links to the next pages to read).
</span><span id="__span-0-113"><a id="__codelineno-0-113" name="__codelineno-0-113"></a>
</span><span id="__span-0-114"><a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="gu">### 4.3 Components page (`02_*`)</span>
</span><span id="__span-0-115"><a id="__codelineno-0-115" name="__codelineno-0-115"></a>
</span><span id="__span-0-116"><a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="k">-</span><span class="w"> </span>Validated reference for the public API surface — describes what each
</span><span id="__span-0-117"><a id="__codelineno-0-117" name="__codelineno-0-117"></a> component is for and how the pieces wire together. Keep it usage-level;
</span><span id="__span-0-118"><a id="__codelineno-0-118" name="__codelineno-0-118"></a> exact signatures belong in <span class="sb">`docs/lib/`</span>.
</span><span id="__span-0-119"><a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="k">-</span><span class="w"> </span>Anatomy: numbered sections, one per component (<span class="sb">`## 1. MongoConnectionManager`</span>,
</span><span id="__span-0-120"><a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="sb">`## 2. BaseDocument`</span>, …), with <span class="sb">`### 8.1`</span>-style sub-numbering for related
</span><span id="__span-0-121"><a id="__codelineno-0-121" name="__codelineno-0-121"></a> types under a component (e.g. the cache layer&#39;s backend / stats / config /
</span><span id="__span-0-122"><a id="__codelineno-0-122" name="__codelineno-0-122"></a> in-memory / redis implementations). Ends with <span class="sb">`## Related`</span>.
</span><span id="__span-0-123"><a id="__codelineno-0-123" name="__codelineno-0-123"></a>
</span><span id="__span-0-124"><a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="gu">### 4.4 Use-case page (the most common)</span>
</span><span id="__span-0-125"><a id="__codelineno-0-125" name="__codelineno-0-125"></a>
</span><span id="__span-0-126"><a id="__codelineno-0-126" name="__codelineno-0-126"></a>Standard anatomy, in this order:
</span><span id="__span-0-127"><a id="__codelineno-0-127" name="__codelineno-0-127"></a>
</span><span id="__span-0-128"><a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sb">```</span>
</span><span id="__span-0-129"><a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sb"># Use Case N: &lt;Human Title&gt;</span>
</span><span id="__span-0-130"><a id="__codelineno-0-130" name="__codelineno-0-130"></a>
</span><span id="__span-0-131"><a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sb">**Scenario:** &lt;one sentence: the problem this recipe solves&gt;</span>
</span><span id="__span-0-132"><a id="__codelineno-0-132" name="__codelineno-0-132"></a>
</span><span id="__span-0-133"><a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sb">---</span>
</span><span id="__span-0-134"><a id="__codelineno-0-134" name="__codelineno-0-134"></a>
</span><span id="__span-0-135"><a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="sb">## 📦 What&#39;s New? (table: Component | Description — new API used here)</span>
</span><span id="__span-0-136"><a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sb">## 🚀 Example (languaged code block, complete runnable-looking snippet)</span>
</span><span id="__span-0-137"><a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sb">## 💡 Tips (bullets: gotchas, ordering, common mistakes)</span>
</span><span id="__span-0-138"><a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sb">## Related (§5)</span>
</span><span id="__span-0-139"><a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sb">```</span>
</span><span id="__span-0-140"><a id="__codelineno-0-140" name="__codelineno-0-140"></a>
</span><span id="__span-0-141"><a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="gu">### 4.5 Deep-dive / worked-example page</span>
</span><span id="__span-0-142"><a id="__codelineno-0-142" name="__codelineno-0-142"></a>
</span><span id="__span-0-143"><a id="__codelineno-0-143" name="__codelineno-0-143"></a>For intricate flows (population shapes, cache round-trips), use numbered
</span><span id="__span-0-144"><a id="__codelineno-0-144" name="__codelineno-0-144"></a>depth-first sections and comparison tables:
</span><span id="__span-0-145"><a id="__codelineno-0-145" name="__codelineno-0-145"></a>
</span><span id="__span-0-146"><a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sb">```</span>
</span><span id="__span-0-147"><a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sb">## 1. &lt;Write path&gt; (### 1a., ### 1b., … per sub-case)</span>
</span><span id="__span-0-148"><a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sb">## 2. &lt;Read path&gt;</span>
</span><span id="__span-0-149"><a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sb">## 3. &lt;Round trip / tricky bit&gt;</span>
</span><span id="__span-0-150"><a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sb">## 4. When to use which (comparison table)</span>
</span><span id="__span-0-151"><a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sb">## Related</span>
</span><span id="__span-0-152"><a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sb">```</span>
</span><span id="__span-0-153"><a id="__codelineno-0-153" name="__codelineno-0-153"></a>
</span><span id="__span-0-154"><a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="gu">### 4.6 Best Practices page (`04_*`)</span>
</span><span id="__span-0-155"><a id="__codelineno-0-155" name="__codelineno-0-155"></a>
</span><span id="__span-0-156"><a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="k">-</span><span class="w"> </span>Flat themed <span class="sb">`##`</span> sections (e.g. Layering, Lifecycle, Data &amp; Performance,
</span><span id="__span-0-157"><a id="__codelineno-0-157" name="__codelineno-0-157"></a> Transactions &amp; Errors, Testing), each a short list of numbered conventions.
</span><span id="__span-0-158"><a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="k">-</span><span class="w"> </span>Pure prose — no large code blocks.
</span><span id="__span-0-159"><a id="__codelineno-0-159" name="__codelineno-0-159"></a>
</span><span id="__span-0-160"><a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="gu">### 4.7 Error Handling (`06_*`) / Testing pages</span>
</span><span id="__span-0-161"><a id="__codelineno-0-161" name="__codelineno-0-161"></a>
</span><span id="__span-0-162"><a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="k">-</span><span class="w"> </span><span class="gs">**Error Handling:**</span> an exceptions table (<span class="sb">`Exception | Source | Meaning / fix`</span>),
</span><span id="__span-0-163"><a id="__codelineno-0-163" name="__codelineno-0-163"></a> a <span class="sb">`&gt; `</span> note on which failures are by design, a <span class="sb">`## 🚀 FastAPI Mapping Example`</span>
</span><span id="__span-0-164"><a id="__codelineno-0-164" name="__codelineno-0-164"></a> code block, then <span class="sb">`## 💡 Tips`</span> bullets, then <span class="sb">`## Related`</span>.
</span><span id="__span-0-165"><a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="k">-</span><span class="w"> </span>**Testing example (<span class="sb">`07_*`</span>):** <span class="sb">`## 🚀 Mock-Based Quickstart`</span> (focused code
</span><span id="__span-0-166"><a id="__codelineno-0-166" name="__codelineno-0-166"></a> block), <span class="sb">`## 💡 Notes`</span> tip list, <span class="sb">`## Related`</span>.
</span><span id="__span-0-167"><a id="__codelineno-0-167" name="__codelineno-0-167"></a>
</span><span id="__span-0-168"><a id="__codelineno-0-168" name="__codelineno-0-168"></a>Common to all pages: no frontmatter, <span class="sb">`---`</span> between every major section, and a
</span><span id="__span-0-169"><a id="__codelineno-0-169" name="__codelineno-0-169"></a><span class="sb">`## Related`</span> (or variant) footer as the <span class="gs">**last**</span> section.
</span><span id="__span-0-170"><a id="__codelineno-0-170" name="__codelineno-0-170"></a>
</span><span id="__span-0-171"><a id="__codelineno-0-171" name="__codelineno-0-171"></a>---
</span><span id="__span-0-172"><a id="__codelineno-0-172" name="__codelineno-0-172"></a>
</span><span id="__span-0-173"><a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="gu">## 5. The `## Related` footer</span>
</span><span id="__span-0-174"><a id="__codelineno-0-174" name="__codelineno-0-174"></a>
</span><span id="__span-0-175"><a id="__codelineno-0-175" name="__codelineno-0-175"></a>Every page ends with a cross-link footer. Rules:
</span><span id="__span-0-176"><a id="__codelineno-0-176" name="__codelineno-0-176"></a>
</span><span id="__span-0-177"><a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="k">-</span><span class="w"> </span>Always the <span class="gs">**last**</span> section, always preceded by a <span class="sb">`---`</span>.
</span><span id="__span-0-178"><a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="k">-</span><span class="w"> </span>Standard heading: <span class="sb">`## Related`</span> (no emoji).
</span><span id="__span-0-179"><a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="k">-</span><span class="w"> </span>One bullet line; links separated by <span class="sb">` · `</span> (middle dot plus spaces).
</span><span id="__span-0-180"><a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="k">-</span><span class="w"> </span>Link label format: <span class="sb">`[NN – Title](relative_path)`</span> — en-dash, page number, title.
</span><span id="__span-0-181"><a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="k">-</span><span class="w"> </span>Paths are <span class="gs">**relative**</span>: same directory → <span class="sb">`02_custom_repo.md`</span>; parent →
</span><span id="__span-0-182"><a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="sb">`../01_overview.md`</span>; child → <span class="sb">`03_use_cases/01_basic_crud.md`</span>.
</span><span id="__span-0-183"><a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="k">-</span><span class="w"> </span>Link order follows nav order (each <span class="sb">`Related`</span> points to related next/sibling
</span><span id="__span-0-184"><a id="__codelineno-0-184" name="__codelineno-0-184"></a> pages, plus the overview/components anchor).
</span><span id="__span-0-185"><a id="__codelineno-0-185" name="__codelineno-0-185"></a>
</span><span id="__span-0-186"><a id="__codelineno-0-186" name="__codelineno-0-186"></a>Examples (from mongo-ops):
</span><span id="__span-0-187"><a id="__codelineno-0-187" name="__codelineno-0-187"></a>
</span><span id="__span-0-188"><a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sb">```</span>
</span><span id="__span-0-189"><a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sb">## Related</span>
</span><span id="__span-0-190"><a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sb">- [02 – Custom repository](02_custom_repo.md) · [04 – Pagination](04_pagination.md) · [Overview](../01_overview.md)</span>
</span><span id="__span-0-191"><a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sb">```</span>
</span><span id="__span-0-192"><a id="__codelineno-0-192" name="__codelineno-0-192"></a>
</span><span id="__span-0-193"><a id="__codelineno-0-193" name="__codelineno-0-193"></a>Variants:
</span><span id="__span-0-194"><a id="__codelineno-0-194" name="__codelineno-0-194"></a>
</span><span id="__span-0-195"><a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="k">-</span><span class="w"> </span><span class="sb">`## ➡️ Read Next`</span> — used on the overview page (linear reading order).
</span><span id="__span-0-196"><a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="k">-</span><span class="w"> </span><span class="sb">`## 🔗 Related Resources`</span> — only on <span class="sb">`index.md`</span>, one bullet per external resource.
</span><span id="__span-0-197"><a id="__codelineno-0-197" name="__codelineno-0-197"></a>
</span><span id="__span-0-198"><a id="__codelineno-0-198" name="__codelineno-0-198"></a>---
</span><span id="__span-0-199"><a id="__codelineno-0-199" name="__codelineno-0-199"></a>
</span><span id="__span-0-200"><a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="gu">## 6. Tone &amp; formatting rules</span>
</span><span id="__span-0-201"><a id="__codelineno-0-201" name="__codelineno-0-201"></a>
</span><span id="__span-0-202"><a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="k">-</span><span class="w"> </span><span class="gs">**Written for humans**</span>: short sentences, concrete examples, plain words.
</span><span id="__span-0-203"><a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="k">-</span><span class="w"> </span>Emoji-prefixed H2 headings for recognizable section types
</span><span id="__span-0-204"><a id="__codelineno-0-204" name="__codelineno-0-204"></a> (<span class="sb">`📦 What&#39;s New?`</span>, <span class="sb">`🚀 Example`</span>, <span class="sb">`💡 Tips`</span>, <span class="sb">`🚀 Key Features`</span>).
</span><span id="__span-0-205"><a id="__codelineno-0-205" name="__codelineno-0-205"></a><span class="k">-</span><span class="w"> </span><span class="sb">`---`</span> horizontal rule between every major section.
</span><span id="__span-0-206"><a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="k">-</span><span class="w"> </span>Code blocks always declare a language (```python, ```bash, etc.).
</span><span id="__span-0-207"><a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="k">-</span><span class="w"> </span>Use tables for comparisons and structured decisions; bullets for lists;
</span><span id="__span-0-208"><a id="__codelineno-0-208" name="__codelineno-0-208"></a> ASCII diagrams for architecture.
</span><span id="__span-0-209"><a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="k">-</span><span class="w"> </span>Bold key terms inline. Use <span class="sb">`inline code`</span> for symbols/APIs.
</span><span id="__span-0-210"><a id="__codelineno-0-210" name="__codelineno-0-210"></a><span class="k">-</span><span class="w"> </span>Keep pages focused: one recipe/purpose per page. If a page balloons past
</span><span id="__span-0-211"><a id="__codelineno-0-211" name="__codelineno-0-211"></a> ~10 KB, split it (add a numbered deep-dive page instead).
</span><span id="__span-0-212"><a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="k">-</span><span class="w"> </span>Match tone of existing pages in the repo before writing new ones.
</span><span id="__span-0-213"><a id="__codelineno-0-213" name="__codelineno-0-213"></a>
</span><span id="__span-0-214"><a id="__codelineno-0-214" name="__codelineno-0-214"></a>---
</span><span id="__span-0-215"><a id="__codelineno-0-215" name="__codelineno-0-215"></a>
</span><span id="__span-0-216"><a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="gu">## 7. Build &amp; verify workflow</span>
</span><span id="__span-0-217"><a id="__codelineno-0-217" name="__codelineno-0-217"></a>
</span><span id="__span-0-218"><a id="__codelineno-0-218" name="__codelineno-0-218"></a>After creating or editing wiki pages:
</span><span id="__span-0-219"><a id="__codelineno-0-219" name="__codelineno-0-219"></a>
</span><span id="__span-0-220"><a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sb">```bash</span>
</span><span id="__span-0-221"><a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="c1"># 1. Build the wiki (from the repo root)</span>
</span><span id="__span-0-222"><a id="__codelineno-0-222" name="__codelineno-0-222"></a>doc-forge<span class="w"> </span>build<span class="w"> </span>--wiki<span class="w"> </span><span class="c1"># wiki only</span>
</span><span id="__span-0-223"><a id="__codelineno-0-223" name="__codelineno-0-223"></a>doc-forge<span class="w"> </span>build<span class="w"> </span>--wiki<span class="w"> </span>--mkdocs<span class="w"> </span>--module<span class="w"> </span>&lt;pkg&gt;<span class="w"> </span><span class="c1"># wiki + lib together</span>
</span><span id="__span-0-224"><a id="__codelineno-0-224" name="__codelineno-0-224"></a>
</span><span id="__span-0-225"><a id="__codelineno-0-225" name="__codelineno-0-225"></a><span class="c1"># 2. Preview locally</span>
</span><span id="__span-0-226"><a id="__codelineno-0-226" name="__codelineno-0-226"></a>doc-forge<span class="w"> </span>serve<span class="w"> </span>--wiki
</span><span id="__span-0-227"><a id="__codelineno-0-227" name="__codelineno-0-227"></a>
</span><span id="__span-0-228"><a id="__codelineno-0-228" name="__codelineno-0-228"></a><span class="c1"># 3. Collect into the hub (run from the docs/ service repo)</span>
</span><span id="__span-0-229"><a id="__codelineno-0-229" name="__codelineno-0-229"></a>python<span class="w"> </span>collect.py<span class="w"> </span><span class="c1"># copies site, regenerates index + nginx.conf</span>
</span><span id="__span-0-230"><a id="__codelineno-0-230" name="__codelineno-0-230"></a>python<span class="w"> </span>collect.py<span class="w"> </span>--dry-run<span class="w"> </span><span class="c1"># preview without writing</span>
</span><span id="__span-0-231"><a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sb">```</span>
</span><span id="__span-0-232"><a id="__codelineno-0-232" name="__codelineno-0-232"></a>
</span><span id="__span-0-233"><a id="__codelineno-0-233" name="__codelineno-0-233"></a>Verification checklist:
</span><span id="__span-0-234"><a id="__codelineno-0-234" name="__codelineno-0-234"></a>
</span><span id="__span-0-235"><a id="__codelineno-0-235" name="__codelineno-0-235"></a><span class="k">-</span><span class="w"> </span><span class="sb">`doc-forge build --wiki`</span> completes with no warnings about missing files.
</span><span id="__span-0-236"><a id="__codelineno-0-236" name="__codelineno-0-236"></a><span class="k">-</span><span class="w"> </span>Every new page is present in <span class="sb">`docs/mkdocs.wiki.yml`</span> <span class="gs">**and**</span> in the index
</span><span id="__span-0-237"><a id="__codelineno-0-237" name="__codelineno-0-237"></a> Documentation Structure table.
</span><span id="__span-0-238"><a id="__codelineno-0-238" name="__codelineno-0-238"></a><span class="k">-</span><span class="w"> </span>Every page ends with a <span class="sb">`## Related`</span> block and no dead links (paths resolve).
</span><span id="__span-0-239"><a id="__codelineno-0-239" name="__codelineno-0-239"></a><span class="k">-</span><span class="w"> </span>After <span class="sb">`collect.py`</span>: the hub card links to both <span class="sb">`/wiki/`</span> and <span class="sb">`/lib/`</span> and the
</span><span id="__span-0-240"><a id="__codelineno-0-240" name="__codelineno-0-240"></a> pages render (spot-check with the served site).
</span><span id="__span-0-241"><a id="__codelineno-0-241" name="__codelineno-0-241"></a><span class="k">-</span><span class="w"> </span>If code/docstrings changed (no change when wiki-only), run the repo gates:
</span><span id="__span-0-242"><a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="sb">`black`</span>, <span class="sb">`ruff`</span>, <span class="sb">`mypy`</span>, <span class="sb">`pytest`</span>.
</span><span id="__span-0-243"><a id="__codelineno-0-243" name="__codelineno-0-243"></a>
</span><span id="__span-0-244"><a id="__codelineno-0-244" name="__codelineno-0-244"></a>---
</span><span id="__span-0-245"><a id="__codelineno-0-245" name="__codelineno-0-245"></a>
</span><span id="__span-0-246"><a id="__codelineno-0-246" name="__codelineno-0-246"></a><span class="gu">## 8. Before/after checklist</span>
</span><span id="__span-0-247"><a id="__codelineno-0-247" name="__codelineno-0-247"></a>
</span><span id="__span-0-248"><a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="gs">**Before creating a page:**</span>
</span><span id="__span-0-249"><a id="__codelineno-0-249" name="__codelineno-0-249"></a>
</span><span id="__span-0-250"><a id="__codelineno-0-250" name="__codelineno-0-250"></a><span class="k">- [ ]</span> Confirm it is genuinely wiki material (how-to) and not API contract.
</span><span id="__span-0-251"><a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="k">- [ ]</span> Find the right filename (<span class="sb">`NN_snake_case.md`</span>) and directory for its theme.
</span><span id="__span-0-252"><a id="__codelineno-0-252" name="__codelineno-0-252"></a><span class="k">- [ ]</span> Outline the sections per §4 anatomy that fits the content.
</span><span id="__span-0-253"><a id="__codelineno-0-253" name="__codelineno-0-253"></a>
</span><span id="__span-0-254"><a id="__codelineno-0-254" name="__codelineno-0-254"></a><span class="gs">**After creating/editing a page:**</span>
</span><span id="__span-0-255"><a id="__codelineno-0-255" name="__codelineno-0-255"></a>
</span><span id="__span-0-256"><a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="k">- [ ]</span> Page wired into <span class="sb">`docs/mkdocs.wiki.yml`</span> nav (themed subgroup if needed).
</span><span id="__span-0-257"><a id="__codelineno-0-257" name="__codelineno-0-257"></a><span class="k">- [ ]</span> <span class="sb">`index.md`</span> Documentation Structure table updated.
</span><span id="__span-0-258"><a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="k">- [ ]</span> <span class="sb">`## Related`</span> footer present, relative links, nav order.
</span><span id="__span-0-259"><a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="k">- [ ]</span> <span class="sb">`---`</span> separators consistent; no frontmatter; emoji headings where apt.
</span><span id="__span-0-260"><a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="k">- [ ]</span> Build passes; collect run; hub shows <span class="sb">`/wiki/`</span> + <span class="sb">`/lib/`</span> links.
</span><span id="__span-0-261"><a id="__codelineno-0-261" name="__codelineno-0-261"></a><span class="k">- [ ]</span> No orphaned files, no dead links.
</span></code></pre></div></td></tr></table></div></li>
</ul>
<hr />
<p>© Aetoskia Internal</p>

File diff suppressed because one or more lines are too long

Binary file not shown.

6
mcp/mongo-ops/index.json Normal file
View File

@@ -0,0 +1,6 @@
{
"project": "mongo_ops",
"type": "docforge-model",
"modules_count": 15,
"source": "docforge"
}

View File

@@ -0,0 +1,190 @@
{
"module": "mongo_ops.cache.backend",
"content": {
"path": "mongo_ops.cache.backend",
"docstring": "Cache backend abstraction.",
"objects": {
"ABC": {
"name": "ABC",
"kind": "alias",
"path": "mongo_ops.cache.backend.ABC",
"signature": "<bound method Alias.signature of Alias('ABC', 'abc.ABC')>",
"docstring": null
},
"abstractmethod": {
"name": "abstractmethod",
"kind": "alias",
"path": "mongo_ops.cache.backend.abstractmethod",
"signature": "<bound method Alias.signature of Alias('abstractmethod', 'abc.abstractmethod')>",
"docstring": null
},
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "mongo_ops.cache.backend.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.cache.backend.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.cache.backend.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"CacheStats": {
"name": "CacheStats",
"kind": "class",
"path": "mongo_ops.cache.backend.CacheStats",
"signature": "<bound method Class.signature of Class('CacheStats', 9, 16)>",
"docstring": null,
"members": {
"hits": {
"name": "hits",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.hits",
"signature": null,
"docstring": null
},
"misses": {
"name": "misses",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.misses",
"signature": null,
"docstring": null
},
"sets": {
"name": "sets",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.sets",
"signature": null,
"docstring": null
},
"deletes": {
"name": "deletes",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.deletes",
"signature": null,
"docstring": null
},
"current_size": {
"name": "current_size",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.current_size",
"signature": null,
"docstring": null
},
"max_size": {
"name": "max_size",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CacheStats.max_size",
"signature": null,
"docstring": null
}
}
},
"CircularReferenceError": {
"name": "CircularReferenceError",
"kind": "class",
"path": "mongo_ops.cache.backend.CircularReferenceError",
"signature": "<bound method Class.signature of Class('CircularReferenceError', 19, 24)>",
"docstring": null,
"members": {
"collection": {
"name": "collection",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CircularReferenceError.collection",
"signature": null,
"docstring": null
},
"doc_id": {
"name": "doc_id",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CircularReferenceError.doc_id",
"signature": null,
"docstring": null
},
"path": {
"name": "path",
"kind": "attribute",
"path": "mongo_ops.cache.backend.CircularReferenceError.path",
"signature": null,
"docstring": null
}
}
},
"CacheBackend": {
"name": "CacheBackend",
"kind": "class",
"path": "mongo_ops.cache.backend.CacheBackend",
"signature": "<bound method Class.signature of Class('CacheBackend', 27, 58)>",
"docstring": null,
"members": {
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.get",
"signature": "<bound method Function.signature of Function('get', 28, 30)>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.set",
"signature": "<bound method Function.signature of Function('set', 32, 34)>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.delete",
"signature": "<bound method Function.signature of Function('delete', 36, 38)>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.exists",
"signature": "<bound method Function.signature of Function('exists', 40, 42)>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.clear_pattern",
"signature": "<bound method Function.signature of Function('clear_pattern', 44, 46)>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.get_stats",
"signature": "<bound method Function.signature of Function('get_stats', 48, 50)>",
"docstring": null
},
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.initialize",
"signature": "<bound method Function.signature of Function('initialize', 52, 54)>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.backend.CacheBackend.shutdown",
"signature": "<bound method Function.signature of Function('shutdown', 56, 58)>",
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,95 @@
{
"module": "mongo_ops.cache.config",
"content": {
"path": "mongo_ops.cache.config",
"docstring": "Cache configuration.",
"objects": {
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "mongo_ops.cache.config.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"Literal": {
"name": "Literal",
"kind": "alias",
"path": "mongo_ops.cache.config.Literal",
"signature": "<bound method Alias.signature of Alias('Literal', 'typing.Literal')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.cache.config.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Redis": {
"name": "Redis",
"kind": "alias",
"path": "mongo_ops.cache.config.Redis",
"signature": "<bound method Alias.signature of Alias('Redis', 'redis.asyncio.Redis')>",
"docstring": null
},
"CacheConfig": {
"name": "CacheConfig",
"kind": "class",
"path": "mongo_ops.cache.config.CacheConfig",
"signature": "<bound method Class.signature of Class('CacheConfig', 11, 25)>",
"docstring": null,
"members": {
"enabled": {
"name": "enabled",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.enabled",
"signature": null,
"docstring": null
},
"backend": {
"name": "backend",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.backend",
"signature": null,
"docstring": null
},
"redis_client": {
"name": "redis_client",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.redis_client",
"signature": null,
"docstring": null
},
"default_ttl": {
"name": "default_ttl",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.default_ttl",
"signature": null,
"docstring": null
},
"max_entries": {
"name": "max_entries",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.max_entries",
"signature": null,
"docstring": null
},
"key_prefix": {
"name": "key_prefix",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.key_prefix",
"signature": null,
"docstring": null
},
"cleanup_interval": {
"name": "cleanup_interval",
"kind": "attribute",
"path": "mongo_ops.cache.config.CacheConfig.cleanup_interval",
"signature": null,
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,260 @@
{
"module": "mongo_ops.cache.in_memory",
"content": {
"path": "mongo_ops.cache.in_memory",
"docstring": null,
"objects": {
"asyncio": {
"name": "asyncio",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.asyncio",
"signature": "<bound method Alias.signature of Alias('asyncio', 'asyncio')>",
"docstring": null
},
"heapq": {
"name": "heapq",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.heapq",
"signature": "<bound method Alias.signature of Alias('heapq', 'heapq')>",
"docstring": null
},
"json": {
"name": "json",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.json",
"signature": "<bound method Alias.signature of Alias('json', 'json')>",
"docstring": null
},
"OrderedDict": {
"name": "OrderedDict",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.OrderedDict",
"signature": "<bound method Alias.signature of Alias('OrderedDict', 'collections.OrderedDict')>",
"docstring": null
},
"datetime": {
"name": "datetime",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.datetime",
"signature": "<bound method Alias.signature of Alias('datetime', 'datetime.datetime')>",
"docstring": null
},
"timedelta": {
"name": "timedelta",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.timedelta",
"signature": "<bound method Alias.signature of Alias('timedelta', 'datetime.timedelta')>",
"docstring": null
},
"timezone": {
"name": "timezone",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.timezone",
"signature": "<bound method Alias.signature of Alias('timezone', 'datetime.timezone')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.cache.in_memory.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"CacheBackend": {
"name": "CacheBackend",
"kind": "class",
"path": "mongo_ops.cache.in_memory.CacheBackend",
"signature": "<bound method Alias.signature of Alias('CacheBackend', 'mongo_ops.cache.backend.CacheBackend')>",
"docstring": null,
"members": {
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.get",
"signature": "<bound method Alias.signature of Alias('get', 'mongo_ops.cache.backend.CacheBackend.get')>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.set",
"signature": "<bound method Alias.signature of Alias('set', 'mongo_ops.cache.backend.CacheBackend.set')>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.delete",
"signature": "<bound method Alias.signature of Alias('delete', 'mongo_ops.cache.backend.CacheBackend.delete')>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.exists",
"signature": "<bound method Alias.signature of Alias('exists', 'mongo_ops.cache.backend.CacheBackend.exists')>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.clear_pattern",
"signature": "<bound method Alias.signature of Alias('clear_pattern', 'mongo_ops.cache.backend.CacheBackend.clear_pattern')>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.get_stats",
"signature": "<bound method Alias.signature of Alias('get_stats', 'mongo_ops.cache.backend.CacheBackend.get_stats')>",
"docstring": null
},
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.initialize",
"signature": "<bound method Alias.signature of Alias('initialize', 'mongo_ops.cache.backend.CacheBackend.initialize')>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.in_memory.CacheBackend.shutdown",
"signature": "<bound method Alias.signature of Alias('shutdown', 'mongo_ops.cache.backend.CacheBackend.shutdown')>",
"docstring": null
}
}
},
"CacheStats": {
"name": "CacheStats",
"kind": "class",
"path": "mongo_ops.cache.in_memory.CacheStats",
"signature": "<bound method Alias.signature of Alias('CacheStats', 'mongo_ops.cache.backend.CacheStats')>",
"docstring": null,
"members": {
"hits": {
"name": "hits",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.hits",
"signature": "<bound method Alias.signature of Alias('hits', 'mongo_ops.cache.backend.CacheStats.hits')>",
"docstring": null
},
"misses": {
"name": "misses",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.misses",
"signature": "<bound method Alias.signature of Alias('misses', 'mongo_ops.cache.backend.CacheStats.misses')>",
"docstring": null
},
"sets": {
"name": "sets",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.sets",
"signature": "<bound method Alias.signature of Alias('sets', 'mongo_ops.cache.backend.CacheStats.sets')>",
"docstring": null
},
"deletes": {
"name": "deletes",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.deletes",
"signature": "<bound method Alias.signature of Alias('deletes', 'mongo_ops.cache.backend.CacheStats.deletes')>",
"docstring": null
},
"current_size": {
"name": "current_size",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.current_size",
"signature": "<bound method Alias.signature of Alias('current_size', 'mongo_ops.cache.backend.CacheStats.current_size')>",
"docstring": null
},
"max_size": {
"name": "max_size",
"kind": "attribute",
"path": "mongo_ops.cache.in_memory.CacheStats.max_size",
"signature": "<bound method Alias.signature of Alias('max_size', 'mongo_ops.cache.backend.CacheStats.max_size')>",
"docstring": null
}
}
},
"InMemoryCacheBackend": {
"name": "InMemoryCacheBackend",
"kind": "class",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend",
"signature": "<bound method Class.signature of Class('InMemoryCacheBackend', 22, 121)>",
"docstring": null,
"members": {
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.initialize",
"signature": "<bound method Function.signature of Function('initialize', 38, 39)>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.shutdown",
"signature": "<bound method Function.signature of Function('shutdown', 41, 48)>",
"docstring": null
},
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.get",
"signature": "<bound method Function.signature of Function('get', 50, 57)>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.set",
"signature": "<bound method Function.signature of Function('set', 59, 68)>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.delete",
"signature": "<bound method Function.signature of Function('delete', 70, 75)>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.exists",
"signature": "<bound method Function.signature of Function('exists', 77, 79)>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.clear_pattern",
"signature": "<bound method Function.signature of Function('clear_pattern', 81, 86)>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.get_stats",
"signature": "<bound method Function.signature of Function('get_stats', 88, 97)>",
"docstring": null
}
}
},
"encode_value": {
"name": "encode_value",
"kind": "function",
"path": "mongo_ops.cache.in_memory.encode_value",
"signature": "<bound method Function.signature of Function('encode_value', 127, 128)>",
"docstring": null
},
"decode_value": {
"name": "decode_value",
"kind": "function",
"path": "mongo_ops.cache.in_memory.decode_value",
"signature": "<bound method Function.signature of Function('decode_value', 131, 132)>",
"docstring": null
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,232 @@
{
"module": "mongo_ops.cache.redis_backend",
"content": {
"path": "mongo_ops.cache.redis_backend",
"docstring": null,
"objects": {
"json": {
"name": "json",
"kind": "alias",
"path": "mongo_ops.cache.redis_backend.json",
"signature": "<bound method Alias.signature of Alias('json', 'json')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.cache.redis_backend.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"CacheBackend": {
"name": "CacheBackend",
"kind": "class",
"path": "mongo_ops.cache.redis_backend.CacheBackend",
"signature": "<bound method Alias.signature of Alias('CacheBackend', 'mongo_ops.cache.backend.CacheBackend')>",
"docstring": null,
"members": {
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.get",
"signature": "<bound method Alias.signature of Alias('get', 'mongo_ops.cache.backend.CacheBackend.get')>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.set",
"signature": "<bound method Alias.signature of Alias('set', 'mongo_ops.cache.backend.CacheBackend.set')>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.delete",
"signature": "<bound method Alias.signature of Alias('delete', 'mongo_ops.cache.backend.CacheBackend.delete')>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.exists",
"signature": "<bound method Alias.signature of Alias('exists', 'mongo_ops.cache.backend.CacheBackend.exists')>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.clear_pattern",
"signature": "<bound method Alias.signature of Alias('clear_pattern', 'mongo_ops.cache.backend.CacheBackend.clear_pattern')>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.get_stats",
"signature": "<bound method Alias.signature of Alias('get_stats', 'mongo_ops.cache.backend.CacheBackend.get_stats')>",
"docstring": null
},
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.initialize",
"signature": "<bound method Alias.signature of Alias('initialize', 'mongo_ops.cache.backend.CacheBackend.initialize')>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.CacheBackend.shutdown",
"signature": "<bound method Alias.signature of Alias('shutdown', 'mongo_ops.cache.backend.CacheBackend.shutdown')>",
"docstring": null
}
}
},
"CacheStats": {
"name": "CacheStats",
"kind": "class",
"path": "mongo_ops.cache.redis_backend.CacheStats",
"signature": "<bound method Alias.signature of Alias('CacheStats', 'mongo_ops.cache.backend.CacheStats')>",
"docstring": null,
"members": {
"hits": {
"name": "hits",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.hits",
"signature": "<bound method Alias.signature of Alias('hits', 'mongo_ops.cache.backend.CacheStats.hits')>",
"docstring": null
},
"misses": {
"name": "misses",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.misses",
"signature": "<bound method Alias.signature of Alias('misses', 'mongo_ops.cache.backend.CacheStats.misses')>",
"docstring": null
},
"sets": {
"name": "sets",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.sets",
"signature": "<bound method Alias.signature of Alias('sets', 'mongo_ops.cache.backend.CacheStats.sets')>",
"docstring": null
},
"deletes": {
"name": "deletes",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.deletes",
"signature": "<bound method Alias.signature of Alias('deletes', 'mongo_ops.cache.backend.CacheStats.deletes')>",
"docstring": null
},
"current_size": {
"name": "current_size",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.current_size",
"signature": "<bound method Alias.signature of Alias('current_size', 'mongo_ops.cache.backend.CacheStats.current_size')>",
"docstring": null
},
"max_size": {
"name": "max_size",
"kind": "attribute",
"path": "mongo_ops.cache.redis_backend.CacheStats.max_size",
"signature": "<bound method Alias.signature of Alias('max_size', 'mongo_ops.cache.backend.CacheStats.max_size')>",
"docstring": null
}
}
},
"Redis": {
"name": "Redis",
"kind": "alias",
"path": "mongo_ops.cache.redis_backend.Redis",
"signature": "<bound method Alias.signature of Alias('Redis', 'redis.asyncio.Redis')>",
"docstring": null
},
"RedisCacheBackend": {
"name": "RedisCacheBackend",
"kind": "class",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend",
"signature": "<bound method Class.signature of Class('RedisCacheBackend', 12, 93)>",
"docstring": null,
"members": {
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.initialize",
"signature": "<bound method Function.signature of Function('initialize', 28, 29)>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.shutdown",
"signature": "<bound method Function.signature of Function('shutdown', 31, 34)>",
"docstring": null
},
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.get",
"signature": "<bound method Function.signature of Function('get', 39, 46)>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.set",
"signature": "<bound method Function.signature of Function('set', 48, 52)>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.delete",
"signature": "<bound method Function.signature of Function('delete', 54, 59)>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.exists",
"signature": "<bound method Function.signature of Function('exists', 61, 63)>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.clear_pattern",
"signature": "<bound method Function.signature of Function('clear_pattern', 65, 79)>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.get_stats",
"signature": "<bound method Function.signature of Function('get_stats', 81, 90)>",
"docstring": null
},
"publish_invalidate": {
"name": "publish_invalidate",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.publish_invalidate",
"signature": "<bound method Function.signature of Function('publish_invalidate', 92, 93)>",
"docstring": null
}
}
},
"encode_value": {
"name": "encode_value",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.encode_value",
"signature": "<bound method Function.signature of Function('encode_value', 99, 100)>",
"docstring": null
},
"decode_value": {
"name": "decode_value",
"kind": "function",
"path": "mongo_ops.cache.redis_backend.decode_value",
"signature": "<bound method Function.signature of Function('decode_value', 103, 104)>",
"docstring": null
}
}
}
}

View File

@@ -0,0 +1,329 @@
{
"module": "mongo_ops.cache.repository",
"content": {
"path": "mongo_ops.cache.repository",
"docstring": null,
"objects": {
"Generic": {
"name": "Generic",
"kind": "alias",
"path": "mongo_ops.cache.repository.Generic",
"signature": "<bound method Alias.signature of Alias('Generic', 'typing.Generic')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.cache.repository.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.cache.repository.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"TypeVar": {
"name": "TypeVar",
"kind": "alias",
"path": "mongo_ops.cache.repository.TypeVar",
"signature": "<bound method Alias.signature of Alias('TypeVar', 'typing.TypeVar')>",
"docstring": null
},
"Union": {
"name": "Union",
"kind": "alias",
"path": "mongo_ops.cache.repository.Union",
"signature": "<bound method Alias.signature of Alias('Union', 'typing.Union')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.cache.repository.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.cache.repository.BaseDocument",
"signature": "<bound method Alias.signature of Alias('BaseDocument', 'mongo_ops.models.BaseDocument')>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.id",
"signature": "<bound method Alias.signature of Alias('id', 'mongo_ops.models.BaseDocument.id')>",
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.created_at",
"signature": "<bound method Alias.signature of Alias('created_at', 'mongo_ops.models.BaseDocument.created_at')>",
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.updated_at",
"signature": "<bound method Alias.signature of Alias('updated_at', 'mongo_ops.models.BaseDocument.updated_at')>",
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.cache.repository.BaseDocument.Config",
"signature": "<bound method Alias.signature of Alias('Config', 'mongo_ops.models.BaseDocument.Config')>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.Config.populate_by_name",
"signature": "<bound method Alias.signature of Alias('populate_by_name', 'mongo_ops.models.BaseDocument.Config.populate_by_name')>",
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.Config.arbitrary_types_allowed",
"signature": "<bound method Alias.signature of Alias('arbitrary_types_allowed', 'mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed')>",
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.Config.json_encoders",
"signature": "<bound method Alias.signature of Alias('json_encoders', 'mongo_ops.models.BaseDocument.Config.json_encoders')>",
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseDocument.Config.json_schema_extra",
"signature": "<bound method Alias.signature of Alias('json_schema_extra', 'mongo_ops.models.BaseDocument.Config.json_schema_extra')>",
"docstring": null
}
}
}
}
},
"BaseRepository": {
"name": "BaseRepository",
"kind": "class",
"path": "mongo_ops.cache.repository.BaseRepository",
"signature": "<bound method Alias.signature of Alias('BaseRepository', 'mongo_ops.repository.BaseRepository')>",
"docstring": "Base repository class combining CRUD operations and collection management.\n\nThis class simplifies repository creation by automatically obtaining the \ndatabase connection and collection instance.\n\nAttributes:\n collection_name: The name of the collection managed by this repository.",
"members": {
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.cache.repository.BaseRepository.collection_name",
"signature": "<bound method Alias.signature of Alias('collection_name', 'mongo_ops.repository.BaseRepository.collection_name')>",
"docstring": null
}
}
},
"CacheBackend": {
"name": "CacheBackend",
"kind": "class",
"path": "mongo_ops.cache.repository.CacheBackend",
"signature": "<bound method Alias.signature of Alias('CacheBackend', 'mongo_ops.cache.backend.CacheBackend')>",
"docstring": null,
"members": {
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.get",
"signature": "<bound method Alias.signature of Alias('get', 'mongo_ops.cache.backend.CacheBackend.get')>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.set",
"signature": "<bound method Alias.signature of Alias('set', 'mongo_ops.cache.backend.CacheBackend.set')>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.delete",
"signature": "<bound method Alias.signature of Alias('delete', 'mongo_ops.cache.backend.CacheBackend.delete')>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.exists",
"signature": "<bound method Alias.signature of Alias('exists', 'mongo_ops.cache.backend.CacheBackend.exists')>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.clear_pattern",
"signature": "<bound method Alias.signature of Alias('clear_pattern', 'mongo_ops.cache.backend.CacheBackend.clear_pattern')>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.get_stats",
"signature": "<bound method Alias.signature of Alias('get_stats', 'mongo_ops.cache.backend.CacheBackend.get_stats')>",
"docstring": null
},
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.initialize",
"signature": "<bound method Alias.signature of Alias('initialize', 'mongo_ops.cache.backend.CacheBackend.initialize')>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.cache.repository.CacheBackend.shutdown",
"signature": "<bound method Alias.signature of Alias('shutdown', 'mongo_ops.cache.backend.CacheBackend.shutdown')>",
"docstring": null
}
}
},
"CacheConfig": {
"name": "CacheConfig",
"kind": "class",
"path": "mongo_ops.cache.repository.CacheConfig",
"signature": "<bound method Alias.signature of Alias('CacheConfig', 'mongo_ops.cache.config.CacheConfig')>",
"docstring": null,
"members": {
"enabled": {
"name": "enabled",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.enabled",
"signature": "<bound method Alias.signature of Alias('enabled', 'mongo_ops.cache.config.CacheConfig.enabled')>",
"docstring": null
},
"backend": {
"name": "backend",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.backend",
"signature": "<bound method Alias.signature of Alias('backend', 'mongo_ops.cache.config.CacheConfig.backend')>",
"docstring": null
},
"redis_client": {
"name": "redis_client",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.redis_client",
"signature": "<bound method Alias.signature of Alias('redis_client', 'mongo_ops.cache.config.CacheConfig.redis_client')>",
"docstring": null
},
"default_ttl": {
"name": "default_ttl",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.default_ttl",
"signature": "<bound method Alias.signature of Alias('default_ttl', 'mongo_ops.cache.config.CacheConfig.default_ttl')>",
"docstring": null
},
"max_entries": {
"name": "max_entries",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.max_entries",
"signature": "<bound method Alias.signature of Alias('max_entries', 'mongo_ops.cache.config.CacheConfig.max_entries')>",
"docstring": null
},
"key_prefix": {
"name": "key_prefix",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.key_prefix",
"signature": "<bound method Alias.signature of Alias('key_prefix', 'mongo_ops.cache.config.CacheConfig.key_prefix')>",
"docstring": null
},
"cleanup_interval": {
"name": "cleanup_interval",
"kind": "attribute",
"path": "mongo_ops.cache.repository.CacheConfig.cleanup_interval",
"signature": "<bound method Alias.signature of Alias('cleanup_interval', 'mongo_ops.cache.config.CacheConfig.cleanup_interval')>",
"docstring": null
}
}
},
"decode_value": {
"name": "decode_value",
"kind": "function",
"path": "mongo_ops.cache.repository.decode_value",
"signature": "<bound method Alias.signature of Alias('decode_value', 'mongo_ops.cache.in_memory.decode_value')>",
"docstring": null
},
"encode_value": {
"name": "encode_value",
"kind": "function",
"path": "mongo_ops.cache.repository.encode_value",
"signature": "<bound method Alias.signature of Alias('encode_value', 'mongo_ops.cache.in_memory.encode_value')>",
"docstring": null
},
"T": {
"name": "T",
"kind": "attribute",
"path": "mongo_ops.cache.repository.T",
"signature": null,
"docstring": null
},
"CachedBaseRepository": {
"name": "CachedBaseRepository",
"kind": "class",
"path": "mongo_ops.cache.repository.CachedBaseRepository",
"signature": "<bound method Class.signature of Class('CachedBaseRepository', 14, 92)>",
"docstring": null,
"members": {
"get_by_id": {
"name": "get_by_id",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.get_by_id",
"signature": "<bound method Function.signature of Function('get_by_id', 33, 48)>",
"docstring": null
},
"create": {
"name": "create",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.create",
"signature": "<bound method Function.signature of Function('create', 50, 56)>",
"docstring": null
},
"update": {
"name": "update",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.update",
"signature": "<bound method Function.signature of Function('update', 58, 67)>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.delete",
"signature": "<bound method Function.signature of Function('delete', 69, 74)>",
"docstring": null
},
"warm_cache": {
"name": "warm_cache",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.warm_cache",
"signature": "<bound method Function.signature of Function('warm_cache', 76, 87)>",
"docstring": null
},
"invalidate_cache": {
"name": "invalidate_cache",
"kind": "function",
"path": "mongo_ops.cache.repository.CachedBaseRepository.invalidate_cache",
"signature": "<bound method Function.signature of Function('invalidate_cache', 89, 92)>",
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,81 @@
{
"module": "mongo_ops.connection",
"content": {
"path": "mongo_ops.connection",
"docstring": "MongoDB connection management.",
"objects": {
"asynccontextmanager": {
"name": "asynccontextmanager",
"kind": "alias",
"path": "mongo_ops.connection.asynccontextmanager",
"signature": "<bound method Alias.signature of Alias('asynccontextmanager', 'contextlib.asynccontextmanager')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.connection.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"AsyncIOMotorClient": {
"name": "AsyncIOMotorClient",
"kind": "alias",
"path": "mongo_ops.connection.AsyncIOMotorClient",
"signature": "<bound method Alias.signature of Alias('AsyncIOMotorClient', 'motor.motor_asyncio.AsyncIOMotorClient')>",
"docstring": null
},
"AsyncIOMotorDatabase": {
"name": "AsyncIOMotorDatabase",
"kind": "alias",
"path": "mongo_ops.connection.AsyncIOMotorDatabase",
"signature": "<bound method Alias.signature of Alias('AsyncIOMotorDatabase', 'motor.motor_asyncio.AsyncIOMotorDatabase')>",
"docstring": null
},
"MongoConnectionManager": {
"name": "MongoConnectionManager",
"kind": "class",
"path": "mongo_ops.connection.MongoConnectionManager",
"signature": "<bound method Class.signature of Class('MongoConnectionManager', 8, 114)>",
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and \ndatabase instances, ensuring they are properly initialized and closed \nacross the application lifecycle.",
"members": {
"connect": {
"name": "connect",
"kind": "function",
"path": "mongo_ops.connection.MongoConnectionManager.connect",
"signature": "<bound method Function.signature of Function('connect', 22, 45)>",
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri: MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name: Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
},
"disconnect": {
"name": "disconnect",
"kind": "function",
"path": "mongo_ops.connection.MongoConnectionManager.disconnect",
"signature": "<bound method Function.signature of Function('disconnect', 47, 55)>",
"docstring": "Close the active MongoDB connection and cleanup resources."
},
"get_database": {
"name": "get_database",
"kind": "function",
"path": "mongo_ops.connection.MongoConnectionManager.get_database",
"signature": "<bound method Function.signature of Function('get_database', 57, 70)>",
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"get_client": {
"name": "get_client",
"kind": "function",
"path": "mongo_ops.connection.MongoConnectionManager.get_client",
"signature": "<bound method Function.signature of Function('get_client', 72, 85)>",
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"lifespan": {
"name": "lifespan",
"kind": "function",
"path": "mongo_ops.connection.MongoConnectionManager.lifespan",
"signature": "<bound method Function.signature of Function('lifespan', 87, 114)>",
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting \nlifespan management.\n\nArgs:\n uri: MongoDB connection URI.\n db_name: Name of the database.\n **kwargs: Additional Motor client options.\n\nYields:\n AsyncIOMotorDatabase: The active database instance.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,148 @@
{
"module": "mongo_ops.models",
"content": {
"path": "mongo_ops.models",
"docstring": "Base document models for MongoDB.",
"objects": {
"datetime": {
"name": "datetime",
"kind": "alias",
"path": "mongo_ops.models.datetime",
"signature": "<bound method Alias.signature of Alias('datetime', 'datetime.datetime')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.models.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.models.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.models.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"BaseModel": {
"name": "BaseModel",
"kind": "alias",
"path": "mongo_ops.models.BaseModel",
"signature": "<bound method Alias.signature of Alias('BaseModel', 'pydantic.BaseModel')>",
"docstring": null
},
"Field": {
"name": "Field",
"kind": "alias",
"path": "mongo_ops.models.Field",
"signature": "<bound method Alias.signature of Alias('Field', 'pydantic.Field')>",
"docstring": null
},
"GetCoreSchemaHandler": {
"name": "GetCoreSchemaHandler",
"kind": "alias",
"path": "mongo_ops.models.GetCoreSchemaHandler",
"signature": "<bound method Alias.signature of Alias('GetCoreSchemaHandler', 'pydantic.GetCoreSchemaHandler')>",
"docstring": null
},
"core_schema": {
"name": "core_schema",
"kind": "alias",
"path": "mongo_ops.models.core_schema",
"signature": "<bound method Alias.signature of Alias('core_schema', 'pydantic_core.core_schema')>",
"docstring": null
},
"PyObjectId": {
"name": "PyObjectId",
"kind": "class",
"path": "mongo_ops.models.PyObjectId",
"signature": "<bound method Class.signature of Class('PyObjectId', 10, 65)>",
"docstring": "Custom ObjectId type compatible with Pydantic v2.\n\nThis class extends the standard BSON ObjectId to provide validation and \nserialization support within Pydantic models.",
"members": {
"validate": {
"name": "validate",
"kind": "function",
"path": "mongo_ops.models.PyObjectId.validate",
"signature": "<bound method Function.signature of Function('validate', 35, 53)>",
"docstring": "Validate the input value and convert it to an ObjectId if possible.\n\nArgs:\n v: The value to validate (can be str or ObjectId).\n\nReturns:\n ObjectId: The validated ObjectId instance.\n\nRaises:\n ValueError: If the value is not a valid ObjectId."
}
}
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.models.BaseDocument",
"signature": "<bound method Class.signature of Class('BaseDocument', 68, 95)>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.id",
"signature": null,
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.created_at",
"signature": null,
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.updated_at",
"signature": null,
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.models.BaseDocument.Config",
"signature": "<bound method Class.signature of Class('Config', 86, 95)>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.Config.populate_by_name",
"signature": null,
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed",
"signature": null,
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.Config.json_encoders",
"signature": null,
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.models.BaseDocument.Config.json_schema_extra",
"signature": null,
"docstring": null
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,250 @@
{
"module": "mongo_ops.populate.engine",
"content": {
"path": "mongo_ops.populate.engine",
"docstring": null,
"objects": {
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.populate.engine.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.populate.engine.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.populate.engine.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.populate.engine.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Set": {
"name": "Set",
"kind": "alias",
"path": "mongo_ops.populate.engine.Set",
"signature": "<bound method Alias.signature of Alias('Set', 'typing.Set')>",
"docstring": null
},
"Tuple": {
"name": "Tuple",
"kind": "alias",
"path": "mongo_ops.populate.engine.Tuple",
"signature": "<bound method Alias.signature of Alias('Tuple', 'typing.Tuple')>",
"docstring": null
},
"TypeVar": {
"name": "TypeVar",
"kind": "alias",
"path": "mongo_ops.populate.engine.TypeVar",
"signature": "<bound method Alias.signature of Alias('TypeVar', 'typing.TypeVar')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.populate.engine.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"CircularReferenceError": {
"name": "CircularReferenceError",
"kind": "class",
"path": "mongo_ops.populate.engine.CircularReferenceError",
"signature": "<bound method Alias.signature of Alias('CircularReferenceError', 'mongo_ops.cache.backend.CircularReferenceError')>",
"docstring": null,
"members": {
"collection": {
"name": "collection",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.collection",
"signature": "<bound method Alias.signature of Alias('collection', 'mongo_ops.cache.backend.CircularReferenceError.collection')>",
"docstring": null
},
"doc_id": {
"name": "doc_id",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.doc_id",
"signature": "<bound method Alias.signature of Alias('doc_id', 'mongo_ops.cache.backend.CircularReferenceError.doc_id')>",
"docstring": null
},
"path": {
"name": "path",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.path",
"signature": "<bound method Alias.signature of Alias('path', 'mongo_ops.cache.backend.CircularReferenceError.path')>",
"docstring": null
}
}
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.populate.engine.BaseDocument",
"signature": "<bound method Alias.signature of Alias('BaseDocument', 'mongo_ops.models.BaseDocument')>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.id",
"signature": "<bound method Alias.signature of Alias('id', 'mongo_ops.models.BaseDocument.id')>",
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.created_at",
"signature": "<bound method Alias.signature of Alias('created_at', 'mongo_ops.models.BaseDocument.created_at')>",
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.updated_at",
"signature": "<bound method Alias.signature of Alias('updated_at', 'mongo_ops.models.BaseDocument.updated_at')>",
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.populate.engine.BaseDocument.Config",
"signature": "<bound method Alias.signature of Alias('Config', 'mongo_ops.models.BaseDocument.Config')>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.populate_by_name",
"signature": "<bound method Alias.signature of Alias('populate_by_name', 'mongo_ops.models.BaseDocument.Config.populate_by_name')>",
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.arbitrary_types_allowed",
"signature": "<bound method Alias.signature of Alias('arbitrary_types_allowed', 'mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed')>",
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_encoders",
"signature": "<bound method Alias.signature of Alias('json_encoders', 'mongo_ops.models.BaseDocument.Config.json_encoders')>",
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_schema_extra",
"signature": "<bound method Alias.signature of Alias('json_schema_extra', 'mongo_ops.models.BaseDocument.Config.json_schema_extra')>",
"docstring": null
}
}
}
}
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.populate.engine.PopulateRule",
"signature": "<bound method Alias.signature of Alias('PopulateRule', 'mongo_ops.populate.rules.PopulateRule')>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.field_name",
"signature": "<bound method Alias.signature of Alias('field_name', 'mongo_ops.populate.rules.PopulateRule.field_name')>",
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.collection_name",
"signature": "<bound method Alias.signature of Alias('collection_name', 'mongo_ops.populate.rules.PopulateRule.collection_name')>",
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.nested_rules",
"signature": "<bound method Alias.signature of Alias('nested_rules', 'mongo_ops.populate.rules.PopulateRule.nested_rules')>",
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.max_depth",
"signature": "<bound method Alias.signature of Alias('max_depth', 'mongo_ops.populate.rules.PopulateRule.max_depth')>",
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.filter",
"signature": "<bound method Alias.signature of Alias('filter', 'mongo_ops.populate.rules.PopulateRule.filter')>",
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.projection",
"signature": "<bound method Alias.signature of Alias('projection', 'mongo_ops.populate.rules.PopulateRule.projection')>",
"docstring": null
}
}
},
"T": {
"name": "T",
"kind": "attribute",
"path": "mongo_ops.populate.engine.T",
"signature": null,
"docstring": null
},
"PopulationEngine": {
"name": "PopulationEngine",
"kind": "class",
"path": "mongo_ops.populate.engine.PopulationEngine",
"signature": "<bound method Class.signature of Class('PopulationEngine', 12, 165)>",
"docstring": null,
"members": {
"register_repo": {
"name": "register_repo",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.register_repo",
"signature": "<bound method Function.signature of Function('register_repo', 21, 22)>",
"docstring": null
},
"populate": {
"name": "populate",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.populate",
"signature": "<bound method Function.signature of Function('populate', 24, 77)>",
"docstring": null
},
"depopulate": {
"name": "depopulate",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.depopulate",
"signature": "<bound method Function.signature of Function('depopulate', 136, 165)>",
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,435 @@
{
"module": "mongo_ops.populate",
"content": {
"path": "mongo_ops.populate",
"docstring": null,
"objects": {
"PopulationEngine": {
"name": "PopulationEngine",
"kind": "class",
"path": "mongo_ops.populate.PopulationEngine",
"signature": "<bound method Alias.signature of Alias('PopulationEngine', 'mongo_ops.populate.engine.PopulationEngine')>",
"docstring": null,
"members": {
"register_repo": {
"name": "register_repo",
"kind": "function",
"path": "mongo_ops.populate.PopulationEngine.register_repo",
"signature": "<bound method Alias.signature of Alias('register_repo', 'mongo_ops.populate.engine.PopulationEngine.register_repo')>",
"docstring": null
},
"populate": {
"name": "populate",
"kind": "function",
"path": "mongo_ops.populate.PopulationEngine.populate",
"signature": "<bound method Alias.signature of Alias('populate', 'mongo_ops.populate.engine.PopulationEngine.populate')>",
"docstring": null
},
"depopulate": {
"name": "depopulate",
"kind": "function",
"path": "mongo_ops.populate.PopulationEngine.depopulate",
"signature": "<bound method Alias.signature of Alias('depopulate', 'mongo_ops.populate.engine.PopulationEngine.depopulate')>",
"docstring": null
}
}
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.populate.PopulateRule",
"signature": "<bound method Alias.signature of Alias('PopulateRule', 'mongo_ops.populate.rules.PopulateRule')>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.field_name",
"signature": "<bound method Alias.signature of Alias('field_name', 'mongo_ops.populate.rules.PopulateRule.field_name')>",
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.collection_name",
"signature": "<bound method Alias.signature of Alias('collection_name', 'mongo_ops.populate.rules.PopulateRule.collection_name')>",
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.nested_rules",
"signature": "<bound method Alias.signature of Alias('nested_rules', 'mongo_ops.populate.rules.PopulateRule.nested_rules')>",
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.max_depth",
"signature": "<bound method Alias.signature of Alias('max_depth', 'mongo_ops.populate.rules.PopulateRule.max_depth')>",
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.filter",
"signature": "<bound method Alias.signature of Alias('filter', 'mongo_ops.populate.rules.PopulateRule.filter')>",
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.populate.PopulateRule.projection",
"signature": "<bound method Alias.signature of Alias('projection', 'mongo_ops.populate.rules.PopulateRule.projection')>",
"docstring": null
}
}
},
"engine": {
"name": "engine",
"kind": "module",
"path": "mongo_ops.populate.engine",
"signature": null,
"docstring": null,
"members": {
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.populate.engine.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.populate.engine.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.populate.engine.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.populate.engine.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Set": {
"name": "Set",
"kind": "alias",
"path": "mongo_ops.populate.engine.Set",
"signature": "<bound method Alias.signature of Alias('Set', 'typing.Set')>",
"docstring": null
},
"Tuple": {
"name": "Tuple",
"kind": "alias",
"path": "mongo_ops.populate.engine.Tuple",
"signature": "<bound method Alias.signature of Alias('Tuple', 'typing.Tuple')>",
"docstring": null
},
"TypeVar": {
"name": "TypeVar",
"kind": "alias",
"path": "mongo_ops.populate.engine.TypeVar",
"signature": "<bound method Alias.signature of Alias('TypeVar', 'typing.TypeVar')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.populate.engine.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"CircularReferenceError": {
"name": "CircularReferenceError",
"kind": "class",
"path": "mongo_ops.populate.engine.CircularReferenceError",
"signature": "<bound method Alias.signature of Alias('CircularReferenceError', 'mongo_ops.cache.backend.CircularReferenceError')>",
"docstring": null,
"members": {
"collection": {
"name": "collection",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.collection",
"signature": "<bound method Alias.signature of Alias('collection', 'mongo_ops.cache.backend.CircularReferenceError.collection')>",
"docstring": null
},
"doc_id": {
"name": "doc_id",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.doc_id",
"signature": "<bound method Alias.signature of Alias('doc_id', 'mongo_ops.cache.backend.CircularReferenceError.doc_id')>",
"docstring": null
},
"path": {
"name": "path",
"kind": "attribute",
"path": "mongo_ops.populate.engine.CircularReferenceError.path",
"signature": "<bound method Alias.signature of Alias('path', 'mongo_ops.cache.backend.CircularReferenceError.path')>",
"docstring": null
}
}
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.populate.engine.BaseDocument",
"signature": "<bound method Alias.signature of Alias('BaseDocument', 'mongo_ops.models.BaseDocument')>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.id",
"signature": "<bound method Alias.signature of Alias('id', 'mongo_ops.models.BaseDocument.id')>",
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.created_at",
"signature": "<bound method Alias.signature of Alias('created_at', 'mongo_ops.models.BaseDocument.created_at')>",
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.updated_at",
"signature": "<bound method Alias.signature of Alias('updated_at', 'mongo_ops.models.BaseDocument.updated_at')>",
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.populate.engine.BaseDocument.Config",
"signature": "<bound method Alias.signature of Alias('Config', 'mongo_ops.models.BaseDocument.Config')>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.populate_by_name",
"signature": "<bound method Alias.signature of Alias('populate_by_name', 'mongo_ops.models.BaseDocument.Config.populate_by_name')>",
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.arbitrary_types_allowed",
"signature": "<bound method Alias.signature of Alias('arbitrary_types_allowed', 'mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed')>",
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_encoders",
"signature": "<bound method Alias.signature of Alias('json_encoders', 'mongo_ops.models.BaseDocument.Config.json_encoders')>",
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_schema_extra",
"signature": "<bound method Alias.signature of Alias('json_schema_extra', 'mongo_ops.models.BaseDocument.Config.json_schema_extra')>",
"docstring": null
}
}
}
}
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.populate.engine.PopulateRule",
"signature": "<bound method Alias.signature of Alias('PopulateRule', 'mongo_ops.populate.rules.PopulateRule')>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.field_name",
"signature": "<bound method Alias.signature of Alias('field_name', 'mongo_ops.populate.rules.PopulateRule.field_name')>",
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.collection_name",
"signature": "<bound method Alias.signature of Alias('collection_name', 'mongo_ops.populate.rules.PopulateRule.collection_name')>",
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.nested_rules",
"signature": "<bound method Alias.signature of Alias('nested_rules', 'mongo_ops.populate.rules.PopulateRule.nested_rules')>",
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.max_depth",
"signature": "<bound method Alias.signature of Alias('max_depth', 'mongo_ops.populate.rules.PopulateRule.max_depth')>",
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.filter",
"signature": "<bound method Alias.signature of Alias('filter', 'mongo_ops.populate.rules.PopulateRule.filter')>",
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.populate.engine.PopulateRule.projection",
"signature": "<bound method Alias.signature of Alias('projection', 'mongo_ops.populate.rules.PopulateRule.projection')>",
"docstring": null
}
}
},
"T": {
"name": "T",
"kind": "attribute",
"path": "mongo_ops.populate.engine.T",
"signature": null,
"docstring": null
},
"PopulationEngine": {
"name": "PopulationEngine",
"kind": "class",
"path": "mongo_ops.populate.engine.PopulationEngine",
"signature": "<bound method Class.signature of Class('PopulationEngine', 12, 165)>",
"docstring": null,
"members": {
"register_repo": {
"name": "register_repo",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.register_repo",
"signature": "<bound method Function.signature of Function('register_repo', 21, 22)>",
"docstring": null
},
"populate": {
"name": "populate",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.populate",
"signature": "<bound method Function.signature of Function('populate', 24, 77)>",
"docstring": null
},
"depopulate": {
"name": "depopulate",
"kind": "function",
"path": "mongo_ops.populate.engine.PopulationEngine.depopulate",
"signature": "<bound method Function.signature of Function('depopulate', 136, 165)>",
"docstring": null
}
}
}
}
},
"rules": {
"name": "rules",
"kind": "module",
"path": "mongo_ops.populate.rules",
"signature": null,
"docstring": null,
"members": {
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "mongo_ops.populate.rules.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.populate.rules.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.populate.rules.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.populate.rules.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.populate.rules.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.populate.rules.PopulateRule",
"signature": "<bound method Class.signature of Class('PopulateRule', 5, 12)>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.field_name",
"signature": null,
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.collection_name",
"signature": null,
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.nested_rules",
"signature": null,
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.max_depth",
"signature": null,
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.filter",
"signature": null,
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.projection",
"signature": null,
"docstring": null
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,95 @@
{
"module": "mongo_ops.populate.rules",
"content": {
"path": "mongo_ops.populate.rules",
"docstring": null,
"objects": {
"dataclass": {
"name": "dataclass",
"kind": "alias",
"path": "mongo_ops.populate.rules.dataclass",
"signature": "<bound method Alias.signature of Alias('dataclass', 'dataclasses.dataclass')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.populate.rules.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.populate.rules.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.populate.rules.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.populate.rules.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.populate.rules.PopulateRule",
"signature": "<bound method Class.signature of Class('PopulateRule', 5, 12)>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.field_name",
"signature": null,
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.collection_name",
"signature": null,
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.nested_rules",
"signature": null,
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.max_depth",
"signature": null,
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.filter",
"signature": null,
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.populate.rules.PopulateRule.projection",
"signature": null,
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,285 @@
{
"module": "mongo_ops.registry",
"content": {
"path": "mongo_ops.registry",
"docstring": "Model registration for multi-service initialization.",
"objects": {
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.registry.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.registry.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.registry.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"Type": {
"name": "Type",
"kind": "alias",
"path": "mongo_ops.registry.Type",
"signature": "<bound method Alias.signature of Alias('Type', 'typing.Type')>",
"docstring": null
},
"AsyncIOMotorDatabase": {
"name": "AsyncIOMotorDatabase",
"kind": "alias",
"path": "mongo_ops.registry.AsyncIOMotorDatabase",
"signature": "<bound method Alias.signature of Alias('AsyncIOMotorDatabase', 'motor.motor_asyncio.AsyncIOMotorDatabase')>",
"docstring": null
},
"CacheBackend": {
"name": "CacheBackend",
"kind": "class",
"path": "mongo_ops.registry.CacheBackend",
"signature": "<bound method Alias.signature of Alias('CacheBackend', 'mongo_ops.cache.backend.CacheBackend')>",
"docstring": null,
"members": {
"get": {
"name": "get",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.get",
"signature": "<bound method Alias.signature of Alias('get', 'mongo_ops.cache.backend.CacheBackend.get')>",
"docstring": null
},
"set": {
"name": "set",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.set",
"signature": "<bound method Alias.signature of Alias('set', 'mongo_ops.cache.backend.CacheBackend.set')>",
"docstring": null
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.delete",
"signature": "<bound method Alias.signature of Alias('delete', 'mongo_ops.cache.backend.CacheBackend.delete')>",
"docstring": null
},
"exists": {
"name": "exists",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.exists",
"signature": "<bound method Alias.signature of Alias('exists', 'mongo_ops.cache.backend.CacheBackend.exists')>",
"docstring": null
},
"clear_pattern": {
"name": "clear_pattern",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.clear_pattern",
"signature": "<bound method Alias.signature of Alias('clear_pattern', 'mongo_ops.cache.backend.CacheBackend.clear_pattern')>",
"docstring": null
},
"get_stats": {
"name": "get_stats",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.get_stats",
"signature": "<bound method Alias.signature of Alias('get_stats', 'mongo_ops.cache.backend.CacheBackend.get_stats')>",
"docstring": null
},
"initialize": {
"name": "initialize",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.initialize",
"signature": "<bound method Alias.signature of Alias('initialize', 'mongo_ops.cache.backend.CacheBackend.initialize')>",
"docstring": null
},
"shutdown": {
"name": "shutdown",
"kind": "function",
"path": "mongo_ops.registry.CacheBackend.shutdown",
"signature": "<bound method Alias.signature of Alias('shutdown', 'mongo_ops.cache.backend.CacheBackend.shutdown')>",
"docstring": null
}
}
},
"MongoConnectionManager": {
"name": "MongoConnectionManager",
"kind": "class",
"path": "mongo_ops.registry.MongoConnectionManager",
"signature": "<bound method Alias.signature of Alias('MongoConnectionManager', 'mongo_ops.connection.MongoConnectionManager')>",
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and \ndatabase instances, ensuring they are properly initialized and closed \nacross the application lifecycle.",
"members": {
"connect": {
"name": "connect",
"kind": "function",
"path": "mongo_ops.registry.MongoConnectionManager.connect",
"signature": "<bound method Alias.signature of Alias('connect', 'mongo_ops.connection.MongoConnectionManager.connect')>",
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri: MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name: Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
},
"disconnect": {
"name": "disconnect",
"kind": "function",
"path": "mongo_ops.registry.MongoConnectionManager.disconnect",
"signature": "<bound method Alias.signature of Alias('disconnect', 'mongo_ops.connection.MongoConnectionManager.disconnect')>",
"docstring": "Close the active MongoDB connection and cleanup resources."
},
"get_database": {
"name": "get_database",
"kind": "function",
"path": "mongo_ops.registry.MongoConnectionManager.get_database",
"signature": "<bound method Alias.signature of Alias('get_database', 'mongo_ops.connection.MongoConnectionManager.get_database')>",
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"get_client": {
"name": "get_client",
"kind": "function",
"path": "mongo_ops.registry.MongoConnectionManager.get_client",
"signature": "<bound method Alias.signature of Alias('get_client', 'mongo_ops.connection.MongoConnectionManager.get_client')>",
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"lifespan": {
"name": "lifespan",
"kind": "function",
"path": "mongo_ops.registry.MongoConnectionManager.lifespan",
"signature": "<bound method Alias.signature of Alias('lifespan', 'mongo_ops.connection.MongoConnectionManager.lifespan')>",
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting \nlifespan management.\n\nArgs:\n uri: MongoDB connection URI.\n db_name: Name of the database.\n **kwargs: Additional Motor client options.\n\nYields:\n AsyncIOMotorDatabase: The active database instance.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
}
}
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.registry.BaseDocument",
"signature": "<bound method Alias.signature of Alias('BaseDocument', 'mongo_ops.models.BaseDocument')>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.id",
"signature": "<bound method Alias.signature of Alias('id', 'mongo_ops.models.BaseDocument.id')>",
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.created_at",
"signature": "<bound method Alias.signature of Alias('created_at', 'mongo_ops.models.BaseDocument.created_at')>",
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.updated_at",
"signature": "<bound method Alias.signature of Alias('updated_at', 'mongo_ops.models.BaseDocument.updated_at')>",
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.registry.BaseDocument.Config",
"signature": "<bound method Alias.signature of Alias('Config', 'mongo_ops.models.BaseDocument.Config')>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.Config.populate_by_name",
"signature": "<bound method Alias.signature of Alias('populate_by_name', 'mongo_ops.models.BaseDocument.Config.populate_by_name')>",
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.Config.arbitrary_types_allowed",
"signature": "<bound method Alias.signature of Alias('arbitrary_types_allowed', 'mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed')>",
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.Config.json_encoders",
"signature": "<bound method Alias.signature of Alias('json_encoders', 'mongo_ops.models.BaseDocument.Config.json_encoders')>",
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.registry.BaseDocument.Config.json_schema_extra",
"signature": "<bound method Alias.signature of Alias('json_schema_extra', 'mongo_ops.models.BaseDocument.Config.json_schema_extra')>",
"docstring": null
}
}
}
}
},
"ModelRegistry": {
"name": "ModelRegistry",
"kind": "class",
"path": "mongo_ops.registry.ModelRegistry",
"signature": "<bound method Class.signature of Class('ModelRegistry', 11, 149)>",
"docstring": "Registry for managing multiple models and their collections.\n\nThis registry allows central management of collections and their \nassociated indexes, making it easier to perform mass initialization \nat application startup.",
"members": {
"register": {
"name": "register",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.register",
"signature": "<bound method Function.signature of Function('register', 24, 48)>",
"docstring": "Register a model with its collection and indexes.\n\nArgs:\n collection_name: Name of the MongoDB collection.\n model: Document model class (subclass of BaseDocument).\n indexes: List of index specifications (e.g., [(\"email\", 1)]).\n\nUsage:\n ModelRegistry.register(\n \"users\",\n UserDocument,\n indexes=[(\"email\", 1), (\"created_at\", -1)]\n )"
},
"initialize_all": {
"name": "initialize_all",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.initialize_all",
"signature": "<bound method Function.signature of Function('initialize_all', 50, 67)>",
"docstring": "Initialize all registered collections and create indexes.\n\nThis method should be called during application startup to ensure \nall necessary indexes exist in the database.\n\nArgs:\n db: Database instance. If not provided, uses the global database \n from MongoConnectionManager."
},
"get_model": {
"name": "get_model",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.get_model",
"signature": "<bound method Function.signature of Function('get_model', 69, 85)>",
"docstring": "Retrieve a registered model by its collection name.\n\nArgs:\n collection_name: The name of the collection.\n\nReturns:\n Type[BaseDocument]: The registered model class.\n\nRaises:\n KeyError: If the model for the given collection is not registered."
},
"list_collections": {
"name": "list_collections",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.list_collections",
"signature": "<bound method Function.signature of Function('list_collections', 87, 95)>",
"docstring": "List all registered collection names.\n\nReturns:\n List[str]: A list of collection names."
},
"get_cache_backend": {
"name": "get_cache_backend",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.get_cache_backend",
"signature": "<bound method Function.signature of Function('get_cache_backend', 97, 105)>",
"docstring": "Get the registered cache backend instance.\n\nReturns:\n Optional[CacheBackend]: The cache backend, if registered."
},
"set_cache_backend": {
"name": "set_cache_backend",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.set_cache_backend",
"signature": "<bound method Function.signature of Function('set_cache_backend', 107, 119)>",
"docstring": "Register a cache backend for all cache-enabled repositories.\n\nShould be called after MongoDB connection is established,\nbefore cache-backed repositories are used.\n\nArgs:\n backend: A CacheBackend instance (InMemoryCacheBackend\n or RedisCacheBackend)."
},
"initialize_cache": {
"name": "initialize_cache",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.initialize_cache",
"signature": "<bound method Function.signature of Function('initialize_cache', 121, 137)>",
"docstring": "Initialize the registered cache backend.\n\nMust be called after set_cache_backend() and before any\ncache-backed repository operations. Typically called right\nafter MongoDB connection is established.\n\nRaises:\n RuntimeError: If no cache backend has been registered."
},
"shutdown_cache": {
"name": "shutdown_cache",
"kind": "function",
"path": "mongo_ops.registry.ModelRegistry.shutdown_cache",
"signature": "<bound method Function.signature of Function('shutdown_cache', 139, 149)>",
"docstring": "Shutdown the registered cache backend gracefully.\n\nShould be called during application shutdown to clean up\nbackground tasks (e.g., in-memory TTL cleanup)."
}
}
}
}
}
}

View File

@@ -0,0 +1,431 @@
{
"module": "mongo_ops.repository",
"content": {
"path": "mongo_ops.repository",
"docstring": "Repository patterns and CRUD mixins for MongoDB.",
"objects": {
"datetime": {
"name": "datetime",
"kind": "alias",
"path": "mongo_ops.repository.datetime",
"signature": "<bound method Alias.signature of Alias('datetime', 'datetime.datetime')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.repository.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Dict": {
"name": "Dict",
"kind": "alias",
"path": "mongo_ops.repository.Dict",
"signature": "<bound method Alias.signature of Alias('Dict', 'typing.Dict')>",
"docstring": null
},
"Generic": {
"name": "Generic",
"kind": "alias",
"path": "mongo_ops.repository.Generic",
"signature": "<bound method Alias.signature of Alias('Generic', 'typing.Generic')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.repository.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"Optional": {
"name": "Optional",
"kind": "alias",
"path": "mongo_ops.repository.Optional",
"signature": "<bound method Alias.signature of Alias('Optional', 'typing.Optional')>",
"docstring": null
},
"TypeVar": {
"name": "TypeVar",
"kind": "alias",
"path": "mongo_ops.repository.TypeVar",
"signature": "<bound method Alias.signature of Alias('TypeVar', 'typing.TypeVar')>",
"docstring": null
},
"Union": {
"name": "Union",
"kind": "alias",
"path": "mongo_ops.repository.Union",
"signature": "<bound method Alias.signature of Alias('Union', 'typing.Union')>",
"docstring": null
},
"ObjectId": {
"name": "ObjectId",
"kind": "alias",
"path": "mongo_ops.repository.ObjectId",
"signature": "<bound method Alias.signature of Alias('ObjectId', 'bson.ObjectId')>",
"docstring": null
},
"AsyncIOMotorCollection": {
"name": "AsyncIOMotorCollection",
"kind": "alias",
"path": "mongo_ops.repository.AsyncIOMotorCollection",
"signature": "<bound method Alias.signature of Alias('AsyncIOMotorCollection', 'motor.motor_asyncio.AsyncIOMotorCollection')>",
"docstring": null
},
"MongoConnectionManager": {
"name": "MongoConnectionManager",
"kind": "class",
"path": "mongo_ops.repository.MongoConnectionManager",
"signature": "<bound method Alias.signature of Alias('MongoConnectionManager', 'mongo_ops.connection.MongoConnectionManager')>",
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and \ndatabase instances, ensuring they are properly initialized and closed \nacross the application lifecycle.",
"members": {
"connect": {
"name": "connect",
"kind": "function",
"path": "mongo_ops.repository.MongoConnectionManager.connect",
"signature": "<bound method Alias.signature of Alias('connect', 'mongo_ops.connection.MongoConnectionManager.connect')>",
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri: MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name: Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
},
"disconnect": {
"name": "disconnect",
"kind": "function",
"path": "mongo_ops.repository.MongoConnectionManager.disconnect",
"signature": "<bound method Alias.signature of Alias('disconnect', 'mongo_ops.connection.MongoConnectionManager.disconnect')>",
"docstring": "Close the active MongoDB connection and cleanup resources."
},
"get_database": {
"name": "get_database",
"kind": "function",
"path": "mongo_ops.repository.MongoConnectionManager.get_database",
"signature": "<bound method Alias.signature of Alias('get_database', 'mongo_ops.connection.MongoConnectionManager.get_database')>",
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"get_client": {
"name": "get_client",
"kind": "function",
"path": "mongo_ops.repository.MongoConnectionManager.get_client",
"signature": "<bound method Alias.signature of Alias('get_client', 'mongo_ops.connection.MongoConnectionManager.get_client')>",
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"lifespan": {
"name": "lifespan",
"kind": "function",
"path": "mongo_ops.repository.MongoConnectionManager.lifespan",
"signature": "<bound method Alias.signature of Alias('lifespan', 'mongo_ops.connection.MongoConnectionManager.lifespan')>",
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting \nlifespan management.\n\nArgs:\n uri: MongoDB connection URI.\n db_name: Name of the database.\n **kwargs: Additional Motor client options.\n\nYields:\n AsyncIOMotorDatabase: The active database instance.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
}
}
},
"BaseDocument": {
"name": "BaseDocument",
"kind": "class",
"path": "mongo_ops.repository.BaseDocument",
"signature": "<bound method Alias.signature of Alias('BaseDocument', 'mongo_ops.models.BaseDocument')>",
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent \nMongoDB documents. It includes automatic handling of the `_id` field \nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
"members": {
"id": {
"name": "id",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.id",
"signature": "<bound method Alias.signature of Alias('id', 'mongo_ops.models.BaseDocument.id')>",
"docstring": null
},
"created_at": {
"name": "created_at",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.created_at",
"signature": "<bound method Alias.signature of Alias('created_at', 'mongo_ops.models.BaseDocument.created_at')>",
"docstring": null
},
"updated_at": {
"name": "updated_at",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.updated_at",
"signature": "<bound method Alias.signature of Alias('updated_at', 'mongo_ops.models.BaseDocument.updated_at')>",
"docstring": null
},
"Config": {
"name": "Config",
"kind": "class",
"path": "mongo_ops.repository.BaseDocument.Config",
"signature": "<bound method Alias.signature of Alias('Config', 'mongo_ops.models.BaseDocument.Config')>",
"docstring": null,
"members": {
"populate_by_name": {
"name": "populate_by_name",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.Config.populate_by_name",
"signature": "<bound method Alias.signature of Alias('populate_by_name', 'mongo_ops.models.BaseDocument.Config.populate_by_name')>",
"docstring": null
},
"arbitrary_types_allowed": {
"name": "arbitrary_types_allowed",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.Config.arbitrary_types_allowed",
"signature": "<bound method Alias.signature of Alias('arbitrary_types_allowed', 'mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed')>",
"docstring": null
},
"json_encoders": {
"name": "json_encoders",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.Config.json_encoders",
"signature": "<bound method Alias.signature of Alias('json_encoders', 'mongo_ops.models.BaseDocument.Config.json_encoders')>",
"docstring": null
},
"json_schema_extra": {
"name": "json_schema_extra",
"kind": "attribute",
"path": "mongo_ops.repository.BaseDocument.Config.json_schema_extra",
"signature": "<bound method Alias.signature of Alias('json_schema_extra', 'mongo_ops.models.BaseDocument.Config.json_schema_extra')>",
"docstring": null
}
}
}
}
},
"PopulationEngine": {
"name": "PopulationEngine",
"kind": "class",
"path": "mongo_ops.repository.PopulationEngine",
"signature": "<bound method Alias.signature of Alias('PopulationEngine', 'mongo_ops.populate.engine.PopulationEngine')>",
"docstring": null,
"members": {
"register_repo": {
"name": "register_repo",
"kind": "function",
"path": "mongo_ops.repository.PopulationEngine.register_repo",
"signature": "<bound method Alias.signature of Alias('register_repo', 'mongo_ops.populate.engine.PopulationEngine.register_repo')>",
"docstring": null
},
"populate": {
"name": "populate",
"kind": "function",
"path": "mongo_ops.repository.PopulationEngine.populate",
"signature": "<bound method Alias.signature of Alias('populate', 'mongo_ops.populate.engine.PopulationEngine.populate')>",
"docstring": null
},
"depopulate": {
"name": "depopulate",
"kind": "function",
"path": "mongo_ops.repository.PopulationEngine.depopulate",
"signature": "<bound method Alias.signature of Alias('depopulate', 'mongo_ops.populate.engine.PopulationEngine.depopulate')>",
"docstring": null
}
}
},
"PopulateRule": {
"name": "PopulateRule",
"kind": "class",
"path": "mongo_ops.repository.PopulateRule",
"signature": "<bound method Alias.signature of Alias('PopulateRule', 'mongo_ops.populate.rules.PopulateRule')>",
"docstring": null,
"members": {
"field_name": {
"name": "field_name",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.field_name",
"signature": "<bound method Alias.signature of Alias('field_name', 'mongo_ops.populate.rules.PopulateRule.field_name')>",
"docstring": null
},
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.collection_name",
"signature": "<bound method Alias.signature of Alias('collection_name', 'mongo_ops.populate.rules.PopulateRule.collection_name')>",
"docstring": null
},
"nested_rules": {
"name": "nested_rules",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.nested_rules",
"signature": "<bound method Alias.signature of Alias('nested_rules', 'mongo_ops.populate.rules.PopulateRule.nested_rules')>",
"docstring": null
},
"max_depth": {
"name": "max_depth",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.max_depth",
"signature": "<bound method Alias.signature of Alias('max_depth', 'mongo_ops.populate.rules.PopulateRule.max_depth')>",
"docstring": null
},
"filter": {
"name": "filter",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.filter",
"signature": "<bound method Alias.signature of Alias('filter', 'mongo_ops.populate.rules.PopulateRule.filter')>",
"docstring": null
},
"projection": {
"name": "projection",
"kind": "attribute",
"path": "mongo_ops.repository.PopulateRule.projection",
"signature": "<bound method Alias.signature of Alias('projection', 'mongo_ops.populate.rules.PopulateRule.projection')>",
"docstring": null
}
}
},
"T": {
"name": "T",
"kind": "attribute",
"path": "mongo_ops.repository.T",
"signature": null,
"docstring": null
},
"CRUDMixin": {
"name": "CRUDMixin",
"kind": "class",
"path": "mongo_ops.repository.CRUDMixin",
"signature": "<bound method Class.signature of Class('CRUDMixin', 16, 196)>",
"docstring": "Generic CRUD operations mixin for MongoDB collections.\n\nThis mixin provides standard Create, Read, Update, and Delete operations \nthat work with Pydantic models.\n\nAttributes:\n collection: The Motor collection instance.\n model: The Pydantic model class representing the document.",
"members": {
"collection": {
"name": "collection",
"kind": "attribute",
"path": "mongo_ops.repository.CRUDMixin.collection",
"signature": null,
"docstring": null
},
"model": {
"name": "model",
"kind": "attribute",
"path": "mongo_ops.repository.CRUDMixin.model",
"signature": null,
"docstring": null
},
"data_to_model": {
"name": "data_to_model",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.data_to_model",
"signature": "<bound method Function.signature of Function('data_to_model', 39, 40)>",
"docstring": null
},
"create": {
"name": "create",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.create",
"signature": "<bound method Function.signature of Function('create', 42, 58)>",
"docstring": "Create a new document in the collection.\n\nArgs:\n data: The Pydantic model instance to insert.\n\nReturns:\n T: The created Pydantic model instance, including the assigned ID."
},
"get_by_id": {
"name": "get_by_id",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.get_by_id",
"signature": "<bound method Function.signature of Function('get_by_id', 60, 74)>",
"docstring": "Retrieve a document by its ID.\n\nArgs:\n id: The document ID (string or ObjectId).\n\nReturns:\n Optional[T]: The Pydantic model instance if found, else None."
},
"get_many": {
"name": "get_many",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.get_many",
"signature": "<bound method Function.signature of Function('get_many', 76, 115)>",
"docstring": "Retrieve multiple documents with filtering, pagination, and sorting.\n\nArgs:\n filter: MongoDB filter dictionary (e.g., {\"is_active\": True}).\n skip: Number of documents to skip for pagination.\n limit: Maximum number of documents to return (default 100).\n sort: List of sort specifications [(field, direction), ...].\n E.g., [(\"created_at\", -1)] for descending.\n\nReturns:\n List[T]: A list of Pydantic model instances.\n\nUsage:\n ```python\n users = await repo.get_many(\n filter={\"role\": \"admin\"},\n limit=10,\n sort=[(\"username\", 1)]\n )\n ```"
},
"update": {
"name": "update",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.update",
"signature": "<bound method Function.signature of Function('update', 117, 142)>",
"docstring": "Update a document by its ID using the $set operator.\n\nArgs:\n id: The document ID (string or ObjectId).\n data: A dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None.\n\nUsage:\n ```python\n updated_user = await repo.update(user_id, {\"email\": \"new@example.com\"})\n ```"
},
"patch": {
"name": "patch",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.patch",
"signature": "<bound method Function.signature of Function('patch', 144, 167)>",
"docstring": "Partially update a document using $set (REST PATCH semantics).\n\nUnlike update(), patch() takes a partial dict and applies only those\nfields. PopulatingRepository overrides this to prevent patching FK fields.\n\nArgs:\n id: The document ID (string or ObjectId).\n data: A partial dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None."
},
"delete": {
"name": "delete",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.delete",
"signature": "<bound method Function.signature of Function('delete', 169, 183)>",
"docstring": "Delete a document by its ID.\n\nArgs:\n id: The document ID (string or ObjectId).\n\nReturns:\n bool: True if a document was deleted, False otherwise."
},
"count": {
"name": "count",
"kind": "function",
"path": "mongo_ops.repository.CRUDMixin.count",
"signature": "<bound method Function.signature of Function('count', 185, 196)>",
"docstring": "Count documents matching a filter.\n\nArgs:\n filter: MongoDB filter dictionary.\n\nReturns:\n int: The number of matching documents."
}
}
},
"BaseRepository": {
"name": "BaseRepository",
"kind": "class",
"path": "mongo_ops.repository.BaseRepository",
"signature": "<bound method Class.signature of Class('BaseRepository', 199, 221)>",
"docstring": "Base repository class combining CRUD operations and collection management.\n\nThis class simplifies repository creation by automatically obtaining the \ndatabase connection and collection instance.\n\nAttributes:\n collection_name: The name of the collection managed by this repository.",
"members": {
"collection_name": {
"name": "collection_name",
"kind": "attribute",
"path": "mongo_ops.repository.BaseRepository.collection_name",
"signature": null,
"docstring": null
}
}
},
"PopulatingRepository": {
"name": "PopulatingRepository",
"kind": "class",
"path": "mongo_ops.repository.PopulatingRepository",
"signature": "<bound method Class.signature of Class('PopulatingRepository', 224, 342)>",
"docstring": null,
"members": {
"population_engine": {
"name": "population_engine",
"kind": "attribute",
"path": "mongo_ops.repository.PopulatingRepository.population_engine",
"signature": null,
"docstring": null
},
"set_population_engine": {
"name": "set_population_engine",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.set_population_engine",
"signature": "<bound method Function.signature of Function('set_population_engine', 236, 237)>",
"docstring": null
},
"set_populate_rules": {
"name": "set_populate_rules",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.set_populate_rules",
"signature": "<bound method Function.signature of Function('set_populate_rules', 239, 240)>",
"docstring": null
},
"data_to_model": {
"name": "data_to_model",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.data_to_model",
"signature": "<bound method Function.signature of Function('data_to_model', 242, 244)>",
"docstring": null
},
"create": {
"name": "create",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.create",
"signature": "<bound method Function.signature of Function('create', 322, 328)>",
"docstring": null
},
"update": {
"name": "update",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.update",
"signature": "<bound method Function.signature of Function('update', 330, 332)>",
"docstring": null
},
"patch": {
"name": "patch",
"kind": "function",
"path": "mongo_ops.repository.PopulatingRepository.patch",
"signature": "<bound method Function.signature of Function('patch', 334, 342)>",
"docstring": null
}
}
}
}
}
}

View File

@@ -0,0 +1,118 @@
{
"module": "mongo_ops.transactions",
"content": {
"path": "mongo_ops.transactions",
"docstring": "Transaction management helpers for MongoDB.",
"objects": {
"Awaitable": {
"name": "Awaitable",
"kind": "alias",
"path": "mongo_ops.transactions.Awaitable",
"signature": "<bound method Alias.signature of Alias('Awaitable', 'collections.abc.Awaitable')>",
"docstring": null
},
"asynccontextmanager": {
"name": "asynccontextmanager",
"kind": "alias",
"path": "mongo_ops.transactions.asynccontextmanager",
"signature": "<bound method Alias.signature of Alias('asynccontextmanager', 'contextlib.asynccontextmanager')>",
"docstring": null
},
"Any": {
"name": "Any",
"kind": "alias",
"path": "mongo_ops.transactions.Any",
"signature": "<bound method Alias.signature of Alias('Any', 'typing.Any')>",
"docstring": null
},
"Callable": {
"name": "Callable",
"kind": "alias",
"path": "mongo_ops.transactions.Callable",
"signature": "<bound method Alias.signature of Alias('Callable', 'typing.Callable')>",
"docstring": null
},
"List": {
"name": "List",
"kind": "alias",
"path": "mongo_ops.transactions.List",
"signature": "<bound method Alias.signature of Alias('List', 'typing.List')>",
"docstring": null
},
"AsyncIOMotorClientSession": {
"name": "AsyncIOMotorClientSession",
"kind": "alias",
"path": "mongo_ops.transactions.AsyncIOMotorClientSession",
"signature": "<bound method Alias.signature of Alias('AsyncIOMotorClientSession', 'motor.motor_asyncio.AsyncIOMotorClientSession')>",
"docstring": null
},
"MongoConnectionManager": {
"name": "MongoConnectionManager",
"kind": "class",
"path": "mongo_ops.transactions.MongoConnectionManager",
"signature": "<bound method Alias.signature of Alias('MongoConnectionManager', 'mongo_ops.connection.MongoConnectionManager')>",
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and \ndatabase instances, ensuring they are properly initialized and closed \nacross the application lifecycle.",
"members": {
"connect": {
"name": "connect",
"kind": "function",
"path": "mongo_ops.transactions.MongoConnectionManager.connect",
"signature": "<bound method Alias.signature of Alias('connect', 'mongo_ops.connection.MongoConnectionManager.connect')>",
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri: MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name: Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
},
"disconnect": {
"name": "disconnect",
"kind": "function",
"path": "mongo_ops.transactions.MongoConnectionManager.disconnect",
"signature": "<bound method Alias.signature of Alias('disconnect', 'mongo_ops.connection.MongoConnectionManager.disconnect')>",
"docstring": "Close the active MongoDB connection and cleanup resources."
},
"get_database": {
"name": "get_database",
"kind": "function",
"path": "mongo_ops.transactions.MongoConnectionManager.get_database",
"signature": "<bound method Alias.signature of Alias('get_database', 'mongo_ops.connection.MongoConnectionManager.get_database')>",
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"get_client": {
"name": "get_client",
"kind": "function",
"path": "mongo_ops.transactions.MongoConnectionManager.get_client",
"signature": "<bound method Alias.signature of Alias('get_client', 'mongo_ops.connection.MongoConnectionManager.get_client')>",
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
},
"lifespan": {
"name": "lifespan",
"kind": "function",
"path": "mongo_ops.transactions.MongoConnectionManager.lifespan",
"signature": "<bound method Alias.signature of Alias('lifespan', 'mongo_ops.connection.MongoConnectionManager.lifespan')>",
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting \nlifespan management.\n\nArgs:\n uri: MongoDB connection URI.\n db_name: Name of the database.\n **kwargs: Additional Motor client options.\n\nYields:\n AsyncIOMotorDatabase: The active database instance.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
}
}
},
"TransactionManager": {
"name": "TransactionManager",
"kind": "class",
"path": "mongo_ops.transactions.TransactionManager",
"signature": "<bound method Class.signature of Class('TransactionManager', 11, 69)>",
"docstring": "Simplified multi-document transaction handling.\n\nThis class provides helpers for executing operations within a MongoDB \ntransaction, ensuring ACID compliance for multi-document updates.",
"members": {
"start_session": {
"name": "start_session",
"kind": "function",
"path": "mongo_ops.transactions.TransactionManager.start_session",
"signature": "<bound method Function.signature of Function('start_session', 19, 39)>",
"docstring": "Start a transaction session as an async context manager.\n\nArgs:\n **kwargs: Transaction options (e.g., read_concern, write_concern).\n\nYields:\n AsyncIOMotorClientSession: The active session with a started transaction.\n\nUsage:\n async with TransactionManager.start_session() as session:\n await collection.insert_one(doc, session=session)\n await other_collection.update_one(filter, update, session=session)"
},
"execute_transaction": {
"name": "execute_transaction",
"kind": "function",
"path": "mongo_ops.transactions.TransactionManager.execute_transaction",
"signature": "<bound method Function.signature of Function('execute_transaction', 41, 69)>",
"docstring": "Execute multiple operations within a single transaction.\n\nArgs:\n operations: A list of async callables that accept a session \n parameter and return a result.\n **kwargs: Transaction options.\n\nReturns:\n List[Any]: A list containing the results of each operation.\n\nUsage:\n results = await TransactionManager.execute_transaction([\n lambda s: repo1.create(data1, session=s),\n lambda s: repo2.update(id, data2, session=s),\n ])"
}
}
}
}
}
}

62
mcp/mongo-ops/nav.json Normal file
View File

@@ -0,0 +1,62 @@
[
{
"module": "mongo_ops",
"resource": "doc://modules/mongo_ops"
},
{
"module": "mongo_ops.cache",
"resource": "doc://modules/mongo_ops.cache"
},
{
"module": "mongo_ops.cache.backend",
"resource": "doc://modules/mongo_ops.cache.backend"
},
{
"module": "mongo_ops.cache.config",
"resource": "doc://modules/mongo_ops.cache.config"
},
{
"module": "mongo_ops.cache.in_memory",
"resource": "doc://modules/mongo_ops.cache.in_memory"
},
{
"module": "mongo_ops.cache.redis_backend",
"resource": "doc://modules/mongo_ops.cache.redis_backend"
},
{
"module": "mongo_ops.cache.repository",
"resource": "doc://modules/mongo_ops.cache.repository"
},
{
"module": "mongo_ops.connection",
"resource": "doc://modules/mongo_ops.connection"
},
{
"module": "mongo_ops.models",
"resource": "doc://modules/mongo_ops.models"
},
{
"module": "mongo_ops.populate",
"resource": "doc://modules/mongo_ops.populate"
},
{
"module": "mongo_ops.populate.engine",
"resource": "doc://modules/mongo_ops.populate.engine"
},
{
"module": "mongo_ops.populate.rules",
"resource": "doc://modules/mongo_ops.populate.rules"
},
{
"module": "mongo_ops.registry",
"resource": "doc://modules/mongo_ops.registry"
},
{
"module": "mongo_ops.repository",
"resource": "doc://modules/mongo_ops.repository"
},
{
"module": "mongo_ops.transactions",
"resource": "doc://modules/mongo_ops.transactions"
}
]

File diff suppressed because it is too large Load Diff

804
mongo-ops/lib/404.html Normal file
View File

@@ -0,0 +1,804 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>mongo_ops</title>
<link rel="stylesheet" href="/assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="/assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Inter";--md-code-font:"JetBrains Mono"}</style>
<link rel="stylesheet" href="/assets/_mkdocstrings.css">
<link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/." title="mongo_ops" class="md-header__button md-logo" aria-label="mongo_ops" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
mongo_ops
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="cyan" aria-hidden="true" type="radio" name="__palette" id="__palette_0">
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/." title="mongo_ops" class="md-nav__button md-logo" aria-label="mongo_ops" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4"/></svg>
</a>
mongo_ops
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
Core
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Core
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/connection/" class="md-nav__link">
<span class="md-ellipsis">
Connection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/models/" class="md-nav__link">
<span class="md-ellipsis">
Models
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/registry/" class="md-nav__link">
<span class="md-ellipsis">
Registry
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/repository/" class="md-nav__link">
<span class="md-ellipsis">
Repository
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transactions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<div class="md-nav__link md-nav__container">
<a href="/cache/" class="md-nav__link ">
<span class="md-ellipsis">
Cache
</span>
</a>
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Cache
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/cache/backend/" class="md-nav__link">
<span class="md-ellipsis">
Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/cache/config/" class="md-nav__link">
<span class="md-ellipsis">
Config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/cache/in_memory/" class="md-nav__link">
<span class="md-ellipsis">
In Memory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/cache/redis_backend/" class="md-nav__link">
<span class="md-ellipsis">
Redis Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/cache/repository/" class="md-nav__link">
<span class="md-ellipsis">
Repository
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<div class="md-nav__link md-nav__container">
<a href="/populate/" class="md-nav__link ">
<span class="md-ellipsis">
Population
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/populate/engine/" class="md-nav__link">
<span class="md-ellipsis">
Engine
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/populate/rules/" class="md-nav__link">
<span class="md-ellipsis">
Rules
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/", "features": ["navigation.sections", "navigation.expand", "navigation.top", "navigation.instant", "navigation.tracking", "navigation.indexes", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.action.edit", "search.highlight", "search.share", "search.suggest"], "search": "/assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="/assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,119 @@
/* Avoid breaking parameter names, etc. in table cells. */
.doc-contents td code {
word-break: normal !important;
}
/* No line break before first paragraph of descriptions. */
.doc-md-description,
.doc-md-description>p:first-child {
display: inline;
}
/* Max width for docstring sections tables. */
.doc .md-typeset__table,
.doc .md-typeset__table table {
display: table !important;
width: 100%;
}
.doc .md-typeset__table tr {
display: table-row;
}
/* Defaults in Spacy table style. */
.doc-param-default {
float: right;
}
/* Backward-compatibility: docstring section titles in bold. */
.doc-section-title {
font-weight: bold;
}
/* Symbols in Navigation and ToC. */
:root,
[data-md-color-scheme="default"] {
--doc-symbol-attribute-fg-color: #953800;
--doc-symbol-function-fg-color: #8250df;
--doc-symbol-method-fg-color: #8250df;
--doc-symbol-class-fg-color: #0550ae;
--doc-symbol-module-fg-color: #5cad0f;
--doc-symbol-attribute-bg-color: #9538001a;
--doc-symbol-function-bg-color: #8250df1a;
--doc-symbol-method-bg-color: #8250df1a;
--doc-symbol-class-bg-color: #0550ae1a;
--doc-symbol-module-bg-color: #5cad0f1a;
}
[data-md-color-scheme="slate"] {
--doc-symbol-attribute-fg-color: #ffa657;
--doc-symbol-function-fg-color: #d2a8ff;
--doc-symbol-method-fg-color: #d2a8ff;
--doc-symbol-class-fg-color: #79c0ff;
--doc-symbol-module-fg-color: #baff79;
--doc-symbol-attribute-bg-color: #ffa6571a;
--doc-symbol-function-bg-color: #d2a8ff1a;
--doc-symbol-method-bg-color: #d2a8ff1a;
--doc-symbol-class-bg-color: #79c0ff1a;
--doc-symbol-module-bg-color: #baff791a;
}
code.doc-symbol {
border-radius: .1rem;
font-size: .85em;
padding: 0 .3em;
font-weight: bold;
}
code.doc-symbol-attribute {
color: var(--doc-symbol-attribute-fg-color);
background-color: var(--doc-symbol-attribute-bg-color);
}
code.doc-symbol-attribute::after {
content: "attr";
}
code.doc-symbol-function {
color: var(--doc-symbol-function-fg-color);
background-color: var(--doc-symbol-function-bg-color);
}
code.doc-symbol-function::after {
content: "func";
}
code.doc-symbol-method {
color: var(--doc-symbol-method-fg-color);
background-color: var(--doc-symbol-method-bg-color);
}
code.doc-symbol-method::after {
content: "meth";
}
code.doc-symbol-class {
color: var(--doc-symbol-class-fg-color);
background-color: var(--doc-symbol-class-bg-color);
}
code.doc-symbol-class::after {
content: "class";
}
code.doc-symbol-module {
color: var(--doc-symbol-module-fg-color);
background-color: var(--doc-symbol-module-bg-color);
}
code.doc-symbol-module::after {
content: "mod";
}
.doc-signature .autorefs {
color: inherit;
border-bottom: 1px dotted currentcolor;
}

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

2031
mongo-ops/lib/cache/backend/index.html vendored Normal file

File diff suppressed because it is too large Load Diff

1275
mongo-ops/lib/cache/config/index.html vendored Normal file

File diff suppressed because it is too large Load Diff

1952
mongo-ops/lib/cache/in_memory/index.html vendored Normal file

File diff suppressed because it is too large Load Diff

2702
mongo-ops/lib/cache/index.html vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2124
mongo-ops/lib/cache/repository/index.html vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

6872
mongo-ops/lib/index.html Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
mongo-ops/lib/objects.inv Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -295,25 +295,6 @@
<li class="md-tabs__item">
<a href="../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../06_error_handling/" class="md-tabs__link">
@@ -333,17 +314,18 @@
<li class="md-tabs__item">
<a href="../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../03_use_cases/14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -723,7 +705,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -733,105 +715,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_use_cases/03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -936,10 +819,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
@@ -952,8 +835,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1081,10 +964,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
@@ -1097,8 +980,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1226,15 +1109,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1242,10 +1125,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1256,12 +1139,81 @@
<li class="md-nav__item">
<a href="../03_use_cases/14_testing_guide/" class="md-nav__link">
<a href="../03_use_cases/03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1315,28 +1267,6 @@
<li class="md-nav__item">
<a href="../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../06_error_handling/" class="md-nav__link">
@@ -1359,6 +1289,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_use_cases/14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../07_testing_example/" class="md-nav__link">
@@ -1374,6 +1372,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1542,6 +1548,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href=".." class="md-footer__link md-footer__link--prev" aria-label="Previous: Home">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Home
</div>
</div>
</a>
<a href="../02_components/" class="md-footer__link md-footer__link--next" aria-label="Next: Core Components">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Core Components
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1566,7 +1612,7 @@
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -295,25 +295,6 @@
<li class="md-tabs__item">
<a href="../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../06_error_handling/" class="md-tabs__link">
@@ -333,17 +314,18 @@
<li class="md-tabs__item">
<a href="../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../03_use_cases/14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -870,7 +852,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -880,105 +862,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_use_cases/03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -1083,10 +966,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
@@ -1099,8 +982,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1228,10 +1111,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
@@ -1244,8 +1127,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1373,15 +1256,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="0">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1389,10 +1272,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1403,12 +1286,81 @@
<li class="md-nav__item">
<a href="../03_use_cases/14_testing_guide/" class="md-nav__link">
<a href="../03_use_cases/03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../03_use_cases/19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1462,28 +1414,6 @@
<li class="md-nav__item">
<a href="../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../06_error_handling/" class="md-nav__link">
@@ -1506,6 +1436,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_use_cases/14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../07_testing_example/" class="md-nav__link">
@@ -1521,6 +1519,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1816,6 +1822,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../01_overview/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Overview">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Overview
</div>
</div>
</a>
<a href="../03_use_cases/01_basic_crud/" class="md-footer__link md-footer__link--next" aria-label="Next: Basic CRUD">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Basic CRUD
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1840,7 +1886,7 @@
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -734,7 +716,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -744,108 +726,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +833,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +849,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +981,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +997,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1249,15 +1129,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1145,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1279,12 +1159,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1584,6 +1587,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../../02_components/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Core Components">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Core Components
</div>
</div>
</a>
<a href="../02_custom_repo/" class="md-footer__link md-footer__link--next" aria-label="Next: Custom Repo">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Custom Repo
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1608,7 +1651,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -734,7 +716,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -744,108 +726,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +833,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +849,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +981,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +997,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1249,15 +1129,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1145,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1279,12 +1159,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1567,6 +1570,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../01_basic_crud/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Basic CRUD">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Basic CRUD
</div>
</div>
</a>
<a href="../06_multi_model/" class="md-footer__link md-footer__link--next" aria-label="Next: Multi Model">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Multi Model
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1591,7 +1634,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -9,7 +9,7 @@
<link rel="prev" href="../06_multi_model/">
<link rel="prev" href="../17_populate_depopulate_examples/">
<link rel="next" href="../12_transaction_helper/">
@@ -20,7 +20,7 @@
<title>Transaction Support - Mongo Ops Documentation</title>
<title>Transactions - Mongo Ops Documentation</title>
@@ -108,7 +108,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Transaction Support
Transactions
</span>
</div>
@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -627,186 +609,6 @@
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" checked>
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
<span class="md-ellipsis">
Transactions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Transaction Support
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-new" class="md-nav__link">
<span class="md-ellipsis">
📦 What's New?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example" class="md-nav__link">
<span class="md-ellipsis">
🚀 Example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tips" class="md-nav__link">
<span class="md-ellipsis">
💡 Tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#related" class="md-nav__link">
<span class="md-ellipsis">
Related
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
@@ -828,10 +630,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
@@ -844,8 +646,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +755,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +771,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +903,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +919,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1228,6 +1030,8 @@
@@ -1243,21 +1047,19 @@
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" checked>
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1067,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1276,15 +1078,162 @@
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Transactions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Transactions
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-new" class="md-nav__link">
<span class="md-ellipsis">
📦 What's New?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example" class="md-nav__link">
<span class="md-ellipsis">
🚀 Example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tips" class="md-nav__link">
<span class="md-ellipsis">
💡 Tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#related" class="md-nav__link">
<span class="md-ellipsis">
Related
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1535,7 +1538,7 @@
<hr />
<h2 id="related">Related</h2>
<ul>
<li><a href="../06_multi_model/">06 – Multi-model</a> · <a href="../12_transaction_helper/">12 – Transaction helper</a> · <a href="../../06_error_handling/">Error Handling</a></li>
<li><a href="../06_multi_model/">06 – Multi-model</a> · <a href="../12_transaction_helper/">12 – Transaction helper</a> · <a href="../18_aggregation_pipelines/">18 – Aggregation pipelines</a> · <a href="../19_bulk_operations/">19 – Bulk operations</a> · <a href="../../06_error_handling/">Error Handling</a></li>
</ul>
@@ -1569,6 +1572,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../17_populate_depopulate_examples/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Populate &amp; Depopulate Examples">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Populate & Depopulate Examples
</div>
</div>
</a>
<a href="../12_transaction_helper/" class="md-footer__link md-footer__link--next" aria-label="Next: Transaction Helper">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Transaction Helper
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1593,7 +1636,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -9,7 +9,7 @@
<link rel="prev" href="../12_transaction_helper/">
<link rel="prev" href="../06_multi_model/">
<link rel="next" href="../05_soft_deletes/">
@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -627,108 +609,6 @@
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
<span class="md-ellipsis">
Transactions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
@@ -750,10 +630,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" checked>
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
@@ -766,8 +646,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_3">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +833,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +849,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +981,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +997,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1249,15 +1129,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1145,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1279,12 +1159,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1587,6 +1590,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../06_multi_model/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Multi Model">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Multi Model
</div>
</div>
</a>
<a href="../05_soft_deletes/" class="md-footer__link md-footer__link--next" aria-label="Next: Soft Deletes">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Soft Deletes
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1611,7 +1654,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -627,108 +609,6 @@
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
<span class="md-ellipsis">
Transactions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
@@ -750,10 +630,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" checked>
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="">
@@ -766,8 +646,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_3">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +833,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +849,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +981,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +997,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1249,15 +1129,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1145,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1279,12 +1159,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1565,6 +1568,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../04_pagination/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Pagination">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Pagination
</div>
</div>
</a>
<a href="../13_index_creation/" class="md-footer__link md-footer__link--next" aria-label="Next: Index Creation">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Index Creation
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1589,7 +1632,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -12,7 +12,7 @@
<link rel="prev" href="../02_custom_repo/">
<link rel="next" href="../03_transactions/">
<link rel="next" href="../04_pagination/">
<link rel="icon" href="../../assets/images/favicon.png">
@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -734,7 +716,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -744,108 +726,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -953,10 +833,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -969,8 +849,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1101,10 +981,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1117,8 +997,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1249,15 +1129,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1265,10 +1145,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1279,12 +1159,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1338,28 +1287,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1382,6 +1309,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1397,6 +1392,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1569,6 +1572,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../02_custom_repo/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Custom Repo">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Custom Repo
</div>
</div>
</a>
<a href="../04_pagination/" class="md-footer__link md-footer__link--next" aria-label="Next: Pagination">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Pagination
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1593,7 +1636,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

View File

@@ -297,25 +297,6 @@
<li class="md-tabs__item">
<a href="../../05_patterns/" class="md-tabs__link">
Common Patterns
</a>
</li>
<li class="md-tabs__item">
<a href="../../06_error_handling/" class="md-tabs__link">
@@ -335,17 +316,18 @@
<li class="md-tabs__item">
<a href="../../07_testing_example/" class="md-tabs__link">
<li class="md-tabs__item">
<a href="../14_testing_guide/" class="md-tabs__link">
Testing Example
Testing
</a>
</li>
</a>
</li>
@@ -656,7 +638,7 @@
<span class="md-ellipsis">
Transactions
Data & Queries
</span>
@@ -666,108 +648,6 @@
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Transactions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
<span class="md-ellipsis">
Data & Queries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Data & Queries
</label>
@@ -875,10 +755,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" checked>
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="">
@@ -891,8 +771,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_4">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Caching
</label>
@@ -1110,10 +990,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="">
@@ -1126,8 +1006,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Population
</label>
@@ -1258,15 +1138,15 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="">
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="">
<span class="md-ellipsis">
Testing
Advanced Usage
</span>
@@ -1274,10 +1154,10 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_6">
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Testing
Advanced Usage
</label>
<ul class="md-nav__list" data-md-scrollfix>
@@ -1288,12 +1168,81 @@
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<a href="../03_transactions/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
Transactions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../12_transaction_helper/" class="md-nav__link">
<span class="md-ellipsis">
Transaction Helper
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../18_aggregation_pipelines/" class="md-nav__link">
<span class="md-ellipsis">
Aggregation Pipelines
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../19_bulk_operations/" class="md-nav__link">
<span class="md-ellipsis">
Bulk Operations
</span>
@@ -1347,28 +1296,6 @@
<li class="md-nav__item">
<a href="../../05_patterns/" class="md-nav__link">
<span class="md-ellipsis">
Common Patterns
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../06_error_handling/" class="md-nav__link">
@@ -1391,6 +1318,74 @@
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Testing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../14_testing_guide/" class="md-nav__link">
<span class="md-ellipsis">
Testing Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../07_testing_example/" class="md-nav__link">
@@ -1406,6 +1401,14 @@
</li>
</ul>
</nav>
</li>
</ul>
</nav>
@@ -1588,6 +1591,46 @@
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../13_index_creation/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Index Creation">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Index Creation
</div>
</div>
</a>
<a href="../10_cache_and_population/" class="md-footer__link md-footer__link--next" aria-label="Next: Cache + Population">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Cache + Population
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
@@ -1612,7 +1655,7 @@
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.top", "navigation.instant", "content.code.copy", "content.code.annotate", "navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.sections", "navigation.footer", "navigation.top", "navigation.instant", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>

Some files were not shown because too many files have changed in this diff Show More