<aname="L6"></a><ttclass="py-lineno"> 6</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># This program is free software; you can redistribute it and/or</tt></tt>
<aname="L7"></a><ttclass="py-lineno"> 7</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># modify it under the terms of the GNU General Public License</tt></tt>
<aname="L8"></a><ttclass="py-lineno"> 8</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># as published by the Free Software Foundation; either version 2 </tt></tt>
<aname="L9"></a><ttclass="py-lineno"> 9</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># of the License, or (at your option) any later version.</tt></tt>
<aname="L11"></a><ttclass="py-lineno"> 11</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># This program is distributed in the hope that it will be useful,</tt></tt>
<aname="L12"></a><ttclass="py-lineno"> 12</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># but WITHOUT ANY WARRANTY; without even the implied warranty of</tt></tt>
<aname="L13"></a><ttclass="py-lineno"> 13</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt></tt>
<aname="L14"></a><ttclass="py-lineno"> 14</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># GNU General Public License for more details. </tt></tt>
<aname="L16"></a><ttclass="py-lineno"> 16</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># You should have received a copy of the GNU General Public License</tt></tt>
<aname="L17"></a><ttclass="py-lineno"> 17</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># along with this program; if not, write to the Free Software</tt></tt>
<aname="L18"></a><ttclass="py-lineno"> 18</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</tt></tt>
</div><divid="_xml-collapsed"style="display:none;"pad="+++"indent="++++"></div><divid="_xml-expanded"><aname="L45"></a><ttclass="py-lineno"> 45</tt><ttclass="py-line"><ttclass="py-docstring">""" Parse the result from the server, and immeditately catch</tt></tt>
<aname="L46"></a><ttclass="py-lineno"> 46</tt><ttclass="py-line"><ttclass="py-docstring"> possible errors."""</tt></tt>
<aname="L68"></a><ttclass="py-lineno"> 68</tt><ttclass="py-line"><ttclass="py-string">'MAJR'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'MeSH Major Topic'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L95"></a><ttclass="py-lineno"> 95</tt><ttclass="py-line"><ttclass="py-string">'consensus development conference'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Consensus Development Conference'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L96"></a><ttclass="py-lineno"> 96</tt><ttclass="py-line"><ttclass="py-string">'consensus development conference, NIH'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Consensus Development Conference, NIH'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L98"></a><ttclass="py-lineno"> 98</tt><ttclass="py-line"><ttclass="py-string">'corrected and republished article'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Corrected and Republished Article'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L122"></a><ttclass="py-lineno">122</tt><ttclass="py-line"><ttclass="py-string">'retraction of publication'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Retraction of Publication'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L128"></a><ttclass="py-lineno">128</tt><ttclass="py-line"><ttclass="py-string">'review of reported cases'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Review of Reported Cases'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L158"></a><ttclass="py-lineno">158</tt><ttclass="py-line"><ttclass="py-op">(</tt><ttclass="py-string">'aged, 80 and over'</tt><ttclass="py-op">,</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'80 and over'</tt><ttclass="py-op">)</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L174"></a><ttclass="py-lineno">174</tt><ttclass="py-line"><ttclass="py-string">'jsubsetaim'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Core clinical journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#AIM - Abridged Index Medicus A list of core clinical journals created 20 years ago </tt></tt>
<aname="L179"></a><ttclass="py-lineno">179</tt><ttclass="py-line"><ttclass="py-string">'jsubseth'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Health administration journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#H - health administration journals, non-Index Medicus </tt></tt>
<aname="L180"></a><ttclass="py-lineno">180</tt><ttclass="py-line"><ttclass="py-string">'jsubsetim'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Index Medicus journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#IM - Index Medicus journals </tt></tt>
<aname="L181"></a><ttclass="py-lineno">181</tt><ttclass="py-line"><ttclass="py-string">'jsubsetk'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Consumer health journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#K - consumer health journals, non-Index Medicus </tt></tt>
<aname="L183"></a><ttclass="py-lineno">183</tt><ttclass="py-line"><ttclass="py-string">'jsubsetq'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'History of Medicine journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#Q - history of medicine journals, non-Index Medicus </tt></tt>
<aname="L185"></a><ttclass="py-lineno">185</tt><ttclass="py-line"><ttclass="py-string">'jsubsets'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'NASA journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#S - National Aeronautics and Space Administration (NASA) journals, non-Index Medicus </tt></tt>
<aname="L186"></a><ttclass="py-lineno">186</tt><ttclass="py-line"><ttclass="py-string">'jsubsett'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Health tech assesment journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#T - health technology assessment journals, non-Index Medicus </tt></tt>
<aname="L187"></a><ttclass="py-lineno">187</tt><ttclass="py-line"><ttclass="py-string">'jsubsetx'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'AIDS/HIV journals'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt><ttclass="py-comment">#X - AIDS/HIV journals, non-Index Medicus </tt></tt>
<aname="L190"></a><ttclass="py-lineno">190</tt><ttclass="py-line"><ttclass="py-string">'cam[sb]'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Complementary and Alternative Medicine'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L191"></a><ttclass="py-lineno">191</tt><ttclass="py-line"><ttclass="py-string">'history[sb]'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'History of Medicine'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L195"></a><ttclass="py-lineno">195</tt><ttclass="py-line"><ttclass="py-string">'space[sb]'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Space Life Sciences'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L196"></a><ttclass="py-lineno">196</tt><ttclass="py-line"><ttclass="py-string">'publisher[sb]'</tt><ttclass="py-op">:</tt><ttclass="py-name">_</tt><ttclass="py-op">(</tt><ttclass="py-string">'Supplied by Publisher'</tt><ttclass="py-op">)</tt><ttclass="py-op">,</tt></tt>
<aname="L209"></a><ttclass="py-lineno">209</tt><ttclass="py-line"><ttclass="py-docstring"> 'field' is a single value from self.query_fields.</tt></tt>
<aname="L210"></a><ttclass="py-lineno">210</tt><ttclass="py-line"><ttclass="py-docstring"> 'publication_type' is a single value from self.publication_types, or None.</tt></tt>
<aname="L211"></a><ttclass="py-lineno">211</tt><ttclass="py-line"><ttclass="py-docstring"> 'language' is from self.language or None</tt></tt>
<aname="L212"></a><ttclass="py-lineno">212</tt><ttclass="py-line"><ttclass="py-docstring"> 'subset' is from self.subset or None</tt></tt>
<aname="L213"></a><ttclass="py-lineno">213</tt><ttclass="py-line"><ttclass="py-docstring"> 'age_range' is from self.age_range or None</tt></tt>
<aname="L214"></a><ttclass="py-lineno">214</tt><ttclass="py-line"><ttclass="py-docstring"> 'human_animal' is from self.human_animal or None</tt></tt>
<aname="L215"></a><ttclass="py-lineno">215</tt><ttclass="py-line"><ttclass="py-docstring"> 'gender' is from self.gender or None</tt></tt>
<aname="L217"></a><ttclass="py-lineno">217</tt><ttclass="py-line"><ttclass="py-docstring"> If use_publication_date is True, select publications whose</tt></tt>
<aname="L218"></a><ttclass="py-lineno">218</tt><ttclass="py-line"><ttclass="py-docstring"> publication date is between from_date and to_date, otherwise</tt></tt>
<aname="L219"></a><ttclass="py-lineno">219</tt><ttclass="py-line"><ttclass="py-docstring"> use the entrez date.</tt></tt>
<aname="L269"></a><ttclass="py-lineno">269</tt><ttclass="py-line"><ttclass="py-name">keywords</tt><ttclass="py-op">=</tt><ttclass="py-string">' AND '</tt><ttclass="py-op">.</tt><ttid="link-44"class="py-name"><atitle="Pyblio.Format.DSL.join
</div><divid="PubMed-collapsed"style="display:none;"pad="+++"indent="++++"></div><divid="PubMed-expanded"><aname="L274"></a><ttclass="py-lineno">274</tt><ttclass="py-line"><ttclass="py-docstring">""" A connection to the PubMed database """</tt></tt>
<aname="L316"></a><ttclass="py-lineno">316</tt><ttclass="py-line"><ttclass="py-comment"># We have the charge of setting and cleaning self._pending</tt></tt>
<aname="L328"></a><ttclass="py-lineno">328</tt><ttclass="py-line"><ttclass="py-keyword">assert</tt><ttclass="py-name">self</tt><ttclass="py-op">.</tt><ttclass="py-name">_pending</tt><ttclass="py-keyword">is</tt><ttclass="py-name">None</tt><ttclass="py-op">,</tt><ttclass="py-string">'no more than one search at a time per connection'</tt></tt>
<aname="L343"></a><ttclass="py-lineno">343</tt><ttclass="py-line"><ttclass="py-keyword">assert</tt><ttclass="py-name">self</tt><ttclass="py-op">.</tt><ttclass="py-name">_pending</tt><ttclass="py-keyword">is</tt><ttclass="py-name">None</tt><ttclass="py-op">,</tt><ttclass="py-string">'no more than one search at a time per connection'</tt></tt>
<aname="L359"></a><ttclass="py-lineno">359</tt><ttclass="py-line"><ttclass="py-comment"># Special case for no query: this would cause an error from</tt></tt>
<aname="L360"></a><ttclass="py-lineno">360</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># the server if we do not catch it first.</tt></tt>
<aname="L376"></a><ttclass="py-lineno">376</tt><ttclass="py-line"><ttclass="py-comment"># Parameters necessary to fetch the content of the result set</tt></tt>
<aname="L389"></a><ttclass="py-lineno">389</tt><ttclass="py-line"><ttclass="py-comment"># data is None during the initial call to the method,</tt></tt>
<aname="L390"></a><ttclass="py-lineno">390</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># so that we can reuse the same code.</tt></tt>
Pyblio.Stores.bsddbstore.log"class="py-name"href="#"onclick="return doclink('link-86', 'log', 'link-50');">log</a></tt><ttclass="py-op">.</tt><ttclass="py-name">warn</tt><ttclass="py-op">(</tt><ttclass="py-string">"what happend? I increased the result set by %d"</tt><ttclass="py-op">%</tt><ttclass="py-name">freshly_parsed</tt><ttclass="py-op">)</tt></tt>
<aname="L398"></a><ttclass="py-lineno">398</tt><ttclass="py-line"><ttclass="py-comment"># pretend there has been at least one parsing, so</tt></tt>
<aname="L399"></a><ttclass="py-lineno">399</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># that we ensure that the task</tt></tt>
<aname="L400"></a><ttclass="py-lineno">400</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># progresses. Otherwise we might loop forever on</tt></tt>
<aname="L401"></a><ttclass="py-lineno">401</tt><ttclass="py-line"><ttclass="py-comment"></tt><ttclass="py-comment"># an entry we cannot parse.</tt></tt>
<aname="L411"></a><ttclass="py-lineno">411</tt><ttclass="py-line"><ttclass="py-comment"># No need to fetch 500 results if only 20 are requested</tt></tt>
</div><divid="PubMed.cancel-collapsed"style="display:none;"pad="+++"indent="++++++++"></div><divid="PubMed.cancel-expanded"><aname="L434"></a><ttclass="py-lineno">434</tt><ttclass="py-line"><ttclass="py-docstring">""" Cancel a running query. The database is not reverted to its</tt></tt>
<aname="L435"></a><ttclass="py-lineno">435</tt><ttclass="py-line"><ttclass="py-docstring"> original state."""</tt></tt>